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

А сориентируйте как правильно: есть таблица, которая в общем то,

почти не меняется, но есть в ней колонка, которая меняется постоянно (грубо говоря, дата следующего опроса состояния, само состояние меняеться не частно)
есть ли какие то практики, отделять эту колонку, что бы она была в отдельном файле?

8 ответов

21 просмотр

Не иметь индексов по этой колонке, тогда будет апдейтить лучше. Если нужен индекс — есть смысл вынести в отдельную таблицу.

Василий- Автор вопроса
alex che
Не иметь индексов по этой колонке, тогда будет апд...

идея такая, колон содержит условное число, выбирается запись с минимальным числом и опрашиваются данные, а ячейка увеличивается на "уровень" приоретета. получится, что некоторые записи можно чаще опрашивать, некоторые реже. думаю ключ тут все таки нужен

Василий
идея такая, колон содержит условное число, выбирае...

Такую priority queue я бы вынес в отдельную таблицу. Либо вообще хранил бы не в таблицах, потому что ей не нужен ACID

Василий- Автор вопроса
alex che
Такую priority queue я бы вынес в отдельную таблиц...

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

На самом деле накладных там байт 60-80, думаю. Около 40 на heap tuple и большэ 20 на primary key. Плюс — доступ из основной таблицы к этой колонке — это плюс два page access. Довольно много. Но если в основной таблицэ записи хотя бы по килобайту в среднем — то выигрыша в скорости можно достичь. При правильной работе (которая, на самом деле, требует глубокого понимания происходящего). А вот надо ли вам с этим возиться — это другой вопрос. Если база ненагружэнная — то интеллектуальные затраты однозначно не будут оправданы.

Василий
идея такая, колон содержит условное число, выбирае...

Будет вобще шикарно, если вы будете хранить не время следующей обработки, а расписание. Тогда расписание будет почти никогда не менятся тоже. Запрос на выбор сущеностей на обработку по расписнию типа create index queue_phase on queue(shortest_phase, id); select id from queue where shortest_phase >= $1 and shortest_phase <= $2 and true_phase >= $3 % true_period and true_phase < $4 % true_period; Это запрос, поддерживающий несколько возможных периодов обращения, при условии, что они все делятся на некоторый минимальный период, и фаза по этому минимальному периоду достаточно селективна. Например, с периодом час, а какие-то 2 часа.

Василий- Автор вопроса
alex che
Будет вобще шикарно, если вы будете хранить не вре...

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

Василий
не совсем понял вашу мысль: я могу за одно обращен...

Ну вы сказали, что после выполнения задачи она откладывается на будущее. Если она откладывается ровно на 9 часов, то это уже расписание. То, что за раз можно обрабатывать только одну задачу — не проблема. Моим методом вы выберете все задачи, которые по расписанию с 23:00 до 23:01, допустим 10 штук, запомните эти 10 штук в приложении и выполните по очереди. Потом запросите с 23:01 до 23:02

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта