الانتقال إلى المحتوى الرئيسي
يضع Join Order Benchmark (JOB) محسّن الاستعلامات تحت الضغط عبر 113 استعلامًا تحليليًا على مجموعة بيانات واقعية عالية الارتباط (لقطة من IMDb). ومنذ تقديمه، أصبح اختبار JOB المعيار الفعلي لتقييم أداء محسّنات استعلامات قواعد البيانات العلائقية، بما في ذلك تقدير الكاردينالية وتحسين ترتيب الربط. وعلى عكس الاختبارات المعيارية الاصطناعية التي تفترض بيانات متجانسة ومستقلة، يستخدم JOB بيانات حقيقية تتضمن انحرافًا وارتباطات، مما يجعله اختبارًا صعبًا لترتيب عمليات الربط وتقدير الكاردينالية. تضم مجموعة البيانات نحو 74 مليون صف موزعة على 21 جدولًا، وتشغل حوالي 1.15 GiB بصيغة مضغوطة في ClickHouse. تُنظَّم الاستعلامات البالغ عددها 113 ضمن 33 عائلة (133). وتشترك الاستعلامات داخل العائلة الواحدة (a, b, c, …) في مخطط الربط نفسه، لكنها تختلف في شروط التصفية الخاصة بها. المراجع

إنشاء الجداول

مجموعة بيانات JOB هي لقطة من IMDb تضم 21 جدولًا. تتوفر تعريفات الجداول في init_cloud.sql في مستودع ClickHouse. يستخدم كل جدول المحرّك MergeTree، ويُرتَّب حسب عمود المفتاح الأساسي id، بما يعكس مخطط PostgreSQL الأصلي حيث يعرّف كل جدول id integer NOT NULL PRIMARY KEY. وتُعيَّن أعمدة PostgreSQL التي تقبل NULL إلى الأنواع Nullable(...). أنشئ الجداول:

تحميل البيانات

تأتي البيانات من لقطة IMDb الأصلية المستخدمة في JOB، والموزعة على شكل ملف CSV واحد لكل جدول (aka_name.csv, title.csv, …). تستخدم ملفات CSV هذه دلالات COPY الخاصة بـ PostgreSQL مع ESCAPE '\': إذ يُستخدم backslash لتجاهل تأثير حرف الاقتباس فقط داخل حقل محاط بعلامتَي اقتباس، بينما يكون backslash خارج علامات الاقتباس حرفًا عاديًا. ويتوقع ClickHouse ملفات CSV المتوافقة مع RFC 4180 (علامات اقتباس مزدوجة، من دون استخدام backslash كحرف هروب)، لذا يجب إعادة ترميز الملفات أولًا. ينفّذ convert_csv.py عملية إعادة الترميز هذه. فهو يقرأ ملف CSV الأصلي من stdin ويكتب ملف CSV قياسيًا إلى stdout، مع مضاعفة علامات الاقتباس المضمّنة والحفاظ على الحقول الفارغة غير المحاطة بعلامات اقتباس (والتي يعيّنها ClickHouse إلى NULL في الأعمدة من النوع Nullable). لبناء الجداول من ملفات CSV الأصلية:
  • أنشئ الجداول (انظر أعلاه).
  • نزّل مجموعة بيانات IMDb كملف imdb.tgz، باتباع التعليمات الواردة في مستودع Join Order Benchmark.
  • حوّل البيانات واستوردها:
بعد تعبئة الجداول بالبيانات، يمكن تصديرها إلى Parquet لتسريع إعادة استيرادها لاحقًا، على سبيل المثال: clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet. الأحجام التفصيلية للجداول:
Tableالحجم (عدد الصفوف)الحجم (بعد الضغط في ClickHouse)
aka_name901,34331.86 MiB
aka_title361,47214.32 MiB
cast_info36,244,344296.25 MiB
char_name3,140,339107.95 MiB
comp_cast_type4132.00 B
company_name234,9978.38 MiB
company_type4162.00 B
complete_cast135,086748.80 KiB
info_type1131.25 KiB
keyword134,1701.88 MiB
kind_type7177.00 B
link_type18284.00 B
movie_companies2,609,12921.20 MiB
movie_info14,835,720300.46 MiB
movie_info_idx1,380,0358.01 MiB
movie_keyword4,523,93021.06 MiB
movie_link29,997178.21 KiB
name4,167,491131.16 MiB
person_info2,963,664154.12 MiB
role_type12246.00 B
title2,528,31278.04 MiB
الإجمالي74,190,1871.15 GiB
(أُخذت الأحجام المضغوطة في ClickHouse من system.tables.total_bytes، وهي تستند إلى تعريفات الجداول الواردة أعلاه.)

الاستعلامات

يمكن العثور على استعلامات JOB البالغ عددها 113 هنا في مستودع ClickHouse. أما الإعدادات المستخدمة لتشغيلها، فهي موجودة في settings.json. راجِع ملف README للاطلاع على المشكلات المعروفة والملاحظات المتعلقة ببعض الاستعلامات. تشير الاستعلامات إلى الجداول بأسمائها، لذا شغّلها على قاعدة البيانات job (على سبيل المثال، باستخدام clickhouse client --database job). مثال على استعلام (1a):
آخر تعديل في ٣ يوليو ٢٠٢٦