يتيح هذا المحرك تكامل 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- أي اسم عمود في قائمة الأعمدة.
يمكن أيضًا تمرير الوسيطات باستخدام المجموعات المسماة. في هذه الحالة، يجب تحديد host وport كلٌّ على حدة. يُوصى بهذا النهج لبيئة production. في الوقت الحالي، تكون جميع المعلمات المُمرَّرة إلى Redis باستخدام المجموعات المسماة مطلوبة.
مثال على الاستخدام
أنشئ جدولًا في ClickHouse باستخدام المحرك Redis مع وسائط بسيطة:
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>CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);إدراج:
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);SELECT COUNT(*) FROM redis_table;┌─count()─┐
│ 2 │
└─────────┘SELECT * FROM redis_table WHERE key='1';┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1 │ 1 │ 1 │ 1 │
└─────┴────┴────┴────┘SELECT * FROM redis_table WHERE v1=2;┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2 │ 2 │ 2 │ 2 │
└─────┴────┴────┴────┘تحديث:
يرجى ملاحظة أنه لا يمكن تحديث المفتاح الأساسي.
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';الحذف:
ALTER TABLE redis_table DELETE WHERE key='1';Truncate:
تفريغ Redis db بشكل غير متزامن. كما يدعم Truncate أيضًا وضع SYNC.
TRUNCATE TABLE redis_table SYNC;JOIN:
الربط مع جداول أخرى.
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;القيود
يدعم محرك Redis أيضًا استعلامات المسح، مثل where k > xx، لكن له بعض القيود:
- قد يُنتج استعلام المسح بعض المفاتيح المكررة في حالات نادرة جدًا أثناء إعادة التجزئة. راجع التفاصيل في Redis Scan.
- أثناء المسح، قد تُنشأ مفاتيح وتُحذف، لذلك لا يمكن لمجموعة البيانات الناتجة أن تمثل نقطة زمنية محددة تمثيلًا صحيحًا.