هذا هو الجزء 1 من دليل للترحيل من PostgreSQL إلى ClickHouse. ومن خلال مثال عملي، يوضّح كيفية تنفيذ الترحيل بكفاءة باستخدام نهج النسخ المتماثل في الزمن الحقيقي (CDC). وتنطبق أيضًا كثير من المفاهيم التي يتناولها على عمليات نقل البيانات المجمّعة يدويًا من PostgreSQL إلى ClickHouse.
مجموعة البيانات
post وvote وuser وcomment وbadge على Stack Overflow من عام 2008 حتى أبريل 2024. ويظهر أدناه مخطط PostgreSQL لهذه البيانات:
أوامر DDL اللازمة لإنشاء الجداول في PostgreSQL متاحة هنا.
هذا المخطط، وإن لم يكن بالضرورة الأمثل، يوظّف عددًا من ميزات PostgreSQL الشائعة، بما في ذلك المفاتيح الأساسية والمفاتيح الخارجية والتقسيم والفهارس.
سنرحّل كل مفهوم من هذه المفاهيم إلى ما يقابله في ClickHouse.
أما المستخدمون الذين يرغبون في ملء مجموعة البيانات هذه في مثيل PostgreSQL لاختبار خطوات الترحيل، فقد أتحنا البيانات للتنزيل بتنسيق pg_dump إلى جانب DDL، كما ترد أدناه أوامر تحميل البيانات اللاحقة:
رغم أن نتائج الأمثلة لدينا تستخدم مجموعة البيانات الكاملة لإظهار فروق الأداء بين Postgres وClickHouse، فإن جميع الخطوات الموثقة أدناه متطابقة وظيفيًا عند استخدام المجموعة الفرعية الأصغر. ويمكن للمستخدمين الذين يرغبون في تحميل مجموعة البيانات الكاملة إلى Postgres الرجوع إلى هذا الرابط. ونظرًا إلى قيود المفاتيح الخارجية التي يفرضها المخطط أعلاه، فإن مجموعة البيانات الكاملة في PostgreSQL لا تتضمن إلا الصفوف التي تستوفي التكامل المرجعي. ويمكن، عند الحاجة، تحميل إصدار Parquet — الذي لا يفرض مثل هذه القيود — مباشرةً إلى ClickHouse بسهولة.
ترحيل البيانات
النسخ المتماثل في الزمن الحقيقي (CDC)
users في ClickHouse باستخدام ClickPipes.
تحميل مجمّع يدوي مع تحديثات دورية
- دوال الجداول - استخدام دالة جدول Postgres في ClickHouse لإجراء
SELECTللبيانات من Postgres ثمINSERTلها في جدول ClickHouse. وهذا مناسب لعمليات التحميل المجمّع حتى مجموعات بيانات بحجم عدة مئات من الجيجابايت. - عمليات التصدير - التصدير إلى تنسيقات وسيطة مثل CSV أو ملف برنامج نصي SQL. ويمكن بعد ذلك تحميل هذه الملفات إلى ClickHouse إما من جهة العميل عبر عبارة
INSERT FROM INFILEأو باستخدام تخزين الكائنات والدوال المرتبطة به، مثل s3 وgcs.
DESCRIBE مع دالة جدول Postgres. يصف الأمر التالي الجدول posts في PostgreSQL؛ عدّله وفقًا لبيئتك:
Query
Query
INSERT INTO SELECT بسيط، عبر قراءة البيانات من PostgresSQL وإدراجها في ClickHouse:
Query
id متزايدة أو timestamp، فيمكنك استخدام نهج table function المذكور أعلاه لتحميل الزيادات، أي يمكن تطبيق عبارة WHERE على SELECT. ويمكن أيضًا استخدام هذا النهج لدعم التحديثات إذا كان من المضمون أنها ستحدّث العمود نفسه. أما دعم عمليات الحذف فسيتطلب إعادة تحميل كاملة، وقد يصعب تحقيق ذلك كلما ازداد حجم الجدول.
نستعرض تحميلًا أوليًا وتحميلًا تزايديًا باستخدام CreationDate (نفترض أن هذا الحقل يُحدَّث عند تحديث الصفوف)..
سيدفع ClickHouse عباراتWHEREالبسيطة مثل=,!=,>,>=,<,<=, وIN إلى خادم PostgreSQL. وبذلك يمكن جعل التحميلات التزايدية أكثر كفاءة من خلال التأكد من وجود فهرس على الأعمدة المستخدمة لتحديد مجموعة التغييرات.
تتمثل إحدى الطرق الممكنة لاكتشاف عمليات UPDATE عند استخدام النسخ المتماثل للاستعلامات في استخدامانقر هنا للجزء 2XMINsystem column (معرّفات المعاملات) كعلامة مائية — إذ يشير التغيّر في هذا العمود إلى حدوث تغيير، وبالتالي يمكن تطبيقه على جدول الوجهة. يجب على المستخدمين الذين يعتمدون هذا الأسلوب الانتباه إلى أن قيمXMINقد تلتف، وأن المقارنات تتطلب فحصًا كاملًا للجدول، مما يجعل تتبّع التغييرات أكثر تعقيدًا.