อ่าน 2 นาที
การบันทึกข้อมูลการเปลี่ยนแปลง
ในฐานข้อมูล การตรวจจับการเปลี่ยนแปลงข้อมูล (Change Data Capture หรือ CDC ) คือชุดรูปแบบการออกแบบซอฟต์แวร์ที่ใช้ในการระบุและติดตามข้อมูลที่เปลี่ยนแปลงไป ("เดลต้า")...
การบันทึกข้อมูลการเปลี่ยนแปลง
ในฐานข้อมูลการตรวจจับการเปลี่ยนแปลงข้อมูล (Change Data Capture หรือCDC ) คือชุดรูปแบบการออกแบบซอฟต์แวร์ที่ใช้ในการระบุและติดตามข้อมูลที่เปลี่ยนแปลงไป ("เดลต้า") เพื่อให้สามารถดำเนินการต่างๆ โดยใช้ข้อมูลที่เปลี่ยนแปลงไปได้ ผลลัพธ์ที่ได้คือ ชุด ข้อมูล ที่ขับเคลื่อนด้วยเดลต้า
CDC คือแนวทางการบูรณาการข้อมูลที่อิงกับการระบุ การบันทึก และการส่งมอบการเปลี่ยนแปลงที่เกิดขึ้นกับแหล่งข้อมูลขององค์กร ตัวอย่างเช่น สามารถใช้สำหรับการอัปเดตข้อมูล แบบเพิ่มทีละน้อย ได้
CDC มักเกิดขึ้นใน สภาพแวดล้อม คลังข้อมูลเนื่องจาก1การบันทึกและรักษาสถานะของข้อมูลตลอดช่วงเวลาเป็นหนึ่งในหน้าที่หลักของคลังข้อมูล แต่ CDC สามารถนำไปใช้กับฐานข้อมูลหรือระบบจัดเก็บข้อมูลใดๆ ก็ได้
ระเบียบวิธีวิจัย
นักพัฒนาระบบสามารถตั้งค่ากลไก CDC ได้หลายวิธี และในเลเยอร์ระบบใดเลเยอร์หนึ่งหรือหลายเลเยอร์รวมกัน ตั้งแต่ตรรกะของแอปพลิเคชันไปจนถึงหน่วยเก็บข้อมูลทางกายภาพ
ในบริบทของ CDC ที่เรียบง่าย ระบบคอมพิวเตอร์หนึ่งระบบมีข้อมูลที่เชื่อว่าเปลี่ยนแปลงไปจากช่วงเวลาก่อนหน้า และระบบคอมพิวเตอร์อีกระบบหนึ่งจำเป็นต้องดำเนินการตามข้อมูลที่เปลี่ยนแปลงนั้น ระบบแรกเป็นแหล่งที่มา ระบบที่สองเป็นเป้าหมาย เป็นไปได้ที่แหล่งที่มาและเป้าหมายจะเป็นระบบเดียวกันในทางกายภาพ แต่สิ่งนั้นจะไม่เปลี่ยนแปลงรูปแบบการออกแบบในเชิงตรรกะ โซลูชัน CDC หลายตัวสามารถมีอยู่ได้ในระบบเดียว
การระบุเวลาในแต่ละแถว
ตารางข้อมูลที่ต้องบันทึกการเปลี่ยนแปลงอาจมีคอลัมน์ที่แสดงเวลาของ การเปลี่ยนแปลง ครั้งล่าสุดโดยทั่วไปจะใช้ชื่อเช่น LAST_UPDATE, LAST_MODIFIED เป็นต้น แถวใดๆ ในตารางที่มีเวลาในคอลัมน์นั้นใหม่กว่าเวลาที่บันทึกข้อมูลครั้งล่าสุด จะถือว่ามีการเปลี่ยนแปลงเกิดขึ้น
การประทับเวลาบนแถวมักถูกใช้สำหรับการล็อกแบบมองโลกในแง่ดี ดังนั้นคอลัมน์นี้จึงมักมีให้ใช้งาน
หมายเลขเวอร์ชันบนแถว
นักออกแบบฐานข้อมูลจะกำหนดคอลัมน์ที่มีหมายเลขเวอร์ชันให้กับตารางที่ต้องบันทึกการเปลี่ยนแปลง โดยทั่วไปจะใช้ชื่อเช่น VERSION_NUMBER เป็นต้น
เทคนิคหนึ่งคือการทำเครื่องหมายแถวที่เปลี่ยนแปลงแต่ละแถวด้วยหมายเลขเวอร์ชัน มีการรักษาหมายเลขเวอร์ชันปัจจุบันสำหรับตาราง หรืออาจจะเป็นกลุ่มของตาราง โดยจัดเก็บไว้ในโครงสร้างสนับสนุน เช่น ตารางอ้างอิง เมื่อมีการบันทึกการเปลี่ยนแปลง ข้อมูลทั้งหมดที่มีหมายเลขเวอร์ชันล่าสุดจะถือว่ามีการเปลี่ยนแปลง เมื่อการบันทึกการเปลี่ยนแปลงเสร็จสมบูรณ์ ตารางอ้างอิงจะได้รับการอัปเดตด้วยหมายเลขเวอร์ชันใหม่
(อย่าสับสนเทคนิคนี้กับการกำหนดเวอร์ชันระดับแถวที่ใช้สำหรับการล็อกแบบมองโลกในแง่ดี สำหรับการล็อกแบบมองโลกในแง่ดี แต่ละแถวจะมีหมายเลขเวอร์ชันอิสระ ซึ่งโดยทั่วไปจะเป็นตัวนับแบบเรียงลำดับ วิธีนี้ช่วยให้กระบวนการสามารถอัปเดตแถวได้อย่างเป็นอะตอม และเพิ่มตัวนับได้ก็ต่อเมื่อกระบวนการอื่นยังไม่ได้เพิ่มตัวนับ แต่ CDC ไม่สามารถใช้เวอร์ชันระดับแถวเพื่อค้นหาการเปลี่ยนแปลงทั้งหมดได้ เว้นแต่จะทราบเวอร์ชัน "เริ่มต้น" ดั้งเดิมของทุกแถว ซึ่งไม่สามารถทำได้ในทางปฏิบัติเพื่อการบำรุงรักษา)
ตัวบ่งชี้สถานะบนแถว
เทคนิคนี้สามารถใช้เสริมหรือเติมเต็มการประทับเวลาและการกำหนดเวอร์ชันได้ ตัวอย่างเช่น สามารถใช้กำหนดค่าทางเลือกได้หากมีการตั้งค่าคอลัมน์สถานะในแถวของตารางเพื่อระบุว่าแถวนั้นมีการเปลี่ยนแปลง (เช่น คอลัมน์บูลีนที่เมื่อตั้งค่าเป็นจริง จะระบุว่าแถวนั้นมีการเปลี่ยนแปลง) หรืออาจใช้เป็นส่วนเสริมของวิธีการก่อนหน้านี้ โดยระบุว่าถึงแม้แถวนั้นจะมีหมายเลขเวอร์ชันใหม่หรือวันที่ที่ใหม่กว่า แต่ก็ไม่ควรทำการอัปเดตในฐานข้อมูลเป้าหมาย (ตัวอย่างเช่น ข้อมูลอาจต้องการการตรวจสอบโดยมนุษย์)
เวลา/เวอร์ชัน/สถานะในแต่ละแถว
แนวทางนี้เป็นการผสมผสานวิธีการทั้งสามที่กล่าวถึงไปก่อนหน้านี้ ดังที่ได้กล่าวไว้แล้ว การใช้โซลูชัน CDC หลายตัวในระบบเดียวไม่ใช่เรื่องแปลก แต่การผสมผสานระหว่างเวลา เวอร์ชัน และสถานะ จะเป็นกลไกที่มีประสิทธิภาพอย่างยิ่ง และโปรแกรมเมอร์ควรใช้ทั้งสามอย่างนี้ร่วมกันทุกครั้งที่เป็นไปได้ องค์ประกอบทั้งสามนี้ไม่ได้ซ้ำซ้อนหรือฟุ่มเฟือย การใช้ร่วมกันทำให้สามารถใช้ตรรกะได้ เช่น "บันทึกข้อมูลทั้งหมดสำหรับเวอร์ชัน 2.1 ที่เปลี่ยนแปลงระหว่างวันที่ 1 มิถุนายน 2548 เวลา 00:00 น. และวันที่ 1 กรกฎาคม 2548 เวลา 00:00 น. โดยที่รหัสสถานะบ่งชี้ว่าพร้อมสำหรับการใช้งานจริง"
ทริกเกอร์บนตาราง
อาจรวมถึง รูปแบบ การเผยแพร่/สมัครรับข้อมูล (publish/subscribe)เพื่อสื่อสารข้อมูลที่เปลี่ยนแปลงไปยังเป้าหมายหลายแห่ง ในแนวทางนี้ ทริกเกอร์จะบันทึกเหตุการณ์ที่เกิดขึ้นกับตารางธุรกรรมลงในตารางคิวอื่น ซึ่งสามารถ "เล่นซ้ำ" ได้ในภายหลัง ตัวอย่างเช่น ลองนึกภาพตารางบัญชี เมื่อมีการทำธุรกรรมกับตารางนี้ ทริกเกอร์จะทำงานและบันทึกประวัติของเหตุการณ์หรือแม้แต่ส่วนที่เปลี่ยนแปลงลงในตารางคิวแยกต่างหาก ตารางคิวอาจมีโครงสร้างที่มีฟิลด์ต่อไปนี้: Id, TableName, RowId, Timestamp, Operation ข้อมูลที่แทรกสำหรับตัวอย่างบัญชีของเราอาจเป็น: 1, Accounts, 76, 2008-11-02 00:15, Update การออกแบบที่ซับซ้อนกว่าอาจบันทึกข้อมูลที่เปลี่ยนแปลงจริง ตารางคิวนี้สามารถ "เล่นซ้ำ" เพื่อจำลองข้อมูลจากระบบต้นทางไปยังเป้าหมายได้
การบันทึกข้อมูลมีความท้าทายตรงที่โครงสร้าง เนื้อหา และการใช้งานของบันทึกธุรกรรมนั้นมีความเฉพาะเจาะจงกับระบบจัดการฐานข้อมูลแต่ละระบบ ซึ่งแตกต่างจากการเข้าถึงข้อมูลตรงที่ไม่มีมาตรฐานสำหรับบันทึกธุรกรรม ระบบจัดการฐานข้อมูลส่วนใหญ่ไม่ได้จัดทำเอกสารเกี่ยวกับรูปแบบภายในของบันทึกธุรกรรม ถึงแม้ว่าบางระบบจะมีอินเทอร์เฟซสำหรับการเขียนโปรแกรมเพื่อเข้าถึงบันทึกธุรกรรม (เช่น Oracle, DB2, SQL/MP, SQL/MX และ SQL Server 2008) ก็ตาม
ความท้าทายอื่นๆ ในการใช้บันทึกธุรกรรมเพื่อบันทึกการเปลี่ยนแปลงข้อมูล ได้แก่:
- ประสานงานการอ่านบันทึกธุรกรรมและการจัดเก็บไฟล์บันทึก (โดยทั่วไปซอฟต์แวร์การจัดการฐานข้อมูลจะจัดเก็บไฟล์บันทึกแบบออฟไลน์เป็นประจำ)
- การแปลงระหว่างรูปแบบการจัดเก็บข้อมูลทางกายภาพที่บันทึกไว้ในบันทึกธุรกรรมและรูปแบบเชิงตรรกะที่ผู้ใช้ฐานข้อมูลคาดหวังโดยทั่วไป (เช่น บันทึกธุรกรรมบางรายการจะบันทึกเฉพาะความแตกต่างของบัฟเฟอร์ขั้นต่ำซึ่งไม่เป็นประโยชน์โดยตรงสำหรับผู้รับการเปลี่ยนแปลง)
- การจัดการกับการเปลี่ยนแปลงรูปแบบของบันทึกธุรกรรมระหว่างเวอร์ชันต่างๆ ของระบบจัดการฐานข้อมูล
- ลบการเปลี่ยนแปลงที่ยังไม่ได้รับการยืนยันซึ่งฐานข้อมูลได้บันทึกไว้ในบันทึกธุรกรรมและต่อมาได้ทำการยกเลิก
- การจัดการกับการเปลี่ยนแปลงข้อมูลเมตาของตารางในฐานข้อมูล
โซลูชัน CDC ที่ใช้ไฟล์บันทึกธุรกรรมมีข้อดีที่โดดเด่นหลายประการ ได้แก่:
- ผลกระทบต่อฐานข้อมูลมีน้อยมาก (ยิ่งน้อยลงไปอีกหากใช้การส่งบันทึกเพื่อประมวลผลบันทึกบนโฮสต์เฉพาะ)
- ไม่จำเป็นต้องแก้ไขโปรแกรมใดๆ ในแอปพลิเคชันที่ใช้ฐานข้อมูล
- เวลาในการรับรู้การเปลี่ยนแปลงต่ำ
- ความสมบูรณ์ของธุรกรรม: การสแกนบันทึกสามารถสร้างกระแสการเปลี่ยนแปลงที่แสดงธุรกรรมดั้งเดิมตามลำดับที่ได้รับการยืนยัน กระแสการเปลี่ยนแปลงดังกล่าวจะรวมถึงการเปลี่ยนแปลงที่เกิดขึ้นกับทุกตารางที่เกี่ยวข้องในธุรกรรมที่บันทึกไว้
- ไม่จำเป็นต้องเปลี่ยนแปลงโครงสร้างฐานข้อมูล
ปัจจัยรบกวน
เช่นเดียวกับที่มักเกิดขึ้นในโดเมนที่ซับซ้อน วิธีแก้ปัญหาขั้นสุดท้ายของ CDC อาจต้องคำนึงถึงความสมดุลระหว่างข้อกังวลที่ขัดแย้งกันหลายประการ
ระบบแหล่งที่มาที่ไม่เหมาะสม
การบันทึกการเปลี่ยนแปลงข้อมูลจะมีความซับซ้อนมากขึ้นและมีคุณค่าน้อยลง หากระบบต้นทางบันทึกการเปลี่ยนแปลงเมตาเดต้าในขณะที่ข้อมูลเองไม่ได้ถูกแก้ไข ตัวอย่างเช่น โมเดลข้อมูลบางแบบจะติดตามผู้ใช้ที่ดูข้อมูลครั้งล่าสุด แต่ไม่ได้เปลี่ยนแปลงข้อมูลในโครงสร้างเดียวกับข้อมูลเดิม ซึ่งส่งผลให้เกิดความคลาดเคลื่อนในการบันทึกการเปลี่ยนแปลงข้อมูล
ติดตามการจับกุม
การติดตามการเปลี่ยนแปลงที่แท้จริงนั้นขึ้นอยู่กับแหล่งข้อมูล หากข้อมูลถูกจัดเก็บไว้ในฐานข้อมูล ที่ทันสมัย การบันทึกการเปลี่ยนแปลงข้อมูล (Change Data Capture) ก็เป็นเรื่องง่าย เพียงแค่กำหนดสิทธิ์การเข้าถึงเท่านั้น โดยทั่วไปมีเทคนิคสองวิธีที่ใช้กัน:
- การติดตามการเปลี่ยนแปลงโดยใช้ทริกเกอร์ฐานข้อมูล
- อ่านบันทึกธุรกรรมในขณะที่ถูกเขียน หรือหลังจากนั้นไม่นาน
หากข้อมูลไม่ได้อยู่ในฐานข้อมูลที่ทันสมัย CDC จะกลายเป็นความท้าทายในการเขียนโปรแกรม
ผลักหรือดึง
- Push : กระบวนการต้นทางจะสร้างภาพรวมของการเปลี่ยนแปลงภายในกระบวนการของตนเองและส่งข้อมูลไปยังกระบวนการปลายทาง กระบวนการปลายทางจะใช้ภาพรวมนั้น สร้างชุดข้อมูลย่อยของตนเอง และส่งข้อมูลไปยังกระบวนการถัดไป
- แบบดึง (Pull) : เป้าหมายที่อยู่ถัดจากแหล่งที่มาโดยตรง จะเตรียมคำขอข้อมูลจากแหล่งที่มา เป้าหมายปลายทางจะส่งภาพรวม (snapshot) ไปยังเป้าหมายถัดไป เช่นเดียวกับในรูปแบบผลักดัน (Push)
ทางเลือกอื่นๆ

บางครั้งมิติที่เปลี่ยนแปลงช้าๆ จะถูกใช้เป็นวิธีการทางเลือก[ 1 ] CDC และ SCD มีความคล้ายคลึงกันตรงที่ทั้งสองวิธีสามารถตรวจจับการเปลี่ยนแปลงในชุดข้อมูลได้ รูปแบบที่พบบ่อยที่สุดของ SCD คือ ประเภท 1 (เขียนทับ) ประเภท 2 (รักษาประวัติ) หรือ 3 (เฉพาะค่าก่อนหน้าและค่าปัจจุบัน) SCD 2 จะมีประโยชน์หากต้องการประวัติในระบบเป้าหมาย CDC จะเขียนทับในระบบเป้าหมาย (คล้ายกับ SCD1) และเหมาะอย่างยิ่งเมื่อต้องการส่งเฉพาะข้อมูลที่เปลี่ยนแปลงไปยังเป้าหมายเท่านั้น กล่าวคือชุด ข้อมูลที่ขับเคลื่อนด้วยเดลต้า
ดูเพิ่มเติม
ดูเพิ่มเติม
- Oracle Data Integrator
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การบันทึกข้อมูลการเปลี่ยนแปลง
ในฐานข้อมูล การตรวจจับการเปลี่ยนแปลงข้อมูล (Change Data Capture หรือ CDC ) คือชุดรูปแบบการออกแบบซอฟต์แวร์ที่ใช้ในการระบุและติดตามข้อมูลที่เปลี่ยนแปลงไป ("เดลต้า")...
ระเบียบวิธีวิจัย
นักพัฒนาระบบสามารถตั้งค่ากลไก CDC ได้หลายวิธี และในเลเยอร์ระบบใดเลเยอร์หนึ่งหรือหลายเลเยอร์รวมกัน ตั้งแต่ตรรกะของแอปพลิเคชันไปจนถึงหน่วยเก็บข้อมูลทางกายภาพ
การระบุเวลาในแต่ละแถว
ตารางข้อมูลที่ต้องบันทึกการเปลี่ยนแปลงอาจมีคอลัมน์ที่แสดงเวลาของ การเปลี่ยนแปลง ครั้งล่าสุด โดยทั่วไปจะใช้ชื่อเช่น LAST_UPDATE, LAST_MODIFIED เป็นต้น แถวใดๆ ในตารางที่มีเวลาในคอลัมน์นั้นใหม่กว่าเวลาที่บันทึกข้อมูลครั้งล่าสุด จะถือว่ามีการเปลี่ยนแปลงเกิดขึ้น
หมายเลขเวอร์ชันบนแถว
นักออกแบบฐานข้อมูลจะกำหนดคอลัมน์ที่มีหมายเลขเวอร์ชันให้กับตารางที่ต้องบันทึกการเปลี่ยนแปลง โดยทั่วไปจะใช้ชื่อเช่น VERSION_NUMBER เป็นต้น