Сама блокировка строки ничего плохого не несет, но будет нести дополнительный апдейт состояния этой строки(таска).
вообщето после обработки строка либо удаляться будет, либо помечаться обработанной
Это и есть апдейт состояния, который будет создавать новую версию строки, что будет провоцировать автовакуум, если у вас небольшая нагрузка, то это не проблема, в принципе.
2-5 тыс тасок в минуту где-то
что такое автовакуум?
Механизм очистки неактуальных версий строк в mvcc.
Ну, я вам подсветил проблему, а там уж сами решайте:)
а в чем проблема с автовакуумом - база нагнется если что?
Автовакуум - это standalone процесс, который будет использовать ресурсы базы(и может даже нагнуть), большое количество версий строк делает visibility map неактуальной, так как страниц хипа становится больше, значит что и выборка по базе и индекс скан становится медленнее. Короче, проблем хватает.
как воркеру себя идентифицировать? shed lock какой нибудь это делает?
В случае подхода с «виртуальным партицированием»? Любой воркер захватывает лок на строку с партицией и читает нужный батч сообщений(в виде mod от номера текущей партиции). Плюс можно прикрутить какой-то механизм аффинити, мы для аутбокса как-то делали.
ага в этом случае
а есть примеры кода какие то в инете?
Не уверен, все-таки наиболее популярное решение для аутбокса - это чтение wal по средствам логической репликации, но у нас такой возможности не было.
Обычно так и делают
Обсуждают сегодня