في معماريات الخدمات المصغرة الحديثة، نادرًا ما يكون نهج "قاعدة بيانات واحدة تحكم الجميع" كافياً. غالبًا ما تتطلب الخدمات المختلفة نماذج بيانات مختلفة—فبعضها يحتاج إلى ضمانات ACID للبيانات العلائقية، بينما يتطلب البعض الآخر المرونة في مخططات مستندات أو قدرات استكشاف الرسوم البيانية في محركات متخصصة. تحل هذه النمط المعماري، المعروف باسم التخزين متعدد اللغات، المشكلات الخاصة بكل مجال، لكنها تقدم تعقيدًا كبيرًا في مزامنة البيانات.
برزت PostgreSQL كنظام عصبي مركزي قوي لهذه المعماريات. من خلال دمج التكرار المنطقي المدمج فيها مع قابلية التوسع من خلال الإضافات المخصصة، يمكن لمهندسي قواعد البيانات بناء جسور سلسة بين PostgreSQL ومخازن البيانات المتنوعة دون التضحية بالاتساق أو الأداء.
تحديات مزامنة البيانات
عند فك ارتباط مخازن بياناتك، يصبح ضمان انعكاس التغييرات التي تُجرى في قاعدة بيانات المصدر (عادةً PostgreSQL) في الأنظمة اللاحقة (مثل Elasticsearch للبحث، أو Neo4j للعلاقات، أو S3 لبحيرات البيانات) أمرًا حاسمًا. آليات الاستطلاع التقليدية غير فعالة وعرضة لانحراف البيانات. علاوة على ذلك، فإن تطبيق التغييرات على مخططات مختلفة غالبًا ما يتطلب سكريبتات ETL معقدة يصعب صيانتها.
تكمن الحل في المعماريات القائمة على الأحداث. يحتوي سجل الكتابة المسبقة (WAL) في PostgreSQL على الحقيقة المطلقة لجميع التغييرات. من خلال الوصول المباشر إلى هذا السجل، يمكننا نشر التغييرات إلى الأنظمة الأخرى في وقت شبه حقيقي، مما يضمن بقاء النظام البيئي متعدد اللغات متسقًا.
تنفيذ التكرار المنطقي
يختلف التكرار المنطقي عن التكرار المتدفق المادي لأنه ينسخ التغييرات على مستوى الصف، مما يسمح لك بفلترة الجداول وحتى تحويل البيانات قبل وصولها إلى المشترك. هذا هو العمود الفقري لاستراتيجية المزامنة لدينا.
لإعداد ذلك، يجب أولاً تعريف منشور على قاعدة البيانات الأولية:
-- تعريف منشور على العقدة الأولية لـ PostgreSQL
CREATE PUBLICATION order_events FOR TABLE orders, order_items;
-- إنشاء فتحة للتكرار
SELECT pg_create_logical_replication_slot('order_slot', 'pgoutput');
من جانب المستهلك (الذي يمكن أن يكون instance PostgreSQL آخر أو تطبيقًا يقرأ الفتحة)، يتم استخراج البيانات كتيار من أحداث التغيير. ومع ذلك، فإن التكرار المنطقي الخام هو مجرد طبقة نقل. للاستفادة الحقيقية من التخزين متعدد اللغات، نحتاج إلى تحويل هذه البيانات في الوقت الفعلي.
توسيع PostgreSQL بإضافات مخصصة
هنا تبرز قوة الإضافات المخصصة. تسمح PostgreSQL لك بكتابة إضافات بلغات مثل C، أو PL/pgSQL، أو حتى Python (عبر PL/Python). يمكننا إنشاء إضافة مخصصة تعمل كمستمع لأحداث التكرار المنطقي وتقوم بالمهمة الشاقة المتمثلة في تحويل البيانات ودفعها إلى الأنظمة الخارجية.
تخيل إضافة تستمع إلى أحداث `INSERT` على جدول `users`، تثري البيانات بوقت حسابي، ثم تقوم باتصال HTTP غير متزامن إلى instance Redis لتخزين جلسات المستخدمين. هذا يحافظ على منطق التحويل قريبًا من مصدر البيانات، مما يقلل من زمن الانتقال.
إليك مثال مفاهيمي لكيفية معالجة دالة ضمن إضافة مخصصة لحدث تكرار:
CREATE OR REPLACE FUNCTION handle_user_event()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
rec RECORD;
BEGIN
-- استخراج بيانات الصف من تيار التكرار
-- هذا كود وهمي لمنطق تحليل JSON المعقد
FOR rec IN SELECT * FROM pg_logical_get_changes('order_slot')
LOOP
IF rec.operation = 'I' THEN
-- تحويل البيانات لمستودع NoSQL
PERFORM redis_set('user_cache:' || rec.id, jsonb_build_object(
'name', rec.name,
'updated_at', NOW()
));
END IF;
END LOOP;
END;
$$;
نمط المعمارية العملي
يتبع التنفيذ القوي للتخزين متعدد اللغات عادةً هذا التدفق:
- المصدر: تكتب التطبيقات في PostgreSQL.
- الاستحواذ: يلتقط التكرار المنطقي التغييرات من سجل WAL.
- التحويل: تقوم إضافة مخصصة أو عامل متصل (مثل Debezium) بتحويل البيانات.
- الاستيعاب: يتم دفع البيانات إلى مخازن متخصصة (Elasticsearch، قواعد بيانات الرسوم البيانية، إلخ).
يضمن هذا النمط بقاء نظامك المعاملاتي الأساسي نظيفًا بينما تحصل الأنظمة الأخرى على تنسيق البيانات المحدد الذي تحتاجه. كما يسمح لك باستخدام PostgreSQL كمصدر واحد للحقيقة، مما يبسط الاسترداد والتدقيق.
الخاتمة
التخزين متعدد اللغات ليس مجرد اختيار الأداة المناسبة لكل مهمة؛ بل هو تنسيق هذه الأدوات بفعالية. توفر PostgreSQL، بقدرات التكرار المنطقي القوية وقابلية التوسع العميقة، الأساس المثالي لهذا التنسيق. من خلال تجاوز مزامنة قاعدة البيانات إلى قاعدة البيانات البسيطة والاعتماد على الإضافات المخصصة، يمكنك بناء معمارية بيانات قابلة للتوسع وقابلة للصيانة، مما يضمن تدفق بياناتك بكفاءة عبر المشهد المتنوع لتطبيقات العصر الحديث.