- บทความนี้กล่าวถึงวิธีการต่าง ๆ ในการจับการเปลี่ยนแปลงในฐานข้อมูล Postgres
- Sequin เป็นบริษัทที่ซิงก์ข้อมูลจาก API ของบุคคลที่สาม เช่น Salesforce และ HubSpot เพื่อให้นักพัฒนาสามารถสร้างข้อมูลจาก API โดยใช้ฐานข้อมูล Postgres ของตน
- Postgres มีตัวเลือกหลายแบบสำหรับการจับข้อมูลระหว่างการเคลื่อนย้าย เช่น การทริกเกอร์เวิร์กโฟลว์ตามการเปลี่ยนแปลงของตาราง หรือการสตรีมข้อมูลแบบเรียลไทม์ไปยังแหล่งเก็บข้อมูล ระบบ หรือบริการอื่น
- แนวทางที่ง่ายที่สุดคือการใช้ Listen/Notify ซึ่งเป็นความสามารถด้านการสื่อสารระหว่างโปรเซสของ Postgres นี่คือการทำงานตามแพตเทิร์น publish-subscribe แต่มีข้อจำกัด เช่น semantics แบบ "อย่างมากหนึ่งครั้ง" และข้อจำกัดขนาดเพย์โหลดที่ 8000 ไบต์
- อีกวิธีหนึ่งคือการ polling ตารางโดยตรง ซึ่งกำหนดให้แต่ละตารางต้องมีคอลัมน์
updated_at หรือสิ่งที่คล้ายกันซึ่งจะอัปเดตทุกครั้งที่มีการอัปเดตแถว อย่างไรก็ตาม วิธีนี้ไม่สามารถตรวจจับการลบแถวได้ และไม่ได้ให้ความแตกต่างของข้อมูล
- Postgres รองรับการสตรีมรีพลิเคชันไปยังฐานข้อมูล Postgres อื่น ซึ่งสามารถใช้เพื่อจับการเปลี่ยนแปลงของแอปพลิเคชันได้ อย่างไรก็ตาม วิธีนี้ซับซ้อนและอาจต้องปรับแต่ง
postgresql.conf
- การเปลี่ยนแปลงยังสามารถจับได้จากตาราง audit ที่บันทึกการเปลี่ยนแปลง วิธีนี้คล้ายกับการใช้ replication slot แต่เป็นแบบทำด้วยมือมากกว่า
- ยังมี foreign data wrapper (FDW) ซึ่งเป็นความสามารถของ Postgres ที่ทำให้อ่านและเขียนไปยังแหล่งข้อมูลภายนอกได้ อย่างไรก็ตาม วิธีนี้แนะนำเฉพาะในบางสถานการณ์ที่เฉพาะเจาะจงมากเท่านั้น
- โดยสรุป วิธีที่ดีที่สุดในการจับการเปลี่ยนแปลงใน Postgres ขึ้นอยู่กับกรณีการใช้งาน Listen/Notify เหมาะกับการจับเหตุการณ์ที่ไม่สำคัญมาก การ polling การเปลี่ยนแปลงเป็นวิธีแก้ที่ตรงไปตรงมาสำหรับกรณีใช้งานง่าย ๆ และการรีพลิเคชันคือทางเลือกที่ดีที่สุดสำหรับโซลูชันที่แข็งแรง หากการรีพลิเคชันยากเกินไป ตาราง audit อาจเป็นทางออกกึ่งกลางที่ดีได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
pgaudit