Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

تكوين محرك التنفيذ

يمكن لـ DataStore تنفيذ العمليات باستخدام محركات خلفية مختلفة. يوضح هذا الدليل كيفية ضبط اختيار محرك التنفيذ وتحسينه.

المحركات المتاحة

المحرك الوصف الأنسب لـ
auto يختار تلقائيًا أفضل محرك لكل عملية الاستخدام العام (الافتراضي)
chdb يفرض تنفيذ جميع العمليات عبر ClickHouse SQL مجموعات البيانات الكبيرة وعمليات التجميع
pandas يفرض تنفيذ جميع العمليات عبر pandas اختبار التوافق والميزات الخاصة بـ pandas

ضبط المحرك

التهيئة العامة

from chdb.datastore.config import config

# Option 1: Using set method
config.set_execution_engine('auto')    # Default
config.set_execution_engine('chdb')    # Force ClickHouse
config.set_execution_engine('pandas')  # Force pandas

# Option 2: Using shortcuts
config.use_auto()     # Auto-select
config.use_chdb()     # Force ClickHouse
config.use_pandas()   # Force pandas

التحقق من المحرّك الحالي

print(config.execution_engine)  # 'auto', 'chdb', or 'pandas'

الوضع التلقائي

في وضع auto (الافتراضي)، يختار DataStore المحرّك الأنسب لكل عملية:

العمليات المنفذة في chDB

  • التصفية المتوافقة مع SQL (filter(), where())
  • تحديد الأعمدة (select())
  • الفرز (sort(), orderby())
  • التجميع والعمليات التجميعية (groupby().agg())
  • عمليات الربط (join(), merge())
  • القيم المميزة (distinct(), drop_duplicates())
  • تحديد العدد (limit(), head(), tail())

العمليات المُنفَّذة في pandas

  • دوال apply مخصّصة (apply(custom_func))
  • جداول محورية معقّدة مع تجميعات مخصّصة
  • عمليات لا يمكن التعبير عنها باستخدام SQL
  • عندما تكون المدخلات أصلًا pandas DataFrame

مثال

from chdb import datastore as pd
from chdb.datastore.config import config

config.use_auto()  # Default

ds = pd.read_csv("data.csv")

# This uses chDB (SQL)
result = (ds
    .filter(ds['amount'] > 100)   # SQL: WHERE
    .groupby('region')            # SQL: GROUP BY
    .agg({'amount': 'sum'})       # SQL: SUM()
)

# This uses pandas (custom function)
result = ds.apply(lambda row: complex_calculation(row), axis=1)

وضع chDB

أجبِر جميع العمليات على المرور عبر ClickHouse SQL:

config.use_chdb()

متى يُستخدم

  • معالجة مجموعات بيانات كبيرة (ملايين الصفوف)
  • أعباء تجميع كثيفة
  • عندما تريد أقصى استفادة من تحسينات SQL
  • سلوك متسق في جميع العمليات

خصائص الأداء

نوع العملية الأداء
GroupBy/التجميع ممتاز (أسرع بما يصل إلى 20 مرة)
التصفية المعقدة ممتاز
الفرز جيد جدًا
عوامل التصفية الفردية البسيطة جيد (مع تكلفة إضافية طفيفة)

القيود

  • قد لا تكون دوال بايثون المخصّصة مدعومة
  • تتطلب بعض الخصائص الخاصة بـ pandas إجراء تحويل

وضع pandas

افرض تنفيذ جميع العمليات من خلال pandas:

config.use_pandas()

متى تستخدم pandas

  • اختبار التوافق مع pandas
  • استخدام الميزات الخاصة بـ pandas
  • استكشاف المشكلات المرتبطة بـ pandas وإصلاحها
  • عندما تكون البيانات موجودة بالفعل بصيغة pandas

خصائص الأداء

نوع العملية الأداء
عمليات بسيطة منفردة جيد
دوال مخصصة ممتاز
عمليات تجميع معقدة أبطأ من chDB
مجموعات بيانات كبيرة استهلاك مرتفع للذاكرة

محرك Cross-DataStore

اضبط المحرك للعمليات التي تجمع أعمدة من وحدات DataStore مختلفة:

# Set cross-DataStore engine
config.set_cross_datastore_engine('auto')
config.set_cross_datastore_engine('chdb')
config.set_cross_datastore_engine('pandas')

مثال

ds1 = pd.read_csv("sales.csv")
ds2 = pd.read_csv("inventory.csv")

# This operation involves two DataStores
result = ds1.join(ds2, on='product_id')
# Uses cross_datastore_engine setting

آلية اختيار المحرك

شجرة اتخاذ القرار في الوضع التلقائي

Operation requested

    ├─ Can be expressed in SQL?
    │      │
    │      ├─ Yes → Use chDB
    │      │
    │      └─ No → Use pandas

    └─ Cross-DataStore operation?

           └─ Use cross_datastore_engine setting

تجاوز الإعدادات على مستوى الدالة

يمكن ضبط محرك لبعض الدوال بشكل صريح:

from chdb.datastore.config import function_config

# Force specific functions to use specific engine
function_config.use_chdb('length', 'substring')
function_config.use_pandas('upper', 'lower')

راجع إعدادات الدالة لمزيد من التفاصيل.


مقارنة الأداء

نتائج الاختبار المعياري على 10 ملايين صف:

العملية pandas (ms) chdb (ms) عامل التسريع
GroupBy count 347 17 19.93x
عمليات مجمّعة 1,535 234 6.56x
خط معالجة معقد 2,047 380 5.39x
تصفية+فرز+Head 1,537 350 4.40x
GroupBy agg 406 141 2.88x
تصفية واحدة 276 526 0.52x

أهم الملاحظات:

  • يتفوق chDB في عمليات التجميع وخطوط المعالجة المعقدة
  • يكون pandas أسرع قليلًا عند تنفيذ العمليات البسيطة المنفردة
  • استخدم وضع auto للحصول على أفضل ما في كليهما

أفضل الممارسات

1. ابدأ باستخدام الوضع التلقائي

config.use_auto()  # Let DataStore decide

2. قِس الأداء قبل الفرض

config.enable_profiling()
# Run your workload
# Check profiler report to see where time is spent

3. فرض استخدام محرك معيّن لأعباء عمل محددة

# For heavy aggregation workloads
config.use_chdb()

# For pandas compatibility testing
config.use_pandas()

4. استخدم explain() لفهم آلية التنفيذ

ds = pd.read_csv("data.csv")
query = ds.filter(ds['age'] > 25).groupby('city').agg({'salary': 'sum'})

# See what SQL will be generated
query.explain()

استكشاف الأخطاء وإصلاحها

المشكلة: العملية أبطأ من المتوقع

# Check current engine
print(config.execution_engine)

# Enable debug to see what's happening
config.enable_debug()

# Try forcing specific engine
config.use_chdb()  # or config.use_pandas()

المشكلة: عملية غير مدعومة في وضع chdb

# Some pandas operations aren't supported in SQL
# Solution: use auto mode
config.use_auto()

# Or explicitly convert to pandas first
df = ds.to_df()
result = df.some_pandas_specific_operation()

المشكلة: مشكلات في الذاكرة عند التعامل مع كميات كبيرة من البيانات

# Use chdb engine to avoid loading all data into memory
config.use_chdb()

# Filter early to reduce data size
result = ds.filter(ds['date'] >= '2024-01-01').to_df()

# For maximum throughput on large datasets, use performance mode
# which enables parallel Parquet reading and single-SQL aggregation
config.use_performance_mode()
Navigation