8P by neo 3달전 | favorite | 댓글 1개
  • PgQueuer는 PostgreSQL의 견고함을 활용한 Python용 미니멀/고성능 작업 큐 라이브러리
  • 단순성과 효율성을 위해 설계되었으며, PostgreSQL의 LISTEN/NOTIFY를 사용하여 작업 큐를 손쉽게 관리함

특징

  • 간단한 통합: PostgreSQL을 사용하는 기존 Python 애플리케이션과 쉽게 통합할 수 있음
  • 효율적인 동시성 처리: PostgreSQL의 FOR UPDATE SKIP LOCKED를 사용하여 신뢰할 수 있고 동시적인 작업 처리를 가능하게 함
  • 실시간 알림: LISTENNOTIFY를 활용하여 작업 상태 변경에 대한 실시간 업데이트를 제공함

GN⁺의 정리

  • PgQueuer는 PostgreSQL의 LISTEN/NOTIFY 기능을 활용하여 Python 애플리케이션에서 작업 큐를 효율적으로 관리할 수 있게 해줌.
  • 간단한 통합과 효율적인 동시성 처리를 제공하여 기존 시스템에 쉽게 적용할 수 있음.
  • 실시간 알림 기능을 통해 작업 상태를 즉시 확인할 수 있어, 작업 관리가 용이함.
  • 비슷한 기능을 제공하는 다른 프로젝트로는 RQ, Celery 등이 있음.
Hacker News 의견
  • Graphile Worker 라이브러리와의 비교에 대한 질문
  • PostgreSQL 기반 작업 큐 라이브러리들이 공통 스키마를 공유할 가능성에 대한 생각
    • Elixir의 Oban 팬임
    • 여러 언어에서 Sidekiq 호환 라이브러리가 있는 것처럼 PostgreSQL 기반 작업 큐도 유사한 접근이 유익할 것임
    • Rust로 핵심 작업 큐 라이브러리를 개발하고 언어별 바인딩을 고려할 수 있음
  • Postgres를 모든 것에 사용하는 것을 지지하며, 프로젝트에서 이를 극대화하고 있음
    • 다단계 파이프라인, 팬 아웃 및 축적을 수행하는 Postgres 작업 큐를 원함
    • 구조적 관계형 데이터베이스가 이를 모델링하는 데 특히 적합함
    • listen/notify의 최대 페이로드 크기 8k가 제한적임
    • 스트리밍 테이블과 풍부한 타입 지원을 원함
  • Postgres에서 큐를 구현하는 것에 대한 좋은 PostgresFM 에피소드 추천
  • PgQueuer가 Postgres RPC 호출, 트리거 및 cronjobs(pg_cron)을 잘 통합함
  • River 라이브러리도 참고할 만함
    • 예약된 작업 등을 지원함
    • 디버깅을 위한 UI도 제공함
  • Broadcaster를 PUB/SUB 작업에 사용 중임
  • MySQL에서 가장 간단한 작업 큐 예시
    • update job_table set key=value where ... limit 1 구문 사용
    • 간단하고 원자적임
    • PostgreSQL은 update ... limit 구문을 허용하지 않음
  • MySQL 사용자지만 PostgreSQL을 탐구 중임
    • 많은 기능을 기본적으로 제공함
    • 매우 흥미로운 도구임
  • Procrastinate 라이브러리도 있음
    • PostgreSQL의 LISTEN/NOTIFY를 사용함(옵션으로 끌 수 있고 폴링 사용 가능)
    • 동기 및 비동기 작업, 주기적 작업, 재시도, 작업 잠금, 우선순위, 작업 취소/중단, Django 통합(옵션)을 지원함
    • Procrastinate의 공동 유지보수자임