Remote وRemoteSecure وصولًا فوريًا إلى جداول قاعدة بيانات على خادم ClickHouse بعيد عبر بروتوكول TCP الأصلي. وهما نظيرا ClickHouse إلى ClickHouse لمحرّكي قواعد البيانات MySQL وPostgreSQL.
تُجلب قائمة الجداول وبنيتها من الخادم البعيد عند الطلب (باستخدام SHOW TABLES وDESCRIBE TABLE داخليًا)، لذا تعكس قاعدة البيانات دائمًا الحالة الحالية للخادم البعيد. يُتاح كل جدول كوحدة تخزين Distributed عبر عنقود مخصّص يُنشأ من العناوين المقدَّمة، ويوجّه استعلامات SELECT وINSERT إلى الخادم البعيد.
يفيد ذلك في ربط عدة عناقيد ClickHouse معًا أو في توصيل عنقود ClickHouse أكبر بـ clickhouse-local أو بعنقود أصغر.
إنشاء قاعدة بيانات
- Remote
- RemoteSecure
يتصل
Remote عبر منفذ TCP غير المشفّر (tcp_port، وهو 9000 افتراضيًا) عند عدم تحديد المنفذ.addresses_expr— عنوان خادم بعيد أو تعبير يُنشئ عدة عناوين، بصيغةhostأوhost:port. يدعم تعبير العنوان أنماط التوسيع نفسها التي تدعمها دالة الجدولremote(مثل{a,b,c}و{N..M}و{a|b}للتوسيع إلى عدة شرائح ونسخ متماثلة). عند عدم تحديد المنفذ، يستخدمRemoteمنفذ TCP غير المشفّر (tcp_port، وهو9000افتراضيًا)، بينما يستخدمRemoteSecureمنفذ TCP الآمن (tcp_port_secure، وهو9440افتراضيًا).database— اسم قاعدة البيانات على الخادم البعيد.user— اسم المستخدم البعيد. اختياري؛ الافتراضي:default.password— كلمة مرور المستخدم البعيد. اختياري؛ الافتراضي: فارغ.
SHOW CREATE DATABASE. وكما هو الحال مع دالة الجدول remote، يُعامل العنوان الذي يشير إلى الخادم الحالي كشريحة محلية: يُنفَّذ SELECT وINSERT مباشرةً باسم المستخدم الحالي — الذي يحتاج بالتالي إلى الامتيازات المناسبة على قاعدة البيانات الأساسية وجداولها — ولا تُستخدم بيانات الاعتماد المخزنة إلا للخوادم البعيدة فعليًا. إذا لم تكن النسخة المتماثلة المحلية لشريحة ما تحتوي على قاعدة البيانات أو أحد الجداول، يعود البحث إلى النسخ المتماثلة البعيدة للشريحة، كما يفعل جدول Distributed. في هذه الحالة، يعرض SHOW CREATE TABLE عناوين الرجوع الفعلية (بعد إزالة النسخ المتماثلة المحلية من شرائحها) بدلًا من العناوين المُهيَّأة، بحيث يعيد تعريف الجدول Remote(...) الناتج إنشاء الكائن الذي يخدم الاستعلامات فعليًا.
عندما يصف تعبير العنوان عدة شرائح، يقرأ كل جدول وكيل من جميعها، لكن البيانات الوصفية — قائمة الجداول وبنيتها — تُؤخذ من شريحة عشوائية (مع تفضيل الشريحة المحلية)، تمامًا كما تفعل دالة الجدول remote، بحيث يتطلب عرض القائمة استعلامًا واحدًا بدلًا من استعلام لكل شريحة. لذلك، يُتوقع أن تخدم شرائح العنقود المجموعة نفسها من الجداول؛ أما الجدول الموجود في بعض هذه الشرائح فقط، فيخدمه وكيل تفشل استعلاماته على الشرائح التي لا تحتويه. يرسل INSERT إلى جدول في قاعدة بيانات متعددة الشرائح كل صف إلى شريحة عشوائية (تحمل جداول Distributed الوكيلة مفتاح تقسيم rand() ضمنيًا)؛ ولتثبيت الشريحة لاستعلام ما، عيّن insert_shard_id. لا يوزع المفتاح الضمني سوى الصفوف المُدرجة؛ أما عند القراءة، فيتصرف الجدول كجدول Distributed بلا مفتاح تقسيم (وبالأخص، لا يعامل optimize_skip_unused_shards وforce_optimize_skip_unused_shards هذا المفتاح كمفتاح لتقليم الشرائح). يتضمن SHOW CREATE TABLE المفتاح في تعريف الجدول Remote(...) الناتج، لذا يقبل الجدول المُعاد إنشاؤه منه أيضًا استعلامات INSERT متعددة الشرائح.
المجموعات المسماة مدعومة أيضًا:
ملاحظات
- المحرك عبارة عن عرض قراءة مباشر للخادم البعيد: لا تُدعم تعليمات DDL مثل
CREATE TABLEوDROP TABLEوALTERوما شابهها على قاعدة البياناتRemote. أدِر المخطط مباشرةً على الخادم البعيد. - تُطبَّق حقوق الوصول على الخادم البعيد للمستخدم البعيد المُهيأ، ومحليًا عبر الامتيازات المعتادة على قاعدة البيانات وجداولها.
- يُبلَّغ عن جدول في شريحة محلية لا يُسمح للمستخدم برؤيته باعتباره مفقودًا لا محظورًا، لذا لا يمكن استخدام قاعدة بيانات
Remoteلاستقصاء أسماء جداول قاعدة بيانات محلية لا يملك المستخدم امتيازات عليها. ينطبق ذلك على سرد الجداول (SHOW TABLES،EXISTS TABLE) وكذلك على تحليلها (DESCRIBE TABLE،SHOW CREATE TABLE،SELECT)، ولا يُتاح هذا الجدول أيضًا عبر النسخ المتماثلة البعيدة لـ شريحة الخاص به: لا يحدث الرجوع الاحتياطي الموضح أعلاه إلا عندما لا تحتوي النسخة المتماثلة المحلية على الجدول فعلًا. - يشمل سرد جداول قاعدة بيانات موجودة على النسخة المتماثلة المحلية لـ شريحة أيضًا الجداول الموجودة فقط لدى النسخ المتماثلة البعيدة لذلك شريحة، بحيث يتوافق
SHOW TABLESوsystem.tablesمعEXISTS TABLEوDESCRIBE TABLEوSELECT، التي تلجأ احتياطيًا إلى تلك النسخ. وعندما لا تستجيب أي من النسخ المتماثلة البعيدة، تُعاد قائمة النسخة المتماثلة المحلية كما هي، لأنها تمثل بالفعل استجابة نسخة متماثلة متاحة. - إذا كان الخادم البعيد غير متاح، فإن سرد جداوله (
SHOW TABLES،system.tables) يُظهر خطأ الاتصال بدلًا من قائمة جداول فارغة، تمامًا كما يفعلEXISTS TABLEوSELECTعلى قاعدة البيانات نفسها. لاحظ أن تنفيذSELECTعلىsystem.tablesليشمل جميع قواعد البيانات يفشل أيضًا ما دامت قاعدة بيانات كهذه يتعذر الوصول إليها. - قد تشير قاعدة بيانات
Remoteإلى قاعدة بياناتRemoteأخرى على الخادم نفسه. لا يتطلب سرد جداول هذه السلسلة ووصفها امتيازات على قاعدة البيانات الوسيطة، إذ لا تحتفظ ببيانات أو بيانات وصفية خاصة بها، كما أن كل قفزة تتحقق أصلًا من حقوق المستدعي على الكائنات التي توكلها بدورها. أما قراءة البيانات وكتابتها فتتطلبSELECT/INSERTفي كل قفزة من السلسلة، لأن الاستعلام يُنفَّذ فعليًا على جدول قاعدة البيانات الوسيطة، تمامًا كما في جدولDistributedفوق جدولDistributedآخر. وتبقى قاعدة الرؤية الموضحة أعلاه سارية عبر السلسلة: فالجدول الذي تخفيه قاعدة البيانات الوسيطة عن المستدعي لا يُتاح أيضًا عبر النسخ المتماثلة البعيدة لقاعدة البيانات الخارجية. وإذا تعذر على قاعدة البيانات الوسيطة في النسخة المتماثلة المحلية الوصول إلى هدفها، فلن تتمكن النسخة المتماثلة المحلية لـ شريحة الخارجي من الاستجابة إطلاقًا، تمامًا كما لو كانت النسخة المتماثلة نفسها متوقفة، وعندها تلجأ قاعدة البيانات الخارجية احتياطيًا إلى النسخ المتماثلة البعيدة لـ شريحة.
مثال
Remote تشير إلى قاعدة بيانات system على خادم بعيد، ثم اقرأ منها: