يمكن العثور هنا على دليل كامل لترحيل PostgreSQL إلى ClickHouse، بما في ذلك إرشادات حول نمذجة البيانات والمفاهيم المكافئة. يوضح ما يلي كيفية ربط ClickHouse بـ PostgreSQL.
تستعرض هذه الصفحة الخيارات التالية لتكامل PostgreSQL مع ClickHouse:
- استخدام محرك الجدول
PostgreSQLللقراءة من جدول في PostgreSQL - استخدام محرك قاعدة البيانات التجريبي
MaterializedPostgreSQLلمزامنة قاعدة بيانات في PostgreSQL مع قاعدة بيانات في ClickHouse
استخدام محرك جدول PostgreSQL
يتيح محرك الجدول PostgreSQL تنفيذ عمليتَي SELECT وINSERT على البيانات المخزّنة على خادم PostgreSQL البعيد انطلاقًا من ClickHouse.
تهدف هذه المقالة إلى توضيح أساليب التكامل الأساسية باستخدام جدول واحد.
إعداد PostgreSQL
- في
postgresql.conf، أضِف السطر التالي لتمكين PostgreSQL من الاستماع عبر واجهات الشبكة:
listen_addresses = '*'- أنشئ مستخدمًا ليتصل ClickHouse من خلاله. ولأغراض العرض التوضيحي، يمنح هذا المثال امتيازات superuser كاملة.
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';- أنشئ قاعدة بيانات جديدة في PostgreSQL:
CREATE DATABASE db_in_psg;- أنشئ جدولًا جديدًا:
CREATE TABLE table1 (
id integer primary key,
column1 varchar(10)
);- لنُضِف بضعة صفوف للاختبار:
INSERT INTO table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');- لتهيئة PostgreSQL للسماح بإجراء اتصالات بقاعدة البيانات الجديدة باستخدام المستخدم الجديد لغرض النسخ المتماثل، أضف الإدخال التالي إلى الملف
pg_hba.conf. حدِّث سطر العنوان باستخدام الشبكة الفرعية أو عنوان IP لخادم PostgreSQL لديك:
# TYPE DATABASE USER ADDRESS METHOD
host db_in_psg clickhouse_user 192.168.1.0/24 password- أعد تحميل إعدادات
pg_hba.conf(عدّل هذا الأمر وفقًا لإصدارك):
/usr/pgsql-12/bin/pg_ctl reload- تحقّق من إمكانية تسجيل دخول المستخدم الجديد
clickhouse_user:
psql -U clickhouse_user -W -d db_in_psg -h <your_postgresql_host>عرّف جدولًا في ClickHouse
- سجّل الدخول إلى
clickhouse-client:
clickhouse-client --user default --password ClickHouse123!- لنُنشئ قاعدة بيانات جديدة:
CREATE DATABASE db_in_ch;- أنشئ جدولًا يستخدم
PostgreSQL:
CREATE TABLE db_in_ch.table1
(
id UInt64,
column1 String
)
ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'clickhouse_user', 'ClickHouse_123');المعلمات الدنيا المطلوبة هي:
| المعلمة | الوصف | المثال |
|---|---|---|
| host:port | اسم المضيف أو عنوان IP والمنفذ | postgres-host.domain.com:5432 |
| database | اسم قاعدة بيانات PostgreSQL | db_in_psg |
| user | اسم المستخدم للاتصال بـ Postgres | clickhouse_user |
| password | كلمة المرور للاتصال بـ Postgres | ClickHouse_123 |
اختبر التكامل
- في ClickHouse، اعرض الصفوف الأولى:
SELECT * FROM db_in_ch.table1يجب أن يحتوي جدول ClickHouse تلقائيًا على الصفّين الموجودين مسبقًا في جدول PostgreSQL:
Query id: 34193d31-fe21-44ac-a182-36aaefbd78bf
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
└────┴─────────┘- بالعودة إلى PostgreSQL، أضف بضعة صفوف إلى الجدول:
INSERT INTO table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');- يجب أن يظهر الصفّان الجديدان في جدول ClickHouse لديك:
SELECT * FROM db_in_ch.table1يجب أن تكون الاستجابة:
Query id: 86fa2c62-d320-4e47-b564-47ebf3d5d27b
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
│ 3 │ ghi │
│ 4 │ jkl │
└────┴─────────┘- لنرَ ما يحدث عند إضافة صفوف إلى جدول ClickHouse:
INSERT INTO db_in_ch.table1
(id, column1)
VALUES
(5, 'mno'),
(6, 'pqr');- يجب أن تظهر الصفوف المضافة في ClickHouse في جدول PostgreSQL:
db_in_psg=# SELECT * FROM table1;
id | column1
----+---------
1 | abc
2 | def
3 | ghi
4 | jkl
5 | mno
6 | pqr
(6 rows)يوضح هذا المثال التكامل الأساسي بين PostgreSQL وClickHouse باستخدام محرك الجدول PostrgeSQL.
اطّلع على صفحة التوثيق الخاصة بـ محرك الجدول PostgreSQL للتعرّف على مزيد من الميزات، مثل تحديد المخططات، وإرجاع مجموعة فرعية من الأعمدة فقط، والاتصال بعدة نُسخ متماثلة. واطّلع أيضًا على مدونة ClickHouse and PostgreSQL - a match made in data heaven - part 1.
استخدام محرك قاعدة البيانات MaterializedPostgreSQL
يستخدم محرك قاعدة البيانات PostgreSQL ميزات النسخ المتماثل في PostgreSQL لإنشاء نسخة متماثلة من قاعدة البيانات تشمل جميع المخططات والجداول أو مجموعة فرعية منها. تهدف هذه المقالة إلى توضيح الأساليب الأساسية للتكامل باستخدام قاعدة بيانات واحدة ومخطط واحد وجدول واحد.
في الإجراءات التالية، يُستخدم PostgreSQL CLI (psql) وClickHouse CLI (clickhouse-client). خادم PostgreSQL مُثبّت على Linux. ويوضح ما يلي الحد الأدنى من الإعدادات إذا كانت قاعدة بيانات PostgreSQL تثبيت اختبار جديدًا.
في PostgreSQL
- في
postgresql.conf، اضبط الحد الأدنى لمستويات الاستماع، وwal levelللنسخ المتماثل، وفتحات النسخ المتماثل:
أضف الأسطر التالية:
listen_addresses = '*'
max_replication_slots = 10
wal_level = logical*يتطلب ClickHouse حدًا أدنى من مستوى logical لـ wal، وحدًا أدنى قدره 2 من فتحات النسخ المتماثل
- باستخدام حساب مسؤول، أنشئ مستخدمًا للاتصال من ClickHouse:
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';*لأغراض التوضيح، مُنحت صلاحيات superuser كاملة.
- أنشئ قاعدة بيانات جديدة:
CREATE DATABASE db1;- اتصل بقاعدة البيانات الجديدة باستخدام
psql:
\connect db1- أنشئ جدولًا جديدًا:
CREATE TABLE table1 (
id integer primary key,
column1 varchar(10)
);- أضف الصفوف الأولية:
INSERT INTO table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');- اضبط PostgreSQL للسماح بالاتصال بقاعدة البيانات الجديدة باستخدام المستخدم الجديد لأغراض النسخ المتماثل. في ما يلي الحد الأدنى من الإدخالات التي يجب إضافتها إلى ملف
pg_hba.conf:
# TYPE DATABASE USER ADDRESS METHOD
host db1 clickhouse_user 192.168.1.0/24 password*لأغراض الشرح، يُستخدم هنا أسلوب المصادقة بكلمة مرور بنص واضح. حدِّث سطر العنوان باستخدام الشبكة الفرعية أو عنوان الخادم وفقًا لوثائق PostgreSQL
- أعد تحميل إعدادات
pg_hba.confبشيء مماثل لما يلي (عدِّله بما يناسب إصدارك):
/usr/pgsql-12/bin/pg_ctl reload- اختبر تسجيل الدخول باستخدام مستخدم
clickhouse_userالجديد:
psql -U clickhouse_user -W -d db1 -h <your_postgresql_host>في ClickHouse
- سجّل الدخول إلى ClickHouse CLI
clickhouse-client --user default --password ClickHouse123!- فعّل الميزة التجريبية لـ PostgreSQL لمحرك قاعدة البيانات:
SET allow_experimental_database_materialized_postgresql=1- أنشئ قاعدة البيانات الجديدة المراد نسخها متماثلًا وحدد الجدول الأولي:
CREATE DATABASE db1_postgres
ENGINE = MaterializedPostgreSQL('postgres-host.domain.com:5432', 'db1', 'clickhouse_user', 'ClickHouse_123')
SETTINGS materialized_postgresql_tables_list = 'table1';الخيارات الأساسية:
| المعلمة | الوصف | المثال |
|---|---|---|
| host:port | اسم المضيف أو عنوان IP والمنفذ | postgres-host.domain.com:5432 |
| database | اسم قاعدة بيانات PostgreSQL | db1 |
| user | اسم المستخدم للاتصال بـ postgres | clickhouse_user |
| password | كلمة المرور للاتصال بـ postgres | ClickHouse_123 |
| settings | إعدادات إضافية للمحرك | materialized_postgresql_tables_list = 'table1' |
- تحقّق من أن الجدول الأولي يحتوي على بيانات:
ch_env_2 :) select * from db1_postgres.table1;
SELECT *
FROM db1_postgres.table1Query id: df2381ac-4e30-4535-b22e-8be3894aaafc
┌─id─┬─column1─┐
│ 1 │ abc │
└────┴─────────┘
┌─id─┬─column1─┐
│ 2 │ def │
└────┴─────────┘اختبار النسخ المتماثل الأساسي
- في PostgreSQL، أضف صفوفًا جديدة:
INSERT INTO table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');- في ClickHouse، تحقّق من ظهور الصفوف الجديدة:
ch_env_2 :) select * from db1_postgres.table1;
SELECT *
FROM db1_postgres.table1Query id: b0729816-3917-44d3-8d1a-fed912fb59ce
┌─id─┬─column1─┐
│ 1 │ abc │
└────┴─────────┘
┌─id─┬─column1─┐
│ 4 │ jkl │
└────┴─────────┘
┌─id─┬─column1─┐
│ 3 │ ghi │
└────┴─────────┘
┌─id─┬─column1─┐
│ 2 │ def │
└────┴─────────┘الملخص
يركّز دليل التكامل هذا على مثال بسيط لكيفية إجراء نسخ متماثل لقاعدة بيانات تحتوي على جدول، ولكن تتوفر خيارات أكثر تقدمًا، تشمل إجراء نسخ متماثل لقاعدة البيانات بأكملها أو إضافة جداول ومخططات جديدة إلى عمليات النسخ المتماثل الحالية. وعلى الرغم من أن أوامر DDL غير مدعومة في هذا النسخ المتماثل، يمكن ضبط المحرك لاكتشاف التغييرات وإعادة تحميل الجداول عند إجراء تغييرات هيكلية.