Change Data Capture

โดย Raghotham Murthy

ในการที่เราอยากจะเอาข้อมูลที่อยู่ใน production database มาวิเคราะห์ต่อใน data warehouse หรือ data lake และเราก็ไม่อยากจะไปเพิ่มโหลดอะไรให้กับตัว database นั้น ๆ ทีนี้เราจะมีวิธีการอย่างไรที่น่าเชื่อถือที่เราจะสามารถ replicate ข้อมูลจาก production database มาไว้ที่ data warehouse ได้

ปัญหานี้เป็นปัญหาที่แก้ยากปัญหาหนึ่งในระดับ scale ที่ใหญ่ ๆ คือเราไม่สามารถที่จะอยู่ดี ๆ ก็ copy ข้อมูลทั้งหมดบน production database ไปที่ data warehouse ได้ ซึ่งจริง ๆ เราอาจจะต้องการแค่เก็บเฉพาะการเปลี่ยนแปลงของข้อมูลมาเท่านั้น

ใน modern production database ส่วนใหญ่จะมี write-ahead log (WAL) หรือ change log ในการประมวลผลข้อมูล transaction ปกติอยู่แล้ว ซึ่ง log พวกนี้จะเก็บการเปลี่ยนแปลงในแต่ละข้อมูลในตารางใน database ที่เราจะสามารถนำเอามาทำ replicas ของ production database ได้ ซึ่งเทคนิคนี้เรียกว่า change data capture (CDC) นั่นเอง โดยเทคนิคที่ว่านี้จะให้ผลลัพธ์ที่ดีกว่า batch exports

แต่ว่าเราจะต้องมอง CDC เป็นแบบ end-to-end data pipeline นะ เพื่อที่จะ replicate ข้อมูลได้อย่างสมบูรณ์แบบ และการใช้เทคนิค CDC เราต้องพิจารณาเรื่องพวกนี้ด้วย

Scale

เราจะทำอย่างไรในแง่การจัดการข้อมูลที่มี volume เยอะ ๆ เช่น WAL นี่อาจจะทำให้ out of disk space ได้ด้วย ถ้าเราไม่ดึงข้อมูลไปสักที

Replication log

เราจะต้องดูด้วยว่าช่วงเวลาที่เรา replicate ข้อมูลไป ใช้เวลาเท่าไหร่กว่าที่เราจะมีข้อมูลให้ใช้งานได้จริงบน data warehouse

Schema changes

ข้อมูลใน database มีการเปลี่ยนแปลง schema ซึ่งเราก็ต้องดูด้วยว่าเราจะนำการเปลี่ยแปลงเหล่านั้นไปยัง data warehouse ของเราได้อย่างไร

Masking

เรื่องนี้ต้องดูพวก sensitive data ด้วย ว่าข้อมูลไหนเราควรทำ masking บ้าง

Historical syncs

ก่อนที่เราจะทำ CDC เราจะต้องทำ initial historical sync อย่างน้อยสัก 1 รอบก่อนด้วย หรือเราอาจจะต้องเตรียมพวก partial historical sync ด้วยเช่นเดียวกัน ในกรณีที่เกิดปัญหาในส่วน WAL

สุดท้าย… เค้าบอกว่าอย่าพยายามสร้าง CDC connector เอง ให้ใช้เครื่องมือที่มีอยู่แล้วก่อน

1 Like

ตรง CDC นี่ในหนังสือ Data Mesh เค้าก็ไม่ค่อยแนะนำเท่าไหร่นะ ตามที่ว่ามาด้านล่างนี้เลย :point_down:

1 Like

implement CDC ขึ้นมาเหมือนกัน มีเรื่องให้ aware เยอะมาก

1 Like

CDC ก็มีข้อดีนะ แต่มันออกแนวอุดหน้างานนิดๆ แล้วมัน test/debug ยาก เพราะ dependencies เยอะ
ส่วนใหญ่ทำ batch จะคุมง่ายกว่า test ง่ายกว่าด้วย

แต่บางงานที่มันต้อง CDC จริงๆ ก็มี แต่น้อยกว่าที่คนส่วนใหญ่คิด

1 Like