تستعرض هذه الصفحة الخيارات التالية لدمج PostgreSQL مع ClickHouse:
- استخدام محرك الجدول
PostgreSQLللقراءة من جدول في PostgreSQL - استخدام محرك قاعدة البيانات التجريبي
MaterializedPostgreSQLلمزامنة قاعدة بيانات في PostgreSQL مع قاعدة بيانات في ClickHouse
استخدام محرك الجدول PostgreSQL
يتيح محرك الجدول PostgreSQL تنفيذ عمليتي SELECT وINSERT على البيانات المخزنة على خادم PostgreSQL البعيد من داخل ClickHouse.
تهدف هذه المقالة إلى توضيح طرق التكامل الأساسية باستخدام جدول واحد.
إعداد PostgreSQL
- في
postgresql.conf، أضِف الإدخال التالي لتمكين PostgreSQL من الاستماع عبر واجهات الشبكة:
listen_addresses = '*'- أنشئ مستخدمًا للاتصال من ClickHouse. ولأغراض التوضيح، يمنح هذا المثال صلاحيات المستخدم الخارق كاملةً.
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');الحد الأدنى من المعلمات المطلوبة هو:
| parameter | الوصف | المثال |
|---|---|---|
| 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للنسخ المتماثل، وفتحات النسخ المتماثل:
أضِف الإدخالات التالية:
listen_addresses = '*'
max_replication_slots = 10
wal_level = logical*يتطلب ClickHouse حدًا أدنى من مستوى wal يبلغ logical، وحدًا أدنى قدره 2 من فتحات النسخ المتماثل
- باستخدام حساب مسؤول، أنشئ مستخدمًا لكي يتصل ClickHouse من خلاله:
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';*لأغراض التوضيح، مُنحت صلاحيات المستخدم الفائق الكاملة.
- أنشئ قاعدة بيانات جديدة:
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';الحد الأدنى من الخيارات:
| parameter | Description | example |
|---|---|---|
| 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 غير مدعومة في هذا النوع من النسخ المتماثل، يمكن ضبط المحرّك بحيث يكتشف التغييرات ويعيد تحميل الجداول عند إجراء تغييرات هيكلية.