9 คะแนน โดย GN⁺ 2024-11-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • มอบวิธีที่ง่ายที่สุดในการย้ายและแปลงข้อมูลระหว่างฐานข้อมูล PostgreSQL
  • การสตรีมแบบเรียลไทม์: สตรีมการเปลี่ยนแปลงข้อมูลแบบเกือบเรียลไทม์ด้วยการทำ logical replication ของ PostgreSQL
  • การคัดลอกข้อมูลจำนวนมาก: ทำการซิงก์ข้อมูลเริ่มต้นได้อย่างรวดเร็วด้วยการคัดลอกข้อมูลจำนวนมากแบบประมวลผลขนาน
  • การแปลงข้อมูลที่ทรงพลัง: ใช้การแปลงตาม regular expression, ปกปิดข้อมูลสำคัญ และกรองตามค่าของคอลัมน์
  • การกำหนดเส้นทางที่ยืดหยุ่น: กำหนดเส้นทางข้อมูลระหว่างตารางได้อย่างราบรื่น รวมถึงส่งไปยังตารางชื่ออื่นหรือไปยังตารางเดิมด้วยการแมปคอลัมน์แบบกำหนดเอง
  • ตัวอย่างกฎการแปลง
    • การปกปิดอีเมล: แปลงคอลัมน์อีเมลเป็นอักขระสำหรับการปกปิดข้อมูล
    • การจัดรูปแบบหมายเลขโทรศัพท์: ใช้ regular expression เพื่อแปลงรูปแบบหมายเลขโทรศัพท์
  • การกำหนดเส้นทางตารางและการแมปคอลัมน์
    • การกำหนดเส้นทางตารางแบบยืดหยุ่น: กำหนดเส้นทางตารางผู้ใช้ไปยังตารางลูกค้า พร้อมแมป ID และชื่อผู้ใช้เป็นรหัสลูกค้าและชื่อลูกค้า
    • การกำหนดเส้นทางหลายตาราง: กำหนดเส้นทางตารางคำสั่งซื้อไปยังตารางธุรกรรม พร้อมแมป ID และยอดรวมเป็นรหัสธุรกรรมและจำนวนเงิน
  • กรณีใช้งานทั่วไป
    • การทำสำเนาข้อมูลแบบเรียลไทม์ระหว่าง PostgreSQL DB
    • การสร้าง ETL pipeline ที่มีการแปลงข้อมูล
    • การกำหนดเส้นทางข้อมูลใหม่ การปกปิดข้อมูล และการกรอง
    • การทำ database migration โดยไม่มี downtime
    • การสตรีมเหตุการณ์จาก PostgreSQL
  • วิธีการทำงาน
    • pg_flo ใช้ระบบ logical replication ของ PostgreSQL เพื่อจับและสตรีมการเปลี่ยนแปลงของข้อมูล
    • ใช้ NATS เป็น message broker เพื่อแยกการอ่านจาก WAL ออกจากกระบวนการ replicator และ worker ทำให้มีความยืดหยุ่นและขยายระบบได้
    • การแปลงและการกรองจะถูกใช้ก่อนที่ข้อมูลจะไปถึงปลายทาง

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

 
GN⁺ 2024-11-04
ความคิดเห็นจาก Hacker News
  • โปรเจกต์ pg_flo ดูน่าสนใจมาก โดยเฉพาะการทำ archive ไปยัง S3 และเวอร์ชันเครื่องมือราคาประหยัดที่น่าสนใจ

    • เครื่องมืออย่าง Debezium สามารถทำงานกับข้อมูลขนาดเล็ก (GBs) แทนข้อมูลขนาดใหญ่ (TBs) ได้ จึงเหมาะกับการทดสอบบนเครื่องโลคัล
    • การใช้ Kafka และ Debezium เป็นความพยายามระยะสั้น และกำลังประเมินความยุ่งยากอยู่
    • อีกโซลูชันที่ทีมกำลังประเมินคือ peerdb
  • กำลังทำโปรเจกต์ที่ใช้ PostgreSQL logical replication เพื่อจัดระเบียบข้อมูลจากฐานข้อมูลหลักและ archive ไปยัง S3

    • บางตารางจำเป็นต้องเปิดให้ใช้งานบนอินสแตนซ์ Postgres สำรองสำหรับงานอ่าน ซึ่งทำให้ต้องมีการ replication
    • มีการลบข้อมูลสองแบบบนฐานข้อมูลหลักที่เป็นปัญหา
      • การลบแบบแรกมีไว้เพื่อจัดระเบียบข้อมูล และไม่ต้องการให้สะท้อนไปยังฐานข้อมูลที่ถูก replicate
      • การลบแบบที่สองมีไว้เพื่อ rollback และเปลี่ยนสถานะของข้อมูล ดังนั้นควรถูก replicate
    • จึงสงสัยว่ามีวิธีแยกการลบทั้งสองแบบนี้ออกจากกัน เพื่อให้ replicate เฉพาะการลบสำหรับ rollback ได้หรือไม่
  • กำลังศึกษาว่า Postgres CDC solution ต่าง ๆ ทำงานอย่างไร และสงสัยว่า pg_flo จะช่วยได้หรือไม่

    • อยากทราบว่าสามารถอธิบาย failure mode ได้หรือไม่
    • ตัวอย่างเช่น หากโหนด NATS server (หรือ worker/replicator) ล่ม จะเกิดอะไรขึ้น
    • อยากรู้ว่าการย้ายข้อมูลจาก Postgres ไปยัง ElasticSearch/ClickHouse ยากแค่ไหน
  • หวังว่าจะเป็นทางเลือกแทน Debezium ได้

    • Debezium ต้องคัดลอกสถานะ CDC ทั้งหมดไปยัง Kafka ก่อนในช่วงแรก และต้องตั้งค่า Kafka retention time เป็นแบบไม่สิ้นสุด ซึ่งระบบบริการ Kafka จำนวนมากไม่อนุญาต
  • pglogical สามารถรันภายใน Postgres ได้ แต่ pg_flo ดูเหมือนจะเป็น external service ไม่ใช่ extension

    • ซึ่งจริง ๆ แล้วอาจเป็นข้อดีก็ได้
    • อยากรู้ว่าสามารถใช้ pg_flo ร่วมกับ Postgres as a service instances เช่น Azure Postgres, Supabase, Neon ได้หรือไม่
    • อยากรู้ว่าสามารถอ่าน WAL ได้โดยไม่ต้องติดตั้ง extension ที่ผู้ให้บริการไม่ได้อนุมัติหรือไม่
  • ตื่นเต้นมากที่จะได้ลองใช้เครื่องมือนี้

    • อยากรู้ว่าสามารถจัดการการคัดลอกระหว่างที่เครือข่ายขาดหาย/ไม่เสถียรได้หรือไม่
  • อยากรู้ว่าแตกต่างจาก Sequin อย่างไร

    • กำลังมองหาเครื่องมือที่รองรับ workflow แบบอิงกับ CDC event และยังสามารถ replay event stream แบบตามต้องการได้
  • กำลังมองหาเครื่องมือคล้าย ๆ แบบนี้อยู่พอดี จังหวะเหมาะมาก

    • อยากรู้ว่ารองรับการทำ bulk copy (เช่น ตอนกลางคืน) ผ่านการแปลงข้อมูลหลากหลายรูปแบบ โดยไม่ต้องสตรีมต่อเนื่องหรือไม่
  • อยากรู้ว่าการใช้ replication จะดีกว่าการสำรองข้อมูลไปยัง S3 หรือไม่

  • เป็นเครื่องมือที่เจ๋งมาก