PgQue – คิว Postgres ที่ไม่มี bloat
(github.com/NikolayS)- ติดตั้งด้วยไฟล์ SQL เพียงไฟล์เดียว และทำงาน (tick) ด้วย pg_cron เท่านั้น
- เป็น คิวข้อความที่ฝังอยู่ใน Postgres ซึ่งนำ สถาปัตยกรรม PgQ จากยุค Skype มาสร้างใหม่ด้วย PL/pgSQL ล้วน ๆ จึงใช้งานได้บน managed Postgres ทันทีโดยไม่ต้องมี C extension หรือ external daemon
- แก้ปัญหาเรื้อรังของคิวแบบ SKIP LOCKED อย่าง การสะสมของ dead tuple และภาระของ VACUUM ได้ตั้งแต่ต้นทางด้วยการทำ batch แบบอิง snapshot + การหมุนตารางด้วย TRUNCATE ทำให้รันต่อเนื่องหลายเดือนก็ยังไม่เกิด performance degradation
- โครงสร้างแบบ shared event log + เคอร์เซอร์อิสระต่อคอนซูเมอร์ คล้าย Kafka topic จึงรองรับ fan-out แบบเนทีฟ — ผู้สมัครรับหลายรายสามารถรับทุกอีเวนต์ได้อย่างอิสระโดยไม่ต้องทำสำเนาข้อมูล
- latency ในการส่งต่อแบบ end-to-end อยู่ที่ประมาณ ~1-2 วินาที ในค่าตั้งต้น (ช่วง tick + ช่วง poll) ส่วนการเรียก send/receive/ack แต่ละครั้งอยู่ในระดับ ไมโครวินาที
- จากเบนช์มาร์กเบื้องต้น การ insert ด้วย PL/pgSQL ทำได้ประมาณ ~86k ev/s, การอ่านของคอนซูเมอร์อยู่ที่ ~2.4M ev/s, และในการทดสอบต่อเนื่อง 30 นาทีมี dead tuple เพิ่มขึ้นเป็นศูนย์
- ใช้ SQL API เป็นหลัก เช่น
pgque.send(),pgque.receive(),pgque.ack()จึงทำงานได้กับ Postgres driver ทุกตัว ไม่ว่าจะเป็น Python, Go, TypeScript ฯลฯ - เข้ากันได้กับผู้ให้บริการ managed Postgres รายหลักทั้งหมด เช่น RDS, Aurora, Cloud SQL, AlloyDB, Supabase, Neon โดยไม่ต้อง build เพิ่มหรือขอการอนุมัติจากผู้ให้บริการ
- มี การแยกสิทธิ์ ในตัวตาม 3 บทบาท (pgque_reader, pgque_writer, pgque_admin) จึงไม่ต้องให้ superuser กับผู้ใช้ของแอปพลิเคชัน
- แม้ตัว PgQ จะผ่านการใช้งานจริงใน production ที่ระดับผู้ใช้หลายร้อยล้านคนของ Skype มานานกว่า 10 ปี แต่ PgQue ในฐานะโปรดักต์ยังอยู่ในช่วงเริ่มต้น (v0.1)
- ไลเซนส์ Apache-2.0
1 ความคิดเห็น
เป็นฐานข้อมูลแบบ all-in-one ของจริง