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

Доброе время суток! Есть таблица с данными из стрима, т.е.

оператор только insert. Что-то вроде
id uuid, modified_ts timestamp и много других колонок. В подавляющем числе запросов нужны только актуальное= последнее id. Я думал использовать отдельную колонку которая будет обновляться с помощью trigger. Т.е. "флаг"=1 для актуального(последнего по timestamp) id а остальные записи с тем же id будут "флаг"=0.
Вопрос нужно или искать другое решение или звучит разумно?

20 ответов

14 просмотров

Лучшэ регистр последних в отдельную таблицу пихать. Тожэ триггером можно.

Denis-M Автор вопроса
Ilya Anfimov
Лучшэ регистр последних в отдельную таблицу пихать...

Я так и сделал. Не могу понять почему я так решил... А разве колонка с флагом в той же таблице не лучше? Я про то что мне кажется join медленнее чем where. Я что-то напутал? Не могу для себя объяснить почему лучше в другую таблицу "актуальные"/последние данные записывать.

Лучшэ в первую очередь тем, что большая таблица у вас будет практически write-only. Без удалений. Это уменьшает шансы на всякий bloat. А маленькая — её и перестроить если что недолго. К тому жэ, вашы пляски с обновлением не тех строк — логически довольно нетривиальная операцыя. Особенно при параллельных запросах. А строку в одной таблицэ апсертнуть — тривиальная. Кроме того, никаких joinов не предвидится если в маленькой будет всё, что нужно для большынства запросов. Ну, и по эффективности выборки — оба варианта можно сделать вполне эффективными.

Denis-M Автор вопроса
Ilya Anfimov
Лучшэ в первую очередь тем, что большая таблица у ...

Спасибо за пояснение. У меня в большой PK это sequence, назовём rowno т.е. trigger в актуальную/маленькую таблицу добавляет новую строку с rowno, id, timestamp или меняет существую через upset. К тому в актуальной есть foreign key на большую таблицу. Работает, пока данных не много, но я переживаю за performance в будущем.

Denis-M Автор вопроса
Konstantin Zaitsev
Дайте мне undo 😂😂😂😂

К сожалению не понял про что вы. Любопытно

Denis M
Спасибо за пояснение. У меня в большой PK это seq...

Вы большую таблицу вообще не затронете если в маленькой pk не меняете

Denis-M Автор вопроса
Konstantin Zaitsev
А зачем вы pk меняете?

Вы про маленькую таблицу? Там PK это id и timestamp.

Denis-M Автор вопроса
Konstantin Zaitsev
И что ?

Извините, только id

Denis M
Извините, только id

Покажите схему вы запутали А так то, ну вставляются записи из приложения ну и хорошо

Denis-M Автор вопроса
Konstantin Zaitsev
Покажите схему вы запутали А так то, ну вставляют...

Большая таблица: rowno int8 (pk), id uuid, ts timestamp, остальные колонки Маленькая таблица: id uuid (pk), rowno int8 (fk к большой), ts timestamp Дальше триггер в большой insert в маленькую on conflict do update в маленькой

Denis M
Большая таблица: rowno int8 (pk), id uuid, ts time...

Тока как вторая маленькой получилась ?))

Denis-M Автор вопроса
Konstantin Zaitsev
А ну да! Для pg отлично

Понял, спасибо. Всегда хочется улучшить. Ну как говорится - лучшее враг хорошего

Denis-M Автор вопроса
Konstantin Zaitsev
Тока как вторая маленькой получилась ?))

Так у меня в большой может быть десяток одинаковых id с разными timestamp, эта таблица содержит данные стрима.

Denis-M Автор вопроса
Konstantin Zaitsev
Ок. Я понял. Но вы у себя выше посмотрите.

Да, моя вина. Описал не точно. Ещё раз спасибо!

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта