الانتقال إلى المحتوى الرئيسي
يتيح هذا المحرك تكامل ClickHouse مع Redis. ونظرًا إلى أن Redis يعتمد نموذج المفتاح/القيمة (kv)، فإننا نوصي بشدة بقصر الاستعلامات عليه على الاستعلامات النقطية فقط، مثل where k=xx أو where k in (xx, xx).

إنشاء جدول

CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
    name1 [type1],
    name2 [type2],
    ...
) ENGINE = Redis({host:port[, db_index[, password[, pool_size]]] | named_collection[, option=value [,..]] })
PRIMARY KEY(primary_key_name);
معلمات المحرّك
  • host:port — عنوان خادم Redis. يمكنك تجاهل المنفذ، وسيُستخدم منفذ Redis الافتراضي 6379.
  • db_index — نطاق فهرس Redis db من 0 إلى 15، والقيمة الافتراضية هي 0.
  • password — كلمة مرور المستخدم، والقيمة الافتراضية هي سلسلة فارغة.
  • pool_size — الحد الأقصى لحجم connection pool في Redis، والقيمة الافتراضية هي 16.
  • primary_key_name - أي اسم عمود في قائمة الأعمدة.
التسلسللا يدعم PRIMARY KEY سوى عمود واحد. سيُسلسَل المفتاح الأساسي بتنسيق binary كمفتاح Redis. أما الأعمدة الأخرى غير المفتاح الأساسي فستُسلسَل بتنسيق binary كقيمة Redis وفق الترتيب المقابل.
يمكن أيضًا تمرير الوسيطات باستخدام المجموعات المسماة. في هذه الحالة، يجب تحديد host وport كلٌّ على حدة. يُوصى بهذا النهج لبيئة production. في الوقت الحالي، تكون جميع المعلمات المُمرَّرة إلى Redis باستخدام المجموعات المسماة مطلوبة.
التصفيةستُحسَّن الاستعلامات التي تحتوي على key equals أو in filtering إلى عمليات lookup متعددة المفاتيح من Redis. أما إذا كانت الاستعلامات بلا مفتاح تصفية، فسيحدث مسح كامل للجدول، وهي عملية مكلفة.

مثال على الاستخدام

أنشئ جدولًا في ClickHouse باستخدام المحرك Redis مع وسائط بسيطة:
Query
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);
أو باستخدام المجموعات المسماة:
<named_collections>
    <redis_creds>
        <host>localhost</host>
        <port>6379</port>
        <password>****</password>
        <pool_size>16</pool_size>
        <db_index>0</db_index>
    </redis_creds>
</named_collections>
Query
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);
إدراج:
Query
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);
Query
SELECT COUNT(*) FROM redis_table;
Response
┌─count()─┐
│       2 │
└─────────┘
Query
SELECT * FROM redis_table WHERE key='1';
Response
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1   │  1 │ 1  │  1 │
└─────┴────┴────┴────┘
Query
SELECT * FROM redis_table WHERE v1=2;
Response
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2   │  2 │ 2  │  2 │
└─────┴────┴────┴────┘
تحديث: يرجى ملاحظة أنه لا يمكن تحديث المفتاح الأساسي.
Query
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';
الحذف:
Query
ALTER TABLE redis_table DELETE WHERE key='1';
Truncate: تفريغ Redis db بشكل غير متزامن. كما يدعم Truncate أيضًا وضع SYNC.
Query
TRUNCATE TABLE redis_table SYNC;
JOIN: الربط مع جداول أخرى.
Query
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;

القيود

يدعم محرك Redis أيضًا استعلامات المسح، مثل where k > xx، لكن له بعض القيود:
  1. قد يُنتج استعلام المسح بعض المفاتيح المكررة في حالات نادرة جدًا أثناء إعادة التجزئة. راجع التفاصيل في Redis Scan.
  2. أثناء المسح، قد تُنشأ مفاتيح وتُحذف، لذلك لا يمكن لمجموعة البيانات الناتجة أن تمثل نقطة زمنية محددة تمثيلًا صحيحًا.
آخر تعديل في ٢٩ يونيو ٢٠٢٦