оператор только insert. Что-то вроде
id uuid, modified_ts timestamp и много других колонок. В подавляющем числе запросов нужны только актуальное= последнее id. Я думал использовать отдельную колонку которая будет обновляться с помощью trigger. Т.е. "флаг"=1 для актуального(последнего по timestamp) id а остальные записи с тем же id будут "флаг"=0.
Вопрос нужно или искать другое решение или звучит разумно?
Лучшэ регистр последних в отдельную таблицу пихать. Тожэ триггером можно.
Место экономим 😂
Я так и сделал. Не могу понять почему я так решил... А разве колонка с флагом в той же таблице не лучше? Я про то что мне кажется join медленнее чем where. Я что-то напутал? Не могу для себя объяснить почему лучше в другую таблицу "актуальные"/последние данные записывать.
Лучшэ в первую очередь тем, что большая таблица у вас будет практически write-only. Без удалений. Это уменьшает шансы на всякий bloat. А маленькая — её и перестроить если что недолго. К тому жэ, вашы пляски с обновлением не тех строк — логически довольно нетривиальная операцыя. Особенно при параллельных запросах. А строку в одной таблицэ апсертнуть — тривиальная. Кроме того, никаких joinов не предвидится если в маленькой будет всё, что нужно для большынства запросов. Ну, и по эффективности выборки — оба варианта можно сделать вполне эффективными.
Дайте мне undo 😂😂😂😂
Спасибо за пояснение. У меня в большой PK это sequence, назовём rowno т.е. trigger в актуальную/маленькую таблицу добавляет новую строку с rowno, id, timestamp или меняет существую через upset. К тому в актуальной есть foreign key на большую таблицу. Работает, пока данных не много, но я переживаю за performance в будущем.
А зачем вы pk меняете?
К сожалению не понял про что вы. Любопытно
Вы большую таблицу вообще не затронете если в маленькой pk не меняете
Вы про маленькую таблицу? Там PK это id и timestamp.
Извините, только id
Покажите схему вы запутали А так то, ну вставляются записи из приложения ну и хорошо
Большая таблица: rowno int8 (pk), id uuid, ts timestamp, остальные колонки Маленькая таблица: id uuid (pk), rowno int8 (fk к большой), ts timestamp Дальше триггер в большой insert в маленькую on conflict do update в маленькой
А ну да! Для pg отлично
Тока как вторая маленькой получилась ?))
Понял, спасибо. Всегда хочется улучшить. Ну как говорится - лучшее враг хорошего
Так у меня в большой может быть десяток одинаковых id с разными timestamp, эта таблица содержит данные стрима.
Ок. Я понял. Но вы у себя выше посмотрите.
Да, моя вина. Описал не точно. Ещё раз спасибо!
Обсуждают сегодня