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 จึงไม่มีประสิทธิภาพตกแม้รันต่อเนื่องหลายเดือน
- โครงสร้างแบบ shared event log + เคอร์เซอร์แยกอิสระตามแต่ละคอนซูเมอร์ คล้าย Kafka topic รองรับ fan-out แบบเนทีฟ — ผู้ติดตามหลายรายรับทุกอีเวนต์ได้อย่างอิสระโดยไม่ต้องทำสำเนาข้อมูล
- เลเทนซีการส่งต่อแบบ 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 เองจะผ่านการพิสูจน์ในโปรดักชันมานานกว่า 10 ปี ที่ระดับผู้ใช้หลายร้อยล้านคนใน Skype แต่ PgQue ในฐานะโปรดักต์ยังอยู่ช่วงเริ่มต้น (v0.1)
- ไลเซนส์ Apache-2.0
ยังไม่มีความคิดเห็น