8 Punkte von GN⁺ 2024-08-19 | 1 Kommentare | Auf WhatsApp teilen
  • PgQueuer ist eine minimalistische, leistungsstarke Job-Queue-Bibliothek für Python, die die Robustheit von PostgreSQL nutzt
  • Sie wurde auf Einfachheit und Effizienz ausgelegt und verwendet PostgreSQLs LISTEN/NOTIFY, um Job-Queues unkompliziert zu verwalten

Merkmale

  • Einfache Integration: Lässt sich leicht in bestehende Python-Anwendungen integrieren, die PostgreSQL verwenden
  • Effiziente Nebenläufigkeitsverarbeitung: Verwendet PostgreSQLs FOR UPDATE SKIP LOCKED, um eine zuverlässige und parallele Job-Verarbeitung zu ermöglichen
  • Echtzeit-Benachrichtigungen: Nutzt LISTEN und NOTIFY, um Echtzeit-Updates bei Änderungen des Job-Status bereitzustellen

Zusammenfassung von GN⁺

  • PgQueuer nutzt die LISTEN/NOTIFY-Funktionen von PostgreSQL, um Job-Queues in Python-Anwendungen effizient zu verwalten.
  • Es bietet einfache Integration und effiziente Nebenläufigkeitsverarbeitung und lässt sich dadurch leicht in bestehende Systeme übernehmen.
  • Durch die Echtzeit-Benachrichtigungsfunktion lässt sich der Status von Jobs sofort prüfen, was die Verwaltung erleichtert.
  • Andere Projekte mit ähnlichem Funktionsumfang sind unter anderem RQ und Celery.

1 Kommentare

 
GN⁺ 2024-08-19
Hacker-News-Kommentare
  • Frage nach einem Vergleich mit der Graphile-Worker-Bibliothek
  • Gedanken dazu, ob PostgreSQL-basierte Job-Queue-Bibliotheken ein gemeinsames Schema teilen könnten
    • Bin Fan von Oban aus dem Elixir-Ökosystem
    • So wie es Sidekiq-kompatible Bibliotheken in mehreren Sprachen gibt, wäre ein ähnlicher Ansatz auch für PostgreSQL-basierte Job-Queues nützlich
    • Man könnte die Kernbibliothek für die Job-Queue in Rust entwickeln und sprachspezifische Bindings in Betracht ziehen
  • Befürwortet, Postgres für alles zu verwenden, und reizt das im Projekt maximal aus
    • Wünscht sich eine Postgres-Job-Queue, die mehrstufige Pipelines, Fan-out und Aggregation ausführt
    • Eine strukturierte relationale Datenbank eignet sich besonders gut, um das zu modellieren
    • Die maximale Payload-Größe von 8k bei listen/notify ist einschränkend
    • Wünscht sich Streaming-Tabellen und umfangreiche Typunterstützung
  • Empfehlung einer guten PostgresFM-Episode zur Implementierung von Queues in Postgres
  • PgQueuer integriert Postgres-RPC-Aufrufe, Trigger und Cronjobs (pg_cron) gut
  • Auch die River-Bibliothek ist einen Blick wert
    • Unterstützt unter anderem geplante Jobs
    • Bietet zudem ein UI zum Debuggen
  • Broadcaster wird für PUB/SUB-Jobs verwendet
  • Einfachstes Beispiel für eine Job-Queue in MySQL
    • Verwendet die Anweisung update job_table set key=value where ... limit 1
    • Einfach und atomar
    • PostgreSQL erlaubt die Syntax update ... limit nicht
  • Ist MySQL-Nutzer, erkundet aber gerade PostgreSQL
    • Bietet viele Funktionen direkt mit
    • Ein sehr interessantes Werkzeug
  • Es gibt auch die Bibliothek Procrastinate
    • Nutzt LISTEN/NOTIFY von PostgreSQL (kann optional deaktiviert werden, Polling ist möglich)
    • Unterstützt synchrone und asynchrone Jobs, periodische Jobs, Wiederholungsversuche, Job-Sperren, Prioritäten, Job-Abbruch/Unterbrechung sowie optionale Django-Integration
    • Ist Co-Maintainer von Procrastinate