Postgres مقابل ClickHouse: المفاهيم المتكافئة والمختلفة
INSERT وUPDATE وDELETE. وعلى الرغم من أن النتائج نفسها قد تنطبق على النسخ المتماثل الفيزيائي، فإنه يوفّر مرونة أكبر لاستهداف جداول وعمليات محددة، وكذلك لإجراء تحويلات على البيانات ودعم إصدارات مختلفة من Postgres.
في المقابل، تُعد الشظايا والنسخ المتماثلة في ClickHouse مفهومين أساسيين مرتبطين بتوزيع البيانات والتكرار. ويمكن النظر إلى النسخ المتماثلة في ClickHouse على أنها مماثلة لنسخ Postgres المتماثلة، مع أن النسخ المتماثل فيها متسق نهائيًا ولا يوجد فيه مفهوم للعُقدة الأساسية. أما التجزئة، فعلى خلاف Postgres، فهي مدعومة أصلاً.
الشظية هي قسم من بيانات جدولك. لديك دائمًا شظية واحدة على الأقل. ويمكن استخدام توزيع البيانات عبر عدة خوادم لتقسيم الحمل إذا تجاوزت سعة خادم واحد، مع استخدام جميع الشظايا لتشغيل الاستعلام بالتوازي. يمكنك إنشاء شظايا لجدول يدويًا على خوادم مختلفة وإدراج البيانات فيها مباشرةً. وبدلًا من ذلك، يمكن استخدام جدول موزع مع مفتاح تجزئة يحدد إلى أي شظية تُوجَّه البيانات. ويمكن أن يكون مفتاح التجزئة عشوائيًا أو ناتجًا عن دالة تجزئة. ومن المهم أن الشظية الواحدة يمكن أن تتكوّن من عدة نسخ متماثلة.
النسخة المتماثلة هي نسخة من بياناتك. يحتوي ClickHouse دائمًا على نسخة واحدة على الأقل من بياناتك، ولذلك فإن الحد الأدنى لعدد النسخ المتماثلة هو واحد. وتؤدي إضافة نسخة متماثلة ثانية من بياناتك إلى توفير تحمّل للأعطال وربما قدرة حاسوبية إضافية لمعالجة المزيد من الاستعلامات (يمكن أيضًا استخدام Parallel Replicas لتوزيع القدرة الحاسوبية لاستعلام واحد، مما يقلل زمن الاستجابة). وتتحقق النسخ المتماثلة باستخدام ReplicatedMergeTree table engine، الذي يمكّن ClickHouse من إبقاء نسخ متعددة من البيانات متزامنة عبر خوادم مختلفة. النسخ المتماثل فيزيائي: لا تُنقل بين العُقد إلا الأجزاء المضغوطة، وليس الاستعلامات.
باختصار، النسخة المتماثلة هي نسخة من البيانات توفّر التكرار والموثوقية (وربما المعالجة الموزعة)، بينما الشظية هي مجموعة فرعية من البيانات تتيح المعالجة الموزعة وموازنة الحمل.
يستخدم ClickHouse Cloud نسخة واحدة من البيانات مخزنة في S3 مع عدة نسخ متماثلة حاسوبية. وتكون البيانات متاحة لكل عُقدة نسخة متماثلة، ولكل منها local SSD cache. ويعتمد ذلك على نسخ البيانات الوصفية فقط عبر ClickHouse Keeper.
الاتساق النهائي
آثار ذلك على المستخدم
توصيات
التوجيه المتسق
ClickHouse Cloud
تواصل مع الدعم للحصول على إمكانية الوصول إلى endpoints المثبتة.
ClickHouse OSS
session_id أو user_id. يجب ضبط الإعدادات على مستوى الاستعلام prefer_localhost_replica=0، load_balancing=in_order. سيضمن ذلك تفضيل أي نسخ متماثلة محلية للشظايا، وإلا فستُفضَّل النسخ المتماثلة بحسب ترتيبها في الإعداد، ما دامت تملك العدد نفسه من الأخطاء — أما إذا كان عدد الأخطاء أعلى فسيحدث التحويل التلقائي عند الفشل مع اختيار عشوائي. ويمكن أيضًا استخدام load_balancing=nearest_hostname كبديل لهذا الاختيار الحتمي للشظية.
عند إنشاء جدول موزع، ستحدّد cluster. وسيعرض تعريف هذا الـ cluster، المحدد في config.xml، الشظايا (ونسخها المتماثلة) — مما يتيح للمستخدمين التحكم في الترتيب الذي تُستخدم به من كل عقدة. وباستخدام ذلك، يمكنك ضمان أن يكون الاختيار حتميًا.
الاتساق التسلسلي
- القراءة/الكتابة إلى العقدة نفسها - إذا كنت تستخدم البروتوكول الأصلي، أو جلسة لإجراء الكتابة/القراءة عبر HTTP، فينبغي حينها أن تكون متصلًا بالنسخة المتماثلة نفسها: في هذا السيناريو، أنت تقرأ مباشرةً من العقدة التي تكتب إليها، وبالتالي ستكون قراءتك متسقة دائمًا.
- مزامنة النسخ المتماثلة يدويًا - إذا كنت تكتب إلى نسخة متماثلة وتقرأ من أخرى، فيمكنك استخدام الأمر
SYSTEM SYNC REPLICA LIGHTWEIGHTقبل القراءة. - تفعيل الاتساق التسلسلي - عبر إعداد الاستعلام
select_sequential_consistency = 1. في OSS، يجب أيضًا تحديد الإعدادinsert_quorum = 'auto'.
راجع هنا لمزيد من التفاصيل حول تفعيل هذه الإعدادات.
يؤدي استخدام الاتساق التسلسلي إلى زيادة الحمل على ClickHouse Keeper. وقد تكون النتيجة تباطؤًا في عمليات الإدراج والقراءة. أما SharedMergeTree، المستخدم في ClickHouse Cloud بوصفه محرك الجدول الرئيسي، فإن الاتساق التسلسلي فيه يفرض حملًا إضافيًا أقل ويتوسع بصورة أفضل. وفي OSS، ينبغي استخدام هذا النهج بحذر وقياس الحمل على Keeper.
دعم المعاملات (ACID)
الضغط
Query (Postgres)
Query (ClickHouse)
Response