8 คะแนน โดย GN⁺ 2024-08-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • PgQueuer เป็นไลบรารีคิวงานแบบมินิมอล/ประสิทธิภาพสูงสำหรับ Python ที่อาศัยความแข็งแกร่งของ PostgreSQL
  • ออกแบบมาเพื่อความเรียบง่ายและประสิทธิภาพ โดยใช้ LISTEN/NOTIFY ของ PostgreSQL เพื่อจัดการคิวงานได้อย่างง่ายดาย

คุณสมบัติ

  • ผสานรวมได้ง่าย: สามารถผสานรวมกับแอปพลิเคชัน Python ที่ใช้ PostgreSQL อยู่แล้วได้อย่างง่ายดาย
  • จัดการการทำงานพร้อมกันอย่างมีประสิทธิภาพ: ใช้ FOR UPDATE SKIP LOCKED ของ PostgreSQL เพื่อให้ประมวลผลงานได้อย่างเชื่อถือได้และรองรับการทำงานพร้อมกัน
  • การแจ้งเตือนแบบเรียลไทม์: ใช้ LISTEN และ NOTIFY เพื่อให้การอัปเดตแบบเรียลไทม์เกี่ยวกับการเปลี่ยนแปลงสถานะงาน

สรุปโดย GN⁺

  • PgQueuer ใช้ความสามารถ LISTEN/NOTIFY ของ PostgreSQL เพื่อช่วยให้จัดการคิวงานในแอปพลิเคชัน Python ได้อย่างมีประสิทธิภาพ
  • มีการผสานรวมที่ง่ายและการจัดการการทำงานพร้อมกันอย่างมีประสิทธิภาพ จึงนำไปใช้กับระบบเดิมได้สะดวก
  • ฟีเจอร์การแจ้งเตือนแบบเรียลไทม์ช่วยให้ตรวจสอบสถานะงานได้ทันที ทำให้การจัดการงานทำได้ง่าย
  • โปรเจกต์อื่นที่มีฟังก์ชันใกล้เคียงกัน ได้แก่ RQ, Celery เป็นต้น.

1 ความคิดเห็น

 
GN⁺ 2024-08-19
ความคิดเห็นจาก Hacker News
  • มีคำถามเกี่ยวกับการเปรียบเทียบกับไลบรารี Graphile Worker
  • ความเห็นเกี่ยวกับความเป็นไปได้ที่ไลบรารีคิวงานบน PostgreSQL จะใช้สคีมาร่วมกัน
    • เป็นแฟนของ Oban ในฝั่ง Elixir
    • เหมือนกับที่มีไลบรารีที่เข้ากันได้กับ Sidekiq ในหลายภาษา คิวงานบน PostgreSQL ก็น่าจะได้ประโยชน์จากแนวทางคล้ายกัน
    • อาจพัฒนาไลบรารีแกนหลักของคิวงานด้วย Rust และพิจารณา binding สำหรับแต่ละภาษา
  • สนับสนุนการใช้ Postgres กับทุกอย่าง และกำลังผลักดันแนวทางนี้อย่างเต็มที่ในโปรเจกต์
    • ต้องการคิวงานบน Postgres ที่ทำ multi-stage pipeline, fan-out และ accumulation ได้
    • ฐานข้อมูลเชิงสัมพันธ์แบบมีโครงสร้างเหมาะอย่างยิ่งสำหรับการทำโมเดลสิ่งเหล่านี้
    • ขนาด payload สูงสุด 8k ของ listen/notify เป็นข้อจำกัด
    • ต้องการ streaming table และการรองรับ type ที่หลากหลาย
  • แนะนำตอนของ PostgresFM ที่พูดถึงการทำคิวบน Postgres ได้ดี
  • PgQueuer ผสานรวมการเรียก Postgres RPC, trigger และ cronjobs (pg_cron) ได้ดี
  • River ก็เป็นอีกไลบรารีที่น่าดู
    • รองรับงานที่ตั้งเวลาไว้ เป็นต้น
    • มี UI สำหรับการดีบักด้วย
  • กำลังใช้ Broadcaster สำหรับงาน PUB/SUB
  • ตัวอย่างคิวงานที่ง่ายที่สุดบน MySQL
    • ใช้คำสั่ง update job_table set key=value where ... limit 1
    • เรียบง่ายและเป็นอะตอมมิก
    • PostgreSQL ไม่รองรับไวยากรณ์ update ... limit
  • เป็นผู้ใช้ MySQL แต่กำลังสำรวจ PostgreSQL อยู่
    • มีฟีเจอร์จำนวนมากมาให้ในตัว
    • เป็นเครื่องมือที่น่าสนใจมาก
  • ยังมีไลบรารี Procrastinate ด้วย
    • ใช้ LISTEN/NOTIFY ของ PostgreSQL (ปิดได้แบบ optional และใช้ polling แทนได้)
    • รองรับงานแบบ synchronous และ asynchronous, งานตามรอบเวลา, การ retry, การล็อกงาน, priority, การยกเลิก/หยุดงาน และการผสานรวมกับ Django (เป็นตัวเลือก)
    • เป็นผู้ร่วมดูแล Procrastinate