8 ポイント 投稿者 GN⁺ 2024-08-19 | 1件のコメント | WhatsAppで共有
  • PgQueuerは、PostgreSQLの堅牢性を活用したPython向けのミニマルかつ高性能なジョブキューライブラリ
  • シンプルさと効率性を重視して設計されており、PostgreSQLのLISTEN/NOTIFYを使ってジョブキューを簡単に管理できる

特徴

  • 簡単な統合: PostgreSQLを利用している既存のPythonアプリケーションに容易に統合できる
  • 効率的な並行処理: PostgreSQLのFOR UPDATE SKIP LOCKEDを使用し、信頼性の高い並行ジョブ処理を可能にする
  • リアルタイム通知: LISTENNOTIFYを活用し、ジョブ状態の変化に対するリアルタイム更新を提供する

GN⁺のまとめ

  • PgQueuerは、PostgreSQLのLISTEN/NOTIFY機能を活用して、Pythonアプリケーションでジョブキューを効率的に管理できるようにする。
  • 簡単な統合と効率的な並行処理を提供し、既存システムに容易に適用できる。
  • リアルタイム通知機能によりジョブの状態を即座に確認でき、ジョブ管理をしやすくする。
  • 類似の機能を提供する他のプロジェクトとして、RQやCeleryなどがある。

1件のコメント

 
GN⁺ 2024-08-19
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の共同メンテナーである