البدء السريع
تفاصيل الاتصال
| المعلمات | الوصف |
|---|---|
HOST and PORT | يكون المنفذ عادةً 9440 عند استخدام TLS، أو 9000 عند عدم استخدام TLS. |
DATABASE NAME | توجد افتراضيًا قاعدة بيانات باسم default؛ استخدم اسم قاعدة البيانات التي تريد الاتصال بها. |
USERNAME and PASSWORD | يكون اسم المستخدم افتراضيًا هو default. استخدم اسم المستخدم المناسب لحالة الاستخدام الخاصة بك. |
clickhouse-client.
إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيحدّد مسؤول ClickHouse لديك تفاصيل الاتصال.
تهيئة وحدة
انسخ بعض الشيفرة النموذجية
clickhouse-golang-example واحفظها باسم main.go.
main.go
نفّذ go mod tidy
عيّن تفاصيل الاتصال الخاصة بك
main.go داخل الدالة connect():
نفّذ المثال
تعرّف على المزيد
نظرة عامة
- clickhouse-go - مكتبة عملاء عالية المستوى للغات البرمجة تدعم إما واجهة
database/sqlالقياسية في Go أو واجهة برمجة تطبيقات ClickHouse الأصلية. - ch-go - عميل منخفض المستوى. يدعم الواجهة الأصلية فقط.
أربع طرق للاتصال
clickhouse-go خيارين مستقلين: أي واجهة برمجة تطبيقات تستخدم وأي وسيلة نقل تستخدم. ويؤدي الجمع بينهما إلى أربعة أوضاع اتصال:
| TCP (البروتوكول الأصلي، المنفذ 9000/9440) | HTTP (المنفذ 8123/8443) | |
|---|---|---|
واجهة برمجة تطبيقات ClickHouse (clickhouse.Open) | الافتراضي — أفضل أداء | عيّن Protocol: clickhouse.HTTP |
واجهة برمجة تطبيقات database/sql (OpenDB / sql.Open) | clickhouse://host:9000 | http://host:8123 |
database/sql عندما تحتاج إلى التكامل مع ORMs أو مع أدوات تتوقع واجهة قاعدة بيانات قياسية لـ Go.
اختيار وسيلة النقل: TCP أسرع وهو الخيار الافتراضي. انتقل إلى HTTP عندما تتطلب البنية التحتية لديك ذلك — على سبيل المثال، عند الاتصال عبر موازن تحميل أو proxy خاص بـ HTTP، أو عندما تحتاج إلى ميزات خاصة بـ HTTP مثل الجلسات مع الجداول المؤقتة، أو خوارزميات ضغط إضافية (gzip, deflate, br).
تستخدم كلتا واجهتي برمجة التطبيقات الترميز الثنائي الأصلي بغض النظر عن وسيلة النقل، لذلك لا يضيف HTTP أي عبء serialization.
| التنسيق الأصلي | النقل عبر TCP | النقل عبر HTTP | كتابة مجمّعة | تنظيم struct | الضغط | استدعاءات التقدم | |
|---|---|---|---|---|---|---|---|
| واجهة برمجة تطبيقات ClickHouse | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
واجهة برمجة تطبيقات database/sql | ✅ | ✅ | ✅ | ✅ | ✅ |
اختيار عميل
insert، حيث يلزم تنفيذ ملايين عمليات الإدراج في الثانية، نوصي باستخدام العميل منخفض المستوى ch-go. يتجنب هذا العميل الكلفة الإضافية المرتبطة بتحويل البيانات من تنسيق موجّه للصفوف إلى تنسيق موجّه للأعمدة، كما يتطلب التنسيق الأصلي لـ ClickHouse. بالإضافة إلى ذلك، فهو يتجنب أي استبطان (reflection) أو استخدام النوع interface{} (any) لتبسيط الاستخدام.
أما بالنسبة إلى أعباء عمل الاستعلام التي تركز على التجميعات، أو أعباء عمل الإدراج ذات معدل النقل الأقل، فإن clickhouse-go يوفّر واجهة database/sql مألوفة ودلالات صفوف أبسط. ويمكنك أيضًا، عند الحاجة، استخدام HTTP كبروتوكول نقل والاستفادة من الدوال المساعدة لتحويل الصفوف من البُنى (structs) وإليها.
| التنسيق الأصلي | البروتوكول الأصلي | بروتوكول HTTP | واجهة برمجة تطبيقات موجّهة للصفوف | واجهة برمجة تطبيقات موجّهة للأعمدة | مرونة الأنواع | الضغط | العناصر النائبة في الاستعلام | |
|---|---|---|---|---|---|---|---|---|
| clickhouse-go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ch-go | ✅ | ✅ | ✅ | ✅ |
التثبيت
require github.com/ClickHouse/clickhouse-go/v2 main
أو استنسخ المستودع:
الإصدارات
توافق ClickHouse
- جميع إصدارات ClickHouse المدعومة حاليًا كما هو موضح هنا. وعندما تتوقف إصدارات ClickHouse عن تلقي الدعم، تتوقف أيضًا اختبارات توافقها النشطة مع إصدارات العميل.
- جميع إصدارات ClickHouse ضمن فترة سنتين من تاريخ إصدار العميل. لاحظ أن إصدارات LTS فقط هي التي تخضع لاختبارات نشطة.
التوافق مع Golang
| إصدار العميل | إصدارات Golang |
|---|---|
| => 2.0 <= 2.2 | 1.17, 1.18 |
| >= 2.3, < 2.41 | 1.18+ |
| >= 2.41 | 1.21+ |
| >= 2.43 | 1.24+ |
أفضل الممارسات
- استخدم واجهة برمجة تطبيقات ClickHouse حيثما أمكن، خاصةً مع الأنواع البدائية. فهذا يجنبك قدرًا كبيرًا من الاستبطان وعدم المباشرة.
- إذا كنت تقرأ مجموعات بيانات كبيرة، ففكّر في تعديل
BlockBufferSize. سيزيد ذلك من استهلاك الذاكرة، لكنه يتيح فك ترميز المزيد من الكتل بالتوازي أثناء التكرار على الصفوف. القيمة الافتراضية 2 متحفظة وتقلل من الحمل الإضافي على الذاكرة. وتعني القيم الأعلى وجود المزيد من الكتل في الذاكرة. ويتطلب هذا الاختبار، لأن الاستعلامات المختلفة قد تنتج أحجام كتل مختلفة. لذلك يمكن ضبطه على مستوى الاستعلام عبر Context. - كن دقيقًا في تحديد الأنواع عند إدراج البيانات. فمع أن العميل مصمم ليكون مرنًا، مثل السماح بتحليل السلاسل النصية إلى UUIDs أو عناوين IP، فإن ذلك يتطلب التحقق من صحة البيانات ويترتب عليه تكلفة وقت الإدراج.
- استخدم عمليات الإدراج الموجّهة بالأعمدة حيثما أمكن. ومرة أخرى، ينبغي أن تكون محددة الأنواع بوضوح لتجنب حاجة العميل إلى تحويل قيمك.
- اتبع توصيات ClickHouse المتعلقة بالأداء لتحقيق أفضل أداء عند الإدراج.
الخطوات التالية
- الإعداد — إعدادات الاتصال وTLS والمصادقة وتسجيل الأحداث والضغط
- واجهة برمجة تطبيقات ClickHouse — واجهة برمجة تطبيقات Go الأصلية للاستعلامات والإدراج
- واجهة برمجة تطبيقات Database/SQL — واجهة
database/sqlالقياسية - أنواع البيانات — تعيينات أنواع Go ودعم الأنواع المعقدة