Skip to content

farir1408/pgq_demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

outbox

PgQ — это надстройка над PostgreSQL, предназначенная для работы с очередями событий. В то время как классическая Outbox-таблица представляет собой простой способ реализации паттерна Outbox, PgQ предлагает оптимизированный, отказоустойчивый и высокопроизводительный механизм.

1. PgQ снижает нагрузку на индексы и уменьшает bloat

Проблема Outbox-таблицы

В стандартной Outbox-таблице каждое событие — это обычная запись в таблице, которая:

  • Нарастает со временем - её размер постоянно увеличивается.
  • Требует активного удаления обработанных событий (DELETE или VACUUM).
  • Индексы со временем раздуваются (bloat), что приводит к деградации производительности.

Как PgQ решает эту проблему?

  • PgQ не требует DELETE - обработанные события просто перестают быть видимыми для консюмера, а фоновый процесс автоматически архивирует их в логически организованные партиции.
  • PgQ использует эффективную систему слайсинга (партиционирование данных), что позволяет избежать перегрузки индексами.

Внутренне PgQ работает на базе слоёв событий, что избегает проблем с bloating’ом в отличие от обычной таблицы.

PgQ оптимизирован для конкурентного чтения событий

Проблема Outbox-таблицы

Обычно обработчики работают так:

SELECT * FROM outbox WHERE processed_at IS NULL ORDER BY created_at LIMIT 100; UPDATE outbox SET processed_at = now() WHERE id IN (...);

Но!

  • Конкурентные консюмеры блокируют друг друга (UPDATE блокирует строки).
  • LIMIT 100 может приводить к неоптимальному использованию индекса.
  • Нет распределения нагрузки между обработчиками.

Как PgQ решает эту проблему?

  • Консюмеры не блокируют друг друга - они получают уникальный batch ID при вызове pgq.next_batch().
  • Нет необходимости в UPDATE - обработанные события автоматически скрываются от последующих запросов.

PgQ поддерживает масштабирование и шардирование

Проблема Outbox-таблицы

Если нужно масштабировать обработку, приходится:

  • Добавлять физическое шардирование таблицы.
  • Делать разделение по разным обработчикам вручную.
  • Ручное управление конкурентным доступом.

Как PgQ решает эту проблему?

  • Поддержка подочередей (subqueues) - можно разделять события по группам.
  • Горизонтальное масштабирование - можно запускать много обработчиков без конфликтов.
  • Можно шардинговать PgQ по разным БД.

Вывод

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published