كيف تتم عملية النسخ المتماثل للبيانات؟
فك الترميز المنطقي في PostgreSQL
ReplacingMergeTree
_peerdb_version) من الصف، بينما تُمثَّل عمليات الحذف على شكل عمليات insert بإصدار أحدث مع تعيين _peerdb_is_deleted إلى true. ويقوم محرك ReplacingMergeTree بإلغاء التكرار/دمج البيانات في الخلفية، ويحتفظ بأحدث إصدار من الصف لمفتاح أساسي معيّن (id)، مما يتيح معالجة UPDATE وDELETE بكفاءة باعتبارهما versioned inserts.
فيما يلي مثال على عبارة CREATE TABLE ينفذها ClickPipes لإنشاء الجدول في ClickHouse.
مثال توضيحي
users بين PostgreSQL وClickHouse باستخدام ClickPipes.
توضح الخطوة 1 اللقطة الأولية للصفّين في PostgreSQL، وكيف يجري ClickPipes التحميل الأوّلي لهذين الصفّين إلى ClickHouse. وكما تلاحظ، يُنسخ الصفّان إلى ClickHouse كما هما.
توضح الخطوة 2 ثلاث عمليات على جدول users: إدراج صف جديد، وتحديث صف موجود، وحذف صف آخر.
توضح الخطوة 3 كيف يكرّر ClickPipes عمليات INSERT وUPDATE وDELETE إلى ClickHouse على شكل عمليات إدراج بإصدارات. ويظهر UPDATE كإصدار جديد من الصف ذي المعرّف 2، بينما يظهر DELETE كإصدار جديد للمعرّف 1 تم تمييزه بالقيمة true باستخدام _is_deleted. ونتيجة لذلك، يحتوي ClickHouse على ثلاثة صفوف إضافية مقارنةً بـ PostgreSQL.
ونتيجةً لذلك، قد يؤدي تشغيل استعلام بسيط مثل SELECT count(*) FROM users; إلى نتائج مختلفة في ClickHouse وPostgreSQL. ووفقًا لـ توثيق الدمج في ClickHouse، تُستبعَد إصدارات الصفوف القديمة في نهاية المطاف أثناء عملية الدمج. ومع ذلك، فإن توقيت هذا الدمج غير قابل للتنبؤ، ما يعني أن الاستعلامات في ClickHouse قد تُرجع نتائج غير متسقة إلى أن يحدث ذلك.
كيف يمكننا ضمان تطابق نتائج الاستعلام في كلٍّ من ClickHouse وPostgreSQL؟
إزالة التكرار باستخدام الكلمة المفتاحية FINAL
- استعلام count بسيط: احسب عدد المنشورات.
- تجميع بسيط باستخدام JOIN: أفضل 10 مستخدمين حصلوا على أكبر عدد من المشاهدات.
إعداد FINAL
ROW policy
_peerdb_is_deleted = 0 استخدام ROW policy. في ما يلي مثال يُنشئ ROW policy لاستبعاد الصفوف المحذوفة من جميع الاستعلامات على جدول Votes.
تُطبَّق سياسات الصفوف على قائمة من المستخدمين والأدوار. في هذا المثال، تُطبَّق على جميع المستخدمين والأدوار. ويمكن تعديل ذلك ليقتصر على مستخدمين أو أدوار معيّنة فقط.
الاستعلام كما في Postgres
عروض
العرض المادي القابل للتحديث
deduplicated_posts بشكل طبيعي.