Data Engineering

CDC القائم على السجلات مقابل CDC القائم على المحفّزات: دليل استراتيجي

تطورت تقنية التقاط بيانات التغيير (CDC) من تقنية قواعد بيانات متخصصة إلى حجر أساس في معماريات البيانات الحديثة. سواء كنت تبني خط أنابيب تحليلات في الوقت الفعلي، أو تزامن خدمات مصغرة، أو تغذية بحيرة بيانات (Lakehouse)، فإن الطريقة التي تختارها لالتقاط التغييرات في البيانات تحدد زمن الاستجابة (Latency)، وموثوقية، وتكاليف التشغيل لنظامك. في حين أن Debezium رسّخ CDC القائم على السجلات كمعيار صناعي لقواعد البيانات العلائقية، لا تزال الأساليب القائمة على المحفّزات (Triggers) تحتفظ بمزايا كبيرة في البيئات غير المتجانسة حيث تكون صلاحية الوصول إلى السجلات مقيدة أو حيث تكون مرونة المخطط (Schema) مطلوبة.

فهم النموذجين

يتضمن CDC القائم على السجلات تحليل سجلات المعاملات (مثل WAL في PostgreSQL أو Binlog في MySQL) لإعادة بناء أحداث التغيير. هذه الطريقة غير تدخلية؛ فهي لا تتطلب أي تغييرات في كود التطبيق أو مخطط قاعدة البيانات. تستغل أدوات مثل Debezium هذا النهج لتقديم بث عالي الإنتاجية ومنخفض زمن الاستجابة للتغييرات في البيانات مع ضمانات قوية للاتساق.

في المقابل، يعتمد CDC القائم على المحفّزات على محفّزات قاعدة البيانات (مثل `AFTER UPDATE` أو `AFTER DELETE`) لكتابة أحداث التغيير في جدول تدقيق منفصل أو طابور (Queue). على الرغم من أن هذا النهج يضيف عبئًا على عمليات الكتابة في قاعدة البيانات المصدر، إلا أنه غير مرتبط بقاعدة بيانات معينة ويمكن تنفيذه على الأنظمة التي لا يتوفر فيها الوصول إلى السجلات، مثل بعض قواعد البيانات المستضافة في السحابة أو نسخ Oracle القديمة.

تحليل الأداء والعبء

تتمثل المفاضلة الرئيسية في التأثير على النظام المصدر. يفصل CDC القائم على السجلات التقاط التغييرات عن مسار الكتابة. تكتب محرك قاعدة البيانات إلى سجله كجزء من معالجة المعاملات العادية، ويتتبع موصّل CDC هذه السجلات. يؤدي هذا إلى إضافة أدنى قدر من زمن الاستجابة واستهلاك الموارد.

في المقابل، يضيف CDC القائم على المحفّزات عملية كتابة متزامنة إلى كل معاملة. إذا قمت بتحديث صف، يجب على قاعدة البيانات أيضًا كتابة إدخال في جدول التدقيق. يزيد هذا من حمل الإدخال/الإخراج (I/O) ويمكن أن يسبب تنافسًا (Contention)، خاصةً تحت أحجام كتابة عالية. ومع ذلك، توفر المحفّزات ميزة متميزة: فهي يمكنها التقاط البيانات من جداول غير مسجلة أو من قواعد بيانات لا تكشف عن سجلات معاملاتها للمستهلكين الخارجيين.

أمثلة على الكود والتنفيذ

فكّر في إعداد محفّز بسيط لـ PostgreSQL لالتقاط تغييرات المستخدم:

CREATE OR REPLACE FUNCTION log_user_changes()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO user_audit_log (id, action, changed_at, payload)
  VALUES (
    COALESCE(NEW.id, OLD.id),
    TG_OP,
    NOW(),
    row_to_json(COALESCE(NEW, OLD))
  );
  RETURN COALESCE(NEW, OLD);
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_user_changes
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW EXECUTE FUNCTION log_user_changes();

في المقابل، يتم تعريف تكوين موصّل Debezium لنفس الجدول بشكل إعلاني، وغالبًا من خلال خصائص Kafka Connect:

name: postgres-cdc
connector.class: io.debezium.connector.postgresql.PostgresConnector
database.hostname: my-db
database.port: 5432
database.user: debezium
database.password: secret
database.dbname: mydb
database.server.name: mydb
plugin.name: pgoutput
publication.name: mypublication

لاحظ كيف أن تكوين Debezium تشغيلي بحت، ولا يتطلب تغييرات في المخطط، في حين أن نهج المحفّزات يتطلب تغييرات في لغة تعريف البيانات (DDL) وصيانة مخطط التدقيق.

اختيار الاستراتيجية المناسبة للأنظمة غير المتجانسة

في بيئة غير متجانسة، قد تواجه متطلبات مختلطة. على سبيل المثال، قد تستخدم Debezium لقواعد بيانات MySQL و PostgreSQL عالية الحجم لضمان زمن استجابة منخفض وأثر ضئيل على المصدر. ومع ذلك، بالنسبة لقاعدة بيانات Oracle قديمة أو خدمة سحابية مثل AWS RDS حيث يكون الوصول إلى binlog/WAL مقيدًا أو غير مدعوم، قد تحتاج إلى الرجوع إلى CDC القائم على المحفّزات أو حتى الاستطلاع (Polling) باستخدام استعلامات متزايدة.

غالبًا ما تكون الاستراتيجية الهجينة هي الأكثر عملية. استخدم CDC القائم على السجلات حيثما أمكن من أجل الأداء والاتساق، واعتمد آليات المحفّزات أو الاستطلاع كبديل للحالات الحدية. تأكد من تطبيع أحداث CDC الخاصة بك إلى تنسيق مشترك (مثل Avro أو JSON) قبل إدخالها في منصة البث الخاصة بك، مما يسمح للمستهلكين downstream بالبقاء غير معنيين بطريقة الالتقاط.

الخلاصة

لا يوجد حل واحد يناسب الجميع لتقنية التقاط بيانات التغيير. يوفر CDC القائم على السجلات، كما تجسده أدوات مثل Debezium، أداءً فائقًا وعدم تدخلية لقواعد البيانات العلائقية القياسية، مما يجعله الخيار المفضل للسيناريوهات عالية الإنتاجية. يبقى CDC القائم على المحفّزات أداة حيوية للأنظمة التي يكون فيها الوصول إلى السجلات مقيدًا أو حيث يكون التحكم على مستوى المخطط مطلوبًا. من خلال تقييم أنظمة المصدر الخاصة بك، ومتطلبات الأداء، والقيود التشغيلية، يمكنك تصميم معمارية CDC قوية وقابلة للتوسع تلبي متطلبات هندسة البيانات الحديثة.

Share: