LINUX.ORG.RU

Как огранизовать очередь на PostgreSQL ?

 


1

2

Subj ? Почему то нужно ставить LOCK на table в транзакции чтобы одна и та же запись не попала нескольким workерам сразу Т е что-то типа:

begin
LOCK table
select fromt table where id = 1
delete from table where id =1
commit

. В результате эти LOCKи временами скапливаются что не есть хорошо и тормозит все систему. Есть ли альтернативы ?

Не нужно организовывать очередь на СУБД. НЕ НУЖНО ОРГАНИЗОВЫВАТЬ ОЧЕРЕЬ НА СУБД.

anonymous ()
Ответ на: комментарий от anonymous

Ну ради одной очереди ставить redis как-то не хочется

Jopich ()
Ответ на: комментарий от Jopich

Поставь кролика или zeromq. Но не нужно делать очередь в СУБД.

leave ★★★★★ ()

обычно очередь в субд делается в простых случаях, если хочешь что бы работало норм, делай 1 воркера тут :)

з.ы. лока на запись в postgresql нету?

umren ★★★★★ ()
Последнее исправление: umren (всего исправлений: 1)

delete from table where id =1

RETURNING

anonymous ()

Сделай один процесс (поток), который будет читать задания из базы и распределять по воркерам. А вообще ты базу не по назначению используешь. База предназначена для хранения данных, а не для взаимодействия между подсистемами. Используй любой MQ-сервер.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

один процесс (поток), который будет читать задания из базы и распределять по воркерам

Однажды делал такое, используя listen/notify постгреса: в таблице хранятся описания задач, триггеры ловят изменения.

База предназначена для хранения данных

Для простых задач вполне годится, весьма удобно.

outtaspace ★★★ ()
Ответ на: комментарий от outtaspace

Для простых задач вполне годится, весьма удобно.

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

Legioner ★★★★★ ()

хороший у тебя ник. сразу многое объясняет

anonymous ()
Ответ на: комментарий от Legioner

хотя в итоге всё равно будет лок

В моем случае работать блокировками не пришлось. У был меня один менеджер задач, блокировки задач/объектов жили в нем. База следит за тем чтобы сообщения приходили в правильном порядке.

outtaspace ★★★ ()

И чего только люди не придумают, чтобы не юзать Оракл.

nanonymous ()

открой для себя SELECT FOR UPDATE

quest ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.