t1 في MongoDB لتتبّع طلبات العملاء:
t1 في ClickHouse على الصف التالي:
مخطط الجدول
_id: المفتاح الأساسي من MongoDBdoc: وثيقة MongoDB مُكرَّرة بصيغة نوع بيانات JSON_peerdb_synced_at: يسجّل وقت آخر مزامنة للصف_peerdb_version: يتتبع إصدار الصف؛ ويزداد عند تحديث الصف أو حذفه_peerdb_is_deleted: يبيّن ما إذا كان الصف محذوفًا
محرك الجدول ReplacingMergeTree
ReplacingMergeTree. ومع هذا المحرك، تُمثَّل التحديثات على أنها عمليات insert بإصدار أحدث (_peerdb_version) من المستند لمفتاح أساسي (_id) محدد، مما يتيح معالجة التحديثات وعمليات الاستبدال والحذف بكفاءة باعتبارها versioned inserts.
يزيل ReplacingMergeTree التكرارات بشكل غير متزامن في الخلفية. ولضمان عدم وجود تكرارات للصف نفسه، استخدم المُعدِّل FINAL. على سبيل المثال:
التعامل مع عمليات الحذف
_peerdb_is_deleted. وعادةً ما ستحتاج إلى استبعادها في استعلاماتك:
الاستعلام عن بيانات JSON
Query
Result
^:
Query
Result
نوع Dynamic
Dynamic. ويتيح النوع Dynamic لـ ClickHouse تخزين قيم من أي نوع من دون الحاجة إلى معرفة النوع مسبقًا. يمكنك التحقق من ذلك باستخدام الدالة toTypeName:
Query
Result
dynamicType. لاحظ أنه قد توجد أنواع بيانات مختلفة لاسم الحقل نفسه في صفوف مختلفة:
Query
Result
Query
Result
Query
Result
Query
Result
تحويل نوع الحقل
sum مباشرةً على نوع Dynamic، فستحصل على الخطأ التالي:
CAST أو صيغة :::
Query
Result
يُعد التحويل من نوع Dynamic إلى نوع البيانات الأساسي (الذي يحدده
dynamicType) عالي الكفاءة جدًا، لأن ClickHouse يخزّن القيمة داخليًا مسبقًا بنوعها الأساسي.تسوية JSON
العرض العادي
العرض المادي القابل للتحديث
FINAL يُشغَّل مرة واحدة فقط أثناء التحديث، مما يلغي حاجة الاستعلامات اللاحقة على الجدول الهدف إلى استخدام FINAL.
ومن عيوب هذه الطريقة أن البيانات في الجدول الهدف لا تكون مُحدَّثة إلا بقدر حداثة آخر تحديث. وفي كثير من حالات الاستخدام، توفّر فترات التحديث التي تتراوح من عدة دقائق إلى بضع ساعات توازنًا جيدًا بين حداثة البيانات وأداء الاستعلام.
flattened_t1 مباشرةً من دون المُعدِّل FINAL:
العرض المادي التزايدي
FINAL في العرض المادي، لأن كل تحديث سيؤدي إلى عملية دمج. وبدلًا من ذلك، يمكنك إزالة التكرار من البيانات وقت الاستعلام عن طريق إنشاء عرض عادي فوق العرض المادي.
flattened_t1_final كما يلي: