Change Data Capture
سه شنبه, ۱۶ مرداد ۱۳۹۷، ۰۲:۴۹ ب.ظ
change-data-capture-چیست؟
معرفی انواع CDC در MySQL
عملیات CDC را میتوان در هر لایه ای از پروژه انجام داد.
معرفی انواع CDC در MySQL
عملیات CDC را میتوان در هر لایه ای از پروژه انجام داد.
روشهای ضبط تغییرات داده (CDC) در بانکهای اطلاعاتی (databases) :
Timestamps on rows: ستونی در جدول اضافه شود تا تاریخ آخرین تغییر را نشان دهد.
در MySQL اینکار از طریق نوع TIMESTAMP قابل پیاده سازی است . مثال عملیاتی
-
Version Numbers on rows : ستونی در جدول اضافه شود که شماره نسخه را ذخیره میکند . این ستون به ازاء هر تغییر افزوده می شود.
در SQL Server اینکار از طریق نوع rowversion قابل پیاده سازی است . مستندات
میتوان از این ستون برای قفل های خوشبیتاته(Optimistic Locking) استفاده شود مانند Hibernate. مطالعه بیشتر
- Status indicators on rows : ستونی از نوع Boolean که در صورت تغییر ردیف مقدار True میگیرد. این ستون می تواند مکمل بخش های قبلی باشد.
Time/Version/Status on rows : سه ستون قبلی هر سه در جدول تعریف می شوند تا بتوان تغییرات داده های جدول را بصورت جامع بررسی کرد.
-
Triggers:
Database triggers : تعریف Trigger برای جدول روشی برای ثبت تغییرات داده هاست. هر بانک اطلاعاتی ازTriggerپشتیبانی میکند.
-
Application-level triggers:
-
Auditing with JPA :
JPA به صراحت شامل یک auditing API نیست، اما این قابلیت را می توان با استفاده از حوادث چرخه حیات entity بدست آورد. جزییات مثال مثال2 مثال3 Hibernate Envers : چارچوبهایی (frameworks) مانند Hibernate Envers وجود دارد که بانک اطلاعاتی را در سطح برنامه شبیه سازی میکنند. مثال
-
Spring Data JPA: مثال
audit4j :
برای بررسی وقایع مربوط به سرورها، برنامه ها و پایگاه های داده مورد استفاده قرار گیرد- JaVers : یک کتابخانه سبک جاوا است که برای ضبط تغییر داده هاست.
- اشکال این روش این است که تغییراتی که خارج از برنامه انجام شود ثبت نمیشوند.
- مقایسه Javers و Envers
- مزینت استفاده ازJavers بجای Envers
-
Event Programming : هر چند این روش نیاز به برنامه نویسی دارد ولی روشی بسیار دقیق و مطلوب تر و انعطاف بیشتری دارد.
-
Log scanners on databases : استفاده از transaction log بانکهای اطلاعاتی.
- با توجه به دسترسی نداشتن به مستندات log، پیاده سازی از این طریق چالش بزرگی است.
-
استفاده از این روش نیازی به ایجاد ساختار جدیدی نبوده و صرفا کافی است transaction log خوانده شود.
هر بانک اطلاعاتی روش خودش را برای خواندن از transaction log دارد بعنوان نمونه :
- اوراکل GoldenGate را ارائه می دهد.
- SQL Server پشتیبانی از CDC را ارائه می دهد.
- MySQL، که به طور گسترده ای برای برنامه های کاربردی وب مورد استفاده قرار گرفته است، اجازه می دهد شما را به ضبط رویدادهای CDC از طریق راه حل های 3rd party های مختلف، مانند DataBus LinkedIn-
برای بانکهای اطلاعاتی مدرن Tracking the capture از دو روش معمول زیر انجام می شود:
- Database Triggers
- Reading the transaction log
-
برای بانکهای اطلاعاتی مدرن Tracking the capture از دو روش معمول زیر انجام می شود:
-
Debezium :
Debezium یک پروژه منبع باز جدید است که توسط RedHat اداره می شود که اتصال دهنده های اوراکل، MySQL، PostgreSQL و حتی MongoDB است.- با این پروژه نه تنها شما می توانید رویدادهای CDC را استخراج کنید، بلکه می توانید آنها را به Apache Kafka بفرستید، که به عنوان یک ستون فقرات برای تمام پیام های مورد نیاز برای مبادله بین ماژول های مختلف یک سیستم بزرگ سازمان عمل می کند.
-
برای استفاده ازDebezium بایستی binary logging در MySql فعال شود که ذاتا باعث کاهش کارایی سرور می شود.
Running a server with binary logging enabled makes performance slightly slower. However, the benefits of the binary log in enabling you to set up replication and for restore operations generally outweigh this minor performance decrement. -
مفالات و فیلم های آموزشی درباره Debezium
جمع بندی نهایی Stream MySQL data to ElasticSearch with Kafka
۹۷/۰۵/۱۶