في معظم الحالات، لن تحتاج إلى مفتاح تقسيم، وفي أغلب الحالات الأخرى لن تحتاج إلى مفتاح تقسيم أكثر دقة من التقسيم حسب الشهر، إلا إذا كنت تستهدف حالة استخدام observability حيث يكون التقسيم حسب اليوم شائعًا.يجب ألا تستخدم تقسيمًا مفرط الدقة أبدًا. لا تقسّم بياناتك حسب معرّفات العملاء أو أسمائهم. وبدلًا من ذلك، اجعل معرّف العميل أو اسمه هو العمود الأول في التعبير
ORDER BY.PARTITION BY expr عند إنشاء جدول. ويمكن أن يكون مفتاح التقسيم أي تعبير مشتق من أعمدة الجدول. على سبيل المثال، لتحديد التقسيم حسب الشهر، استخدم التعبير toYYYYMM(date_column):
لا تعمل عملية الدمج إلا على أجزاء البيانات التي لها القيمة نفسها لتعبير التقسيم. وهذا يعني ألا تنشئ أقسامًا شديدة التفصيل (أكثر من نحو ألف قسم). وإلا فسيكون أداء استعلام
SELECT ضعيفًا بسبب العدد الكبير على نحو غير معقول من الملفات في نظام الملفات وواصفات الملفات المفتوحة.visits مع تقسيم حسب الشهر. لننفّذ استعلام SELECT على جدول system.parts:
partition على أسماء الأقسام. يوجد قسمان في هذا المثال: 201901 و201902. يمكنك استخدام قيمة هذا العمود لتحديد اسم القسم في استعلامات ALTER … PARTITION.
يحتوي العمود name على أسماء أجزاء بيانات القسم. يمكنك استخدام هذا العمود لتحديد اسم الجزء في استعلام ALTER ATTACH PART.
لنحلّل اسم الجزء: 201901_1_9_2_11:
201901هو اسم القسم.1هو الرقم الأدنى لكتلة البيانات.9هو الرقم الأقصى لكتلة البيانات.2هو مستوى الجزء (عمق شجرة الدمج التي تكوَّن منها).11هو إصدار التعديل (إذا خضع الجزء لتعديل)
تحمل أجزاء الجداول من النوع القديم الاسم:
20190117_20190123_2_2_0 (الحد الأدنى للتاريخ - الحد الأقصى للتاريخ - الحد الأدنى لرقم الكتلة - الحد الأقصى لرقم الكتلة - المستوى).active حالة الجزء. تعني 1 أنه نشط، وتعني 0 أنه غير نشط. وتشمل الأجزاء غير النشطة، على سبيل المثال، الأجزاء الأصلية المتبقية بعد دمجها في جزء أكبر. كما تُصنَّف أجزاء البيانات التالفة أيضًا على أنها غير نشطة.
كما ترى في المثال، توجد عدة أجزاء منفصلة للقسم نفسه (على سبيل المثال، 201901_1_3_1 و201901_1_9_2). وهذا يعني أن هذه الأجزاء لم تُدمج بعد. يدمج ClickHouse أجزاء البيانات المُدرجة دوريًا، عادةً بعد نحو 15 دقيقة من الإدراج. بالإضافة إلى ذلك، يمكنك إجراء دمج غير مجدول باستخدام استعلام OPTIMIZE. مثال:
/var/lib/clickhouse/data/<database>/<table>/. على سبيل المثال:
detached على الأجزاء التي فُصلت عن الجدول باستخدام استعلام DETACH. كما تُنقل الأجزاء التالفة إلى هذا الدليل بدلًا من حذفها. لا يستخدم الخادوم الأجزاء الموجودة في دليل detached. يمكنك إضافة البيانات في هذا الدليل أو حذفها أو تعديلها في أي وقت، لكن الخادوم لن يعلم بذلك إلى أن تُشغّل استعلام ATTACH.
لاحظ أنه لا يمكنك، أثناء تشغيل الخادوم، تغيير مجموعة الأجزاء أو بياناتها يدويًا في نظام الملفات، لأن الخادوم لن يكون على علم بذلك. بالنسبة إلى الجداول غير المُكرَّرة، يمكنك فعل ذلك عندما يكون الخادوم متوقفًا، لكن لا يُنصح به. أما بالنسبة إلى الجداول المُكرَّرة، فلا يمكن تغيير مجموعة الأجزاء في أي حال.
يتيح لك ClickHouse تنفيذ عمليات على الأقسام: حذفها، أو نسخها من جدول إلى آخر، أو إنشاء نسخة احتياطية. راجع قائمة جميع العمليات في قسم التعامل مع الأقسام والأجزاء.
تحسين GROUP BY باستخدام مفتاح التقسيم
يعتمد أداء مثل هذا الاستعلام على تخطيط الجدول. يكون هذا التحسين مُمكّنًا افتراضيًا بدءًا من الإصدار 26.7؛ وتتخطاه استدلالات وقت التشغيل تلقائيًا عندما يكون تخطيط الأقسام غير ملائم — وتحديدًا عندما يكون عدد الأقسام قليلًا جدًا (أقل من
max_threads / 2)، أو كبيرًا جدًا (أكثر من max_number_of_partitions_for_independent_aggregation)، أو عندما يكون هناك تفاوت كبير في أحجام الأقسام (بحيث يحتوي أكبر قسم على عدد من الصفوف يزيد على ضعفي إجمالي عدد الصفوف مقسومًا على max_threads). توضح القائمة أدناه عوامل التخطيط اللازمة لتحقيق أداء جيد بشكل عام؛ ومن بينها، لا تفرض استدلالات وقت التشغيل إلا عدد الأقسام وتفاوت الأحجام.- يجب أن يكون عدد الأقسام المشاركة في الاستعلام كبيرًا بما يكفي (أكثر من
max_threads / 2)، وإلا فلن يستفيد الاستعلام من موارد الجهاز على النحو الأمثل - يجب ألا تكون الأقسام صغيرة جدًا، حتى لا تتحول المعالجة الدفعية إلى معالجة صفًا تلو الآخر
- يجب أن تكون الأقسام متقاربة في الحجم، بحيث تنفذ جميع خيوط التنفيذ مقدارًا متقاربًا من العمل
يُنصح بتطبيق دالة hash على الأعمدة في عبارة
partition by من أجل توزيع البيانات بالتساوي بين الأقسام.allow_aggregate_partitions_independently- يتحكم في ما إذا كان استخدام هذا التحسين مُمكّنًاforce_aggregate_partitions_independently- يفرض استخدامه عندما يكون قابلًا للتطبيق من حيث صحة النتائج، لكن يتم تعطيله بواسطة المنطق الداخلي الذي يقدّر مدى جدواهmax_number_of_partitions_for_independent_aggregation- حد صارم لأقصى عدد من الأقسام يمكن أن يحتويه الجدول