الانتقال إلى المحتوى الرئيسي
تقدّم هذه الوثيقة مقدمة عن ترحيل البيانات من Snowflake إلى ClickHouse.
Snowflake هو مستودع بيانات سحابي يركّز أساسًا على نقل أعباء عمل مستودعات البيانات القديمة المحلية إلى السحابة. وهو مُحسَّن بدرجة كبيرة لتشغيل التقارير طويلة الأمد على نطاق واسع. ومع انتقال مجموعات البيانات إلى السحابة، يبدأ مالكو البيانات في التفكير في سبل أخرى لاستخلاص قيمة من هذه البيانات، بما في ذلك استخدام هذه المجموعات لتشغيل تطبيقات آنية لحالات استخدام داخلية وخارجية. وعندها، غالبًا ما يدركون أنهم بحاجة إلى قاعدة بيانات مُحسَّنة للتحليلات الآنية، مثل ClickHouse.

مقارنة

في هذا القسم، سنقارن أبرز الميزات في ClickHouse وSnowflake.

أوجه التشابه

Snowflake هي منصة مستودعات بيانات سحابية توفّر حلًا فعّالًا وقابلًا للتوسع لتخزين كميات كبيرة من البيانات ومعالجتها وتحليلها. وكما هو الحال مع ClickHouse، فإن Snowflake لا تُبنى على تقنيات قائمة مسبقًا، بل تعتمد على محرك استعلام SQL خاص بها ومعمارية مخصصة. تُوصَف معمارية Snowflake بأنها هجينة بين معمارية التخزين المشترك (القرص المشترك) ومعمارية shared-nothing. فمعمارية التخزين المشترك هي تلك التي تكون فيها البيانات متاحة لجميع عُقد المعالجة عبر مخازن كائنات مثل S3. أما معمارية shared-nothing فهي تلك التي تقوم فيها كل عقدة معالجة بتخزين جزء من مجموعة البيانات الكاملة محليًا للاستجابة للاستعلامات. وهذا، من الناحية النظرية، يوفّر أفضل ما في النموذجين: بساطة معمارية القرص المشترك وقابلية التوسع في معمارية shared-nothing. يعتمد هذا التصميم في جوهره على object storage بوصفه وسيط التخزين الأساسي، والذي يتوسع بصورة شبه غير محدودة عند الوصول المتزامن مع توفير مرونة عالية وضمانات قابلة للتوسع لمعدل النقل. تُظهر الصورة أدناه من docs.snowflake.com هذه المعمارية: وعلى النقيض من ذلك، وبصفته منتجًا مفتوح المصدر ومستضافًا سحابيًا، يمكن نشر ClickHouse باستخدام كلٍّ من معماريتَي القرص المشترك وshared-nothing. والأخيرة هي النمط المعتاد في عمليات النشر المُدارة ذاتيًا. ومع أنها تتيح توسيع CPU والذاكرة بسهولة، فإن تهيئات shared-nothing تفرض تحديات إدارة البيانات التقليدية والعبء الإضافي الناتج عن replication، لا سيما عند تغيّر العضوية. ولهذا السبب، يستخدم ClickHouse Cloud معمارية تخزين مشترك مشابهة مفاهيميًا لـ Snowflake. إذ تُخزَّن البيانات مرة واحدة في مخزن كائنات (نسخة واحدة)، مثل S3 أو GCS، مما يوفّر سعة تخزين شبه غير محدودة مع ضمانات قوية للتكرار. وتستطيع كل عقدة الوصول إلى هذه النسخة الوحيدة من البيانات، وإلى أقراص Local SSD الخاصة بها لأغراض cache. ويمكن بدورها توسيع العقد لتوفير موارد CPU وذاكرة إضافية حسب الحاجة. ومثل Snowflake، تعالج خصائص قابلية التوسع في S3 القيد التقليدي في معماريات القرص المشترك (اختناقات I/O الخاصة بالقرص والشبكة) عبر ضمان أن معدل نقل I/O المتاح للعقد الحالية في cluster لا يتأثر عند إضافة عقد إضافية.

الاختلافات

بصرف النظر عن تنسيقات التخزين الأساسية ومحركات الاستعلام، تختلف هذه المعماريات في بعض الجوانب الدقيقة:
  • تُوفَّر موارد الحوسبة في Snowflake من خلال مفهوم مستودعات. وتتكوّن هذه من عدد من العقد، لكلٍّ منها حجم محدد. ورغم أن Snowflake لا تنشر المعمارية الدقيقة لـ المستودعات الخاصة بها، فمن المعروف عمومًا أن كل عقدة تتكوّن من 8 vCPU و16 GiB و200 GB من التخزين المحلي (لأغراض cache). ويعتمد عدد العقد على حجم من فئة t-shirt، فعلى سبيل المثال يحتوي x-small على عقدة واحدة، وsmall على عقدتين، وmedium على 4، وlarge على 8، وهكذا. وهذه المستودعات مستقلة عن البيانات ويمكن استخدامها للاستعلام عن أي database موجودة على object storage. وعند الخمول وعدم وجود حمل استعلامات، يتم إيقاف المستودعات مؤقتًا، ثم تُستأنف عند تلقّي query. وبينما تنعكس تكاليف التخزين دائمًا في billing، لا يتم احتساب رسوم المستودعات إلا عندما تكون نشطة.
  • يستخدم ClickHouse Cloud مبدأً مشابهًا قائمًا على العقد مع تخزين cache محلي. وبدلًا من أحجام t-shirt، ينشر المستخدمون service بإجمالي من موارد الحوسبة وRAM المتاحة. وهذا بدوره يتوسّع تلقائيًا وشفافًا (ضمن حدود معرّفة) استنادًا إلى حمل الاستعلامات، إما رأسيًا عبر زيادة (أو تقليل) الموارد لكل عقدة، أو أفقيًا عبر زيادة/خفض العدد الإجمالي للعقد. وتمتلك عقد ClickHouse Cloud نسبة 1 CPU إلى الذاكرة، بخلاف نسبة 1 في Snowflake. ومع أن فكّ الارتباط بدرجة أكبر ممكن، فإن services تكون مرتبطة بالبيانات، بخلاف المستودعات في Snowflake. كما تتوقف العقد مؤقتًا عند الخمول وتُستأنف عند ورود queries. ويمكنك أيضًا تغيير حجم services يدويًا إذا لزم الأمر.
  • إن ذاكرة التخزين المؤقت للاستعلامات في ClickHouse Cloud خاصة بكل عقدة، بخلاف Snowflake، حيث تُقدَّم على مستوى service مستقل عن المستودع. واستنادًا إلى اختبارات الأداء، تتفوّق cache الخاصة بعقد ClickHouse Cloud على Snowflake.
  • يتبع Snowflake وClickHouse Cloud نهجين مختلفين في scaling من أجل زيادة Concurrency للاستعلامات. ويعالج Snowflake ذلك من خلال feature تُعرف باسم multi-cluster warehouses. وتتيح لك هذه feature إضافة clusters إلى المستودع. ورغم أن هذا لا يوفّر أي Improvement في زمن الاستجابة للاستعلامات، فإنه يوفّر قدرًا إضافيًا من parallelization ويتيح Concurrency أعلى للاستعلامات. ويحقق ClickHouse ذلك عبر إضافة المزيد من الذاكرة وCPU إلى service من خلال scaling الرأسي أو الأفقي. ونحن لا نستكشف capabilities هذه services على التوسع إلى Concurrency أعلى في هذه المدونة، إذ نركّز بدلًا من ذلك على زمن الاستجابة، لكننا نقرّ بأن هذا العمل ينبغي إنجازه من أجل مقارنة مكتملة. ومع ذلك، نتوقع أن يحقق ClickHouse أداءً جيدًا في أي اختبار Concurrency، مع أن Snowflake يفرض صراحةً حدًا على عدد queries المتزامنة المسموح بها لكل مستودع وهو 8 افتراضيًا. وبالمقارنة، يتيح ClickHouse Cloud تنفيذ ما يصل إلى 1000 query لكل عقدة.
  • إن قدرة Snowflake على تبديل حجم موارد الحوسبة لمجموعة بيانات، إلى جانب أزمنة الاستئناف السريعة لـ المستودعات، تجعل تجربة الاستعلامات الارتجالية ممتازة. وبالنسبة إلى حالات استخدام مستودع بيانات وdata lake، يوفّر هذا أفضلية مقارنة بالأنظمة الأخرى.

التحليلات في الوقت الفعلي

استنادًا إلى بيانات benchmark العامة، يتفوق ClickHouse على Snowflake في تطبيقات التحليلات في الوقت الفعلي في المجالات التالية:
  • زمن استجابة الاستعلام: تتمتع استعلامات Snowflake بزمن استجابة أعلى حتى عند تطبيق التجميع على الجداول لتحسين الأداء. وفي اختباراتنا، يتطلب Snowflake أكثر من ضعفي الموارد الحاسوبية لتحقيق أداء مماثل لأداء ClickHouse في الاستعلامات التي يُطبَّق فيها عامل تصفية يكون جزءًا من مفتاح التجميع في Snowflake أو المفتاح الأساسي في ClickHouse. وبينما تُخفف ذاكرة التخزين المؤقت الدائمة للاستعلامات في Snowflake بعض تحديات زمن الاستجابة هذه، فإنها لا تكون فعالة في الحالات التي تكون فيها معايير التصفية أكثر تنوعًا. كما يمكن أن تتأثر فعالية ذاكرة التخزين المؤقت للاستعلامات هذه أيضًا بالتغييرات التي تطرأ على البيانات الأساسية، إذ تُلغى صلاحية عناصر ذاكرة التخزين المؤقت عند تغيّر الجدول. ومع أن هذا لا ينطبق في benchmark الخاص بتطبيقنا، فإن النشر الفعلي سيتطلب إدراج بيانات جديدة وأحدث. لاحظ أن ذاكرة التخزين المؤقت للاستعلامات في ClickHouse خاصة بكل عقدة وليست متسقة على مستوى المعاملات، مما يجعلها أنسب للتحليلات في الوقت الفعلي. كما يتمتع المستخدمون بتحكم دقيق في استخدامها، مع إمكانية التحكم بها لكل استعلام على حدة، وحجمها الدقيق، وما إذا كان الاستعلام يُخزَّن مؤقتًا (مثل حدود المدة أو العدد المطلوب من مرات التنفيذ)، وما إذا كان يُستخدم استخدامًا سلبيًا فقط.
  • تكلفة أقل: يمكن تهيئة مستودعات Snowflake بحيث تتوقف بعد فترة من عدم نشاط الاستعلامات. وبمجرد توقفها، لا تُحتسب رسوم. وعمليًا، لا يمكن خفض مهلة التحقق من عدم النشاط إلا إلى 60 ثانية. وتُستأنف المستودعات تلقائيًا، خلال عدة ثوانٍ، بمجرد تلقّي استعلام. وبما أن Snowflake لا يفرض رسومًا على الموارد إلا عندما يكون المستودع قيد الاستخدام، فإن هذا السلوك يلائم أعباء العمل التي تبقى خاملة كثيرًا، مثل الاستعلامات المخصّصة. ومع ذلك، تتطلب العديد من أعباء عمل التحليلات في الوقت الفعلي استمرار إدخال البيانات في الوقت الفعلي وكثرة الاستعلامات، وهي أمور لا تستفيد من الخمول (مثل لوحات المعلومات الموجَّهة للعملاء). وهذا يعني أن المستودعات يجب غالبًا أن تكون نشطة بالكامل وتتحمل الرسوم. وهذا يلغي جدوى الخمول من ناحية التكلفة، وكذلك أي ميزة في الأداء قد ترتبط بقدرة Snowflake على استعادة حالة الاستجابة بسرعة أكبر من البدائل. ويؤدي هذا الاشتراط الخاص بالحالة النشطة، عند دمجه مع انخفاض التكلفة لكل ثانية في الحالة النشطة لدى ClickHouse Cloud، إلى أن يقدّم ClickHouse Cloud تكلفة إجمالية أقل بكثير لهذا النوع من أعباء العمل.
  • تسعير قابل للتنبؤ للميزات: تُعد ميزات مثل العروض المادية والتجميع (المكافئ لـ ORDER BY في ClickHouse) مطلوبة للوصول إلى أعلى مستويات الأداء في حالات استخدام التحليلات في الوقت الفعلي. وتترتب على هذه الميزات رسوم إضافية في Snowflake، إذ لا تتطلب فقط فئة أعلى، ما يزيد التكاليف لكل رصيد بمقدار 1.5x، بل أيضًا تكاليف خلفية غير قابلة للتنبؤ. فعلى سبيل المثال، تترتب على العروض المادية تكلفة صيانة في الخلفية، وكذلك الحال مع التجميع، وهو ما يصعب توقعه قبل الاستخدام. وعلى النقيض من ذلك، لا تترتب أي تكلفة إضافية على هذه الميزات في ClickHouse Cloud، باستثناء زيادة استخدام CPU والذاكرة وقت الإدراج، وهي زيادة تكون عادةً ضئيلة خارج حالات استخدام أعباء عمل الإدراج المرتفعة. وقد لاحظنا في benchmark الخاص بنا أن هذه الفروقات، إلى جانب انخفاض زمن استجابة الاستعلامات وارتفاع Compression، تؤدي إلى تكاليف أقل بكثير مع ClickHouse.
آخر تعديل في ٢٩ يونيو ٢٠٢٦