اسنوفلیک CDC رو برد داخل خود پستگرس
خلاصهٔ کاملتر
تو این پست مهندسی اسنوفلیک اومده که تیم Postgres این شرکت رپلیکیشن رو از صفر بازنویسی کرده. مشکل قدیمی اینه که CDC توی پستگرس با logical decoding کار میکنه: تغییرات از WAL خونده میشن و روی شبکه به یه مصرفکنندهٔ بیرونی میرسن. اون مصرفکننده هیچی از حالوهوای پستگرس نمیدونه — نمیفهمه کِی اسکیما عوض شده، اسنپشاتها کجای جریان تغییرات میشینن، یا اصلاً پستگرس زندهست یا شبکه قطع شده.
راهحلی که نویسنده توضیح میده سادهست: بهجای کشیدن تغییرات از بیرون، خود پستگرس اونها رو هل بده بیرون. افزونهای به اسم snowflake_cdc دستههای تغییر رو توی یه change log برای هر جدول و یه «meta log» مینویسه که روی جدولهای Apache Iceberg با Parquet فشرده میشینن. چون افزونه داخل خود دیتابیسه، دقیقاً میدونه چه اتفاقی داره میافته و میتونه تغییر اسکیما، تراکنشهای DML و DDL و اسنپشاتها رو با جریان داده هماهنگ کنه.
هر نوشتن چهار مرحله داره — write، decode، capture و apply — که همه روی یه خط زمانیان ولی هرکدوم توی نقطهٔ متفاوتی ازش. سمت اسنوفلیک، فرایند apply مثل یه ماشین حالت متناهی دستورهای meta log رو اجرا میکنه. مهمتر اینکه هر دو سمت تراکنشیان: پستگرس چند change log رو توی یه تراکنش پر میکنه و اسنوفلیک چند دسته رو توی یه تراکنش merge میکنه، دقیقاً تا مرز یه تراکنش پستگرس. برای همین کلیدهای خارجی و درستی joinها حفظ میشه.
نویسنده میگه همین تراکنشیبودن باعث میشه لازم نباشه هر عملیات به upsert تبدیل بشه. upsert سه تا ایراد داره: حالتهای میانی ناسازگار روی مقصد، درجهای خیلی گرون روی استوریج ستونی، و سختیِ ترکیب تغییرات تازه با جدول مقصد. اینجا درجها فقط append میشن، پس رپلیکیشن جدولهای پر از insert خیلی سریع و ارزون درمیاد. قابلیت live view هم تغییرات اعمالنشده رو با دادهٔ خود جدول ترکیب میکنه، طوری که فیلترها و projectionها تا لایهٔ استوریج push down میشن.
به گفتهٔ نویسنده نتیجه اینه که حتی اگه apply رو کمتعداد اجرا کنی، تأخیر live view زیر یه دقیقه میمونه. data mirroring فعلاً توی public preview هست و کنارش pg_lake — نسخهٔ مدیریتشدهٔ «پستگرس برای دیتالیک» — بهصورت GA در دسترسه که با SQL معمولی جابهجایی داده بین جدولهای پستگرس و Iceberg رو ممکن میکنه.
نکات کلیدی:
- data mirroring تغییرات رو از داخل پستگرس به Iceberg هل میده، نه با ابزار بیرونی
- افزونهٔ snowflake_cdc تغییر اسکیما، اسنپشات و تراکنشهای DML/DDL رو هماهنگ میکنه
- تراکنش در هر دو سر مسیر، رپلیکیشن رو دقیقاً روی مرز تراکنش پستگرس نگه میداره
- چون درجها append میشن نه upsert، جدولهای insert-heavy ارزون رپلیکیت میشن
- live view تغییرات اعمالنشده رو با جدول مقصد ترکیب میکنه و تأخیر رو زیر یه دقیقه نگه میداره




