چگونه تغییر ضبط داده (CDC) با پایگاه داده جریانی کار می کند

به طور موثر تغییرات پایگاه داده را با یک پایگاه داده جریانی ضبط کنید
ضبط داده تغییر جریانی (CDC) یک رویکرد یکپارچه سازی داده است که در سال های اخیر به طور فزاینده ای محبوب شده است. پخش جریانی CDC تکنیکی است که سازمانها را قادر میسازد تا تغییرات دادههای بلادرنگ را در منابع داده مانند پایگاههای داده SQL/NoSQL ضبط و انتقال دهند و آنها را به یک سیستم هدف مانند انبار داده یا پلت فرم تجزیه و تحلیل ارسال کنند، جایی که میتوان از آنها برای تولید بینش استفاده کرد. و تصمیمات تجاری را هدایت کنید. CDC جریانی می تواند به ویژه برای سازمان هایی مفید باشد که نیاز به واکنش سریع به شرایط متغیر بازار یا نیازهای مشتری دارند.
در این پست به بررسی خواهیم پرداخت CDC چگونه کار می کند با پایگاه های جریان و مزایای این ادغام فراهم می کند. شما همچنین یاد خواهید گرفت که چگونه داده های گرفته شده از آن را تجزیه و تحلیل کنید MySQL با RisingWave.
RisingWave یک پایگاه داده جریان منبع باز است که دارای کانکتورهای منبع CDC کاملاً مدیریت شده برای MySQL و PostgreSQL است و به شما امکان می دهد با استفاده از SQL استریم های بلادرنگ را پرس و جو کنید. شما می توانید نمای مادی شده ای داشته باشید که همیشه به روز باشد.
اهداف یادگیری
در پایان این مقاله یاد خواهید گرفت:
- Change Data Capture (CDC) چیست؟
- موارد استفاده CDC
- چرا از CDC با پایگاه داده جریانی استفاده کنیم؟
- نحوه دریافت داده های CDC از MySQL با استفاده از اتصال RisingWave.
Change Data Capture چیست؟
تغییر ضبط داده ها تکنیکی است که برای ضبط و انتشار تغییرات ایجاد شده در پایگاه داده مانند MySQL، Microsoft SQL، Oracle، PostgreSQL، MongoDB یا Cassandra استفاده می شود. CDC با نظارت مستمر پایگاه داده برای هرگونه تغییر در داده ها کار می کند. برای پردازش داده ها از پایگاه داده می توان از انواع مختلفی از الگوهای تغییر داده های ضبط استفاده کرد. این شامل CDC مبتنی بر گزارش، CDC مبتنی بر ماشه، CDC بر اساس مهر زمانی، و CDC مبتنی بر تفاوت.
وقتی عملیاتی مانند INSERT
، UPDATE
، یا DELETE,
در مقابل یک پایگاه داده، یک تغییر شناسایی میشود و CDC تغییر را ثبت میکند و آن را در یک گزارش تراکنش ثبت میکند. سپس تغییرات ثبت شده به قالبی تبدیل می شود که می تواند در زمان واقعی توسط سیستم های پایین دست مصرف شود. سیستمهای پاییندستی میتوانند فهرست جستجو، حافظه پنهان، برنامههای تحلیل جریان، صفهای پیام یا انبار داده باشند.
به عنوان مثال، می توانید تغییرات را در یک پایگاه داده ثبت کنید و به طور مداوم همان تغییرات را در فهرست جستجو اعمال کنید. اگر گزارش تغییرات به همان ترتیب اعمال شود، می توانید انتظار داشته باشید که داده های موجود در فهرست جستجو با داده های پایگاه داده مطابقت داشته باشند. نمایه جستجو و هر سیستم داده مشتق شده دیگر فقط مصرف کنندگان جریان تغییر هستند، همانطور که در نمودار زیر نشان داده شده است:
موارد استفاده از Data Capture را تغییر دهید
چندین مورد استفاده برای پخش CDC وجود دارد که در آن می درخشد. همانطور که فهمیدیم CDC می تواند تغییرات جدول پایگاه داده را به محض انجام هر یک از عملیات زیر تشخیص دهد INSERT
، UPDATE
، یا DELETE
ساخته شده. درها را به روی ما باز می کند تجزیه و تحلیل بلادرنگ را پردازش کنید روی داده ها
CDC معمولاً برای همگام سازی داده ها بین منابع داده های مختلف برای مثال می توان از آن استفاده کرد همگام سازی داده های درون محل با ابر یا اگر یک سازمان چندین پایگاه داده دارد که باید همگام نگه داشته شوند، CDC می تواند به طور مداوم تغییرات را ضبط و منتشر می کند بین آنها. می توان از آن استفاده کرد تکرار پایگاه داده در محیط های مختلف، از جمله از تولید تا محیط صحنه سازی. این تضمین می کند که داده های موجود در محیط صحنه سازی همیشه به روز و سازگار با محیط تولید هستند.
امروزه بسیاری از سازمان ها هستند اتخاذ معماری های رویداد محور با پیاده سازی میکروسرویس های کوچک یا یک تابع به عنوان سرویس (FaaS) که به تغییرات خاص در سیستم پاسخ می دهد. در چنین مواردی، پخش CDC میتواند به میکروسرویسها کمک کند تا با یکدیگر ارتباط برقرار کنند امکان اشتراک گذاری بلادرنگ داده ها.
تغییر ضبط داده با پایگاه داده جریانی
آ پایگاه داده جریان نوعی پایگاه داده است که برای مدیریت جریان های داده پیوسته در زمان واقعی طراحی شده است و امکان پرس و جو از این داده ها را فراهم می کند. شما می توانید در مورد اینکه چگونه پایگاه داده Streaming با پایگاه داده سنتی متفاوت است و نحوه انتخاب پایگاه داده استریم مناسب در سایر پست های وبلاگ من بیشتر بخوانید. CDC به ویژه هنگام کار با پایگاه داده های جریان، مفید است دادههای CDC را از پایگاههای داده مستقیم دریافت کنید (نمونه ای را در بخش بعدی ببینید) بدون راه اندازی سرویس های اضافی مانند کافکا.
اگر در حال حاضر از Debezium برای استخراج گزارشهای CDC در کافکا استفاده میکنید، فقط میتوانید RisingWave را راهاندازی کنید تا تغییرات مربوط به آن موضوع کافکا را مصرف کند. در این مورد، کافکا مانند یک مرکز دادههای CDC عمل میکند و در کنار RisingWave، سایر سیستمهای پاییندستی مانند فهرست جستجو یا انبارهای داده نیز میتوانند تغییرات را مصرف کنند.
همچنین پایگاه داده استریم سیستم های پایین دستی را قادر می سازد تا با پایگاه داده منبع همگام بمانید و به آخرین تغییرات دسترسی داشته باشید با استفاده از پرس و جوهای ساده SQL به داده ها ساخته شده است. با کمک یک پایگاه داده استریم، میتوانید دادههای CDC را از طریق یک نمای واقعی که در آن نتایج یک پرسوجو (دادههای جستجو) در حافظه پنهان محلی پایگاهداده جریان ذخیره میشود، برای بهبود عملکرد، غیرعادیسازی کنید. همچنین، می توانید آن داده ها را از پلتفرم های BI و تجزیه و تحلیل داده ها پرس و جو کنید.
پایگاه داده های جریانی می توانند داده ها را همزمان از منابع مختلف استخراج کرده و داده ها را با استفاده از یک رابط JDBC در MySQL ادغام و غرق کنند.
داده های CDC را از MySQL با استفاده از رابط RisingWave دریافت کنید
فرض کنید در یک شرکت تجارت الکترونیکی کار می کنید که هر روز حجم زیادی از سفارشات را دریافت می کند. برای اطمینان از انجام بهموقع این سفارشها، باید آنها را بهمحض ورود بهموقع پردازش کنید.
برای انجام این کار، شما تصمیم می گیرید از یک پایگاه داده استریم مانند RisingWave استفاده کنید که می تواند تغییرات را در داده های سفارش ذخیره شده در MySQL DB با استفاده از رابط CDC مادری MySQL ثبت کند. به این ترتیب، می توانید داده های سفارش را به محض در دسترس بودن از پایگاه داده بخوانید و آن را در زمان واقعی پردازش کنید تا از انجام سریع و کارآمد سفارش اطمینان حاصل کنید.
با کانکتور MySQL CDC RisingWave، RisingWave میتواند مستقیماً به MySQL متصل شود تا دادهها را از لاگ باینری خود دریافت کند.binlog
) بدون سایر خدمات پردازش جریانی و مدیریت زمان واقعی یک نمای تحقق یافته در بالای داده های CDC.
این نسخه آزمایشی از مخزن GitHub زیر استفاده می کند که در آن فرض می کنیم همه موارد ضروری با استفاده از Docker compose تنظیم شده اند. چندین کانتینر از جمله MySQL را با ورودی های از پیش پر شده راه اندازی می کند. در اینجا می توانید ببینید که چه اجزای اضافی در این پیکربندی Docker وجود دارد.
قبل از اینکه شروع کنی
- مطمئن شوید که Docker و Docker Compose را در محیط خود نصب کرده اید.
- مخزن GitHub را کلون کنید و کانتینرها را با آن اجرا کنید
docker compose up
. - قبل از استفاده از رابط CDC بومی MySQL در RisingWave، باید چندین پیکربندی را در MySQL تکمیل کنید. برای جزئیات بیشتر به بخش تنظیم MySQL مراجعه کنید.
- ما قصد داریم از ترمینال تعاملی PostgreSQL استفاده کنیم
psql
برای اجرای کوئری ها و بازیابی نتایج از RisingWave. CLI خود را باز کنید و دستور زیر را برای استفاده از ابزار توسعه دهنده PostgreSQL اجرا کنید:psql -h localhost -p 4566 -d dev -U root
یک منبع/جدول در RisingWave ایجاد کنید
برای اینکه RisingWave داده های CDC را از MySQL دریافت کند، باید یک جدول ایجاد کنید (CREATE TABLE
) با کلیدهای اصلی و تنظیمات کانکتور.
create table orders (
order_id int,
order_date bigint,
customer_name varchar,
price decimal,
product_id int,
order_status smallint,
PRIMARY KEY (order_id)
) with (
connector = 'mysql-cdc',
hostname = 'mysql',
port = '3306',
username = 'root',
password = '123456',
database.name = 'mydb',
table.name = 'orders',
server.id = '1'
);
یک نمای مادی ایجاد کنید
بیایید فرض کنیم که می خواهیم محاسبه کنیم تعداد کل محصولات سفارش داده شده تا حالا. حالا می توانید فکر کنید “ما حتی بدون استفاده از CDC و پایگاه داده جریان میتوانیم به همین هدف برسیم“. خوب، اگر مجموعه داده Order ثابت است، اغلب تغییر نمی کند و اندازه کوچکی دارد، می توانید این کار را انجام دهید. اما در واقعیت، سفارشات زیادی وجود خواهد داشت، داده ها به طور مکرر تغییر می کنند و دسترسی بلادرنگ به این داده ها مورد نیاز است.
CDC سفارشات تازه وارد شده را به سرعت تشخیص می دهد و سیستم های هدف را با آخرین داده ها به روز می کند در زمان واقعی. سپس پایگاه داده استریم این تغییرات ایجاد شده در جدول منبع را می گیرد و آنها را در یک جدول کش محلی به نام ذخیره می کند orders
به ترتیب. به این ترتیب داده های CDC در RisingWave برای تجزیه و تحلیل بیشتر در زمان واقعی با نماهای تحقق یافته باقی می مانند. هر نمای تحقق یافته که در بالای این منبع تعریف شده باشد به تدریج به روز می شود و با رسیدن تغییرات جدید از CDC، تعداد محصولات در پشت صحنه محاسبه می شود.
اکنون شما ایده استفاده از CDC، پایگاه داده استریم و نمای مادی را برای مقابله با داده های سفارشات در حال تغییر و رشد سریع دارید.
ما می توانیم از پرس و جوی SQL زیر برای ایجاد یک نمای مادی جدید برای تعداد محصول استفاده کنیم:
CREATE MATERIALIZED VIEW product_count AS
SELECT
product_id,
COUNT(*) as product_count
FROM
orders
GROUP BY
product_id;
یک پرس و جو در نمای تحقق یافته CDC اجرا کنید
اکنون میتوانیم یک پرسوجو ساده بر روی نمای مادیشدهای که در مرحله قبل ایجاد کردیم اجرا کنیم تا با محدود کردن نتیجه به 10 ردیف، تعداد واقعی محصولات سفارششده را ببینیم:
SELECT
*
FROM
product_count;
سپس می توانید خروجی بازیابی شده از نمای تحقق یافته Risingwave را در پایگاه داده آن مشاهده کنید:
product_id | product_count
------------+---------------
1 | 1
2 | 2
اگر بخواهید هر ردیف جدیدی را به MySQL وارد کنید، تمام نمی شود mydb.orders
جدول، بلافاصله بر روی آن منعکس می شود product_count
نمای تحقق یافته در RisingWave.
insert into
orders
values
(4, 1558430840000, 'John', 10.50, 1, 1);
خروجی جدید روشن است product_count
نمای واقعی در زمان واقعی:
product_id | product_count
------------+---------------
1 | 2
2 | 2
غذای آماده
- CDC قادر به تشخیص تغییرات در جدول پایگاه داده، ایجاد رویدادهای تغییر است و بعداً این رویدادها در زمان واقعی توسط سیستم های پایین دست مصرف می شوند.
- پایگاه داده جریان به عنوان یک پردازشگر جریان حالت دار عمل می کند که می تواند جریان رویدادهای CDC را در جدولی که نشان دهنده وضعیت فعلی است، تحقق بخشد.
- در مقایسه با سایر پایگاههای داده رابطهای، پایگاهداده جریان به جای استفاده از موتور جستجو برای محاسبه نتایج لحظهای، از یک چارچوب جریانی ویژه استفاده میکند.
- یک نمای مادی در یک پایگاه داده جریانی را می توان برای به دست آوردن آسان، مقادیر زیاد و داده هایی که به سرعت در حال تغییر هستند و جستجوی مستقیم آنها دشوار است، استفاده کرد.
منابع مرتبط
محتوای پیشنهادی
انجمن
🙋 به انجمن Risingwave بپیوندید
درباره نویسنده
از وبلاگ شخصی من دیدن کنید: www.iambobur.com