172 похожих чатов

У меня опять теоретический вопрос, на этот раз о кишках

сервера БД.
есть поток событий (не очень большой, примерно 1-1.5к в секунду). у каждого события есть один уникальный признак и 3 возможно не уникальных.
нужно сохранить только последнее состояние для каждого уникального события.
в моем мире ( :) ) я бы просто использовал список, например, с доступом по хэшу от уникального признака и каждый раз переписывал состояние вне зависимости от того, изменилось оно или нет. операции в памяти - быстрые.

в случае с БД, как я понял, можно делать INSERT ... ON CONFLICT UPDATE.

вопрос в следующем - движок БД поймет, что неуникальные записи не изменились и не будет ничего апдейтить, или втупую каждый раз будет аплейтить безусловно?

тупой пример:
CREATE TABLE T1 (uid primary key not null, property1 int, property2 int, property 3 int)
insert into t1 (1, 2,3,4);
insert into t1(1, 1,1,4);

при вставке второй записи естественно возникнет исключение неуникальности uid. будет ли движок БД обновлять property3, учитывая, что оно не изменилось с предидущего раза?

4 ответов

10 просмотров
Дмитрий-Бессонов Автор вопроса

а я сам на свой вопрос и отвечу. писаться на диск будет в любом случае страница, поэтому пофиг сколько там записей обновляется, в пределах страницы. ок, ушел читать дальше :)

MVCC требует хранить прошлое состояние

Новая строка будет записана с новым содержимым, даже если оно равно старому. При этом если есть индексы по обновленным полям то становится сильно хуже - в общем случае придется обновлять индексы.

Новая версия будет создаваться всегда. Но при определённых условиях, если Посгрес поймёт что старая никому не нужна и старая и новая версия окажутся на одной странице, то старая версия реюзнётся достаточно быстро. В противном случае на странице останется "дырка". Если записи на этой странице больше апдейтится не будет, то она там так и останется - никакой vacuum её не схлопнет. Т.е. у нас будет фрагментация. Поможет только vacuum full - полное переписываение таблицы. Кроме того, в Посгресе реализован hot update: если апдейт не затрагивает проиндексированные поля и новая версия попадает на одну страницу со старой, то в индексы она включаться не будет, а будет провязана в hot update цепочку. Что значительно ускоряет апдейты. Но это только если не поменялось ни одно из проиндексированных полей. Самое очевидной решение - это использовать upsert (insert ... on conflict update). Но в некоторых случаях append only табличка может действительно оказаться более эффективной.

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта