database/sql، أو الواجهة “القياسية”، استخدام العميل في الحالات التي ينبغي فيها أن تكون شيفرة التطبيق مستقلة عن قواعد البيانات الأساسية من خلال الالتزام بواجهة معيارية. لكن ذلك يأتي بكلفة معيّنة، تتمثل في طبقات إضافية من التجريد وعدم المباشرة، إضافةً إلى أنواع أولية لا تتوافق بالضرورة مع ClickHouse. ومع ذلك، تكون هذه الكلفة مقبولة عادةً عندما تحتاج الأدوات إلى الاتصال بعدة قواعد بيانات.
إضافةً إلى ذلك، يدعم هذا العميل استخدام HTTP كطبقة نقل، مع بقاء البيانات مرمّزة بالتنسيق الأصلي لتحقيق أفضل أداء.
الاتصال
clickhouse://<host>:<port>?<query_option>=<value> باستخدام الطريقة Open، أو عبر الطريقة clickhouse.OpenDB. ولا تُعدّ الطريقة الأخيرة جزءًا من مواصفة database/sql، لكنها تُرجع مثيلًا من sql.DB. وتوفّر هذه الطريقة وظائف مثل التنميط، والتي لا توجد طريقة واضحة لإتاحتها عبر مواصفة database/sql.
conn قد أُنشئ وهو متاح.
إعدادات الاتصال
hosts- قائمة مفصولة بفواصل لعناوين مضيفين مفردة لأغراض موازنة الحمل والتبديل التلقائي عند الفشل - راجع الاتصال بعُقد متعددة.username/password- بيانات اعتماد المصادقة - راجع المصادقةdatabase- تحديد قاعدة البيانات الافتراضية الحاليةdial_timeout- سلسلة مدة، وهي تسلسل قد يكون موقّعًا من أعداد عشرية، لكل منها جزء كسري اختياري ولاحقة وحدة مثل300msو1s. وحدات الوقت الصالحة هيmsوsوm.connection_open_strategy-random/in_order(القيمة الافتراضيةrandom) - راجع الاتصال بعُقد متعددةround_robin- اختيار خادم من المجموعة بأسلوب round-robinin_order- يتم اختيار أول خادم متاح وفقًا للترتيب المحدد
debug- تمكين مخرجات Debug (قيمة منطقية)compress- تحديد خوارزمية الضغط -none(الافتراضي)،zstd،lz4،gzip،deflate،br. إذا تم تعيينه إلىtrue، فسيُستخدمlz4. لا يدعم الاتصال native سوىlz4وzstd.compress_level- مستوى الضغط (الافتراضي هو0). راجع Compression. وهذا خاص بالخوارزمية:gzip- من-2(أفضل سرعة) إلى9(أفضل ضغط)deflate- من-2(أفضل سرعة) إلى9(أفضل ضغط)br- من0(أفضل سرعة) إلى11(أفضل ضغط)zstd،lz4- يتم تجاهله
secure- إنشاء اتصال SSL آمن (الافتراضي هوfalse)skip_verify- تخطي التحقق من الشهادة (الافتراضي هوfalse)block_buffer_size- يتيح لك التحكم في حجم مخزن block المؤقت. راجعBlockBufferSize. (الافتراضي هو2)
الاتصال عبر HTTP
DSN ليشمل بروتوكول HTTP أو بتحديد Protocol في خيارات الاتصال.
الجلسات
HTTP فقطلا تكون الجلسات مطلوبة إلا عند استخدام النقل عبر HTTP. أما اتصالات TCP الأصلية فتتضمن جلسة مدمجة تلقائيًا.
session_id كإعداد لتفعيل الإمكانات المرتبطة بالجلسة، مثل الجداول المؤقتة.
التنفيذ
sql عبر الطريقة Exec.
ExecContext إذا احتجت إلى ذلك — راجع استخدام سياق.
الإدراج على دفعات
sql.Tx عبر الطريقة Being. ومن خلاله، يمكن الحصول على دفعة باستخدام الطريقة Prepare مع تعليمة INSERT. ويُرجع ذلك كائن sql.Stmt يمكن إلحاق الصفوف به باستخدام الطريقة Exec. وستتراكم الدفعة في الذاكرة إلى أن تُنفَّذ Commit على sql.Tx الأصلي.
الاستعلام عن الصفوف
QueryRow. ويُرجع ذلك قيمة من النوع *sql.Row، يمكن بعدها استدعاء Scan عليها مع مؤشرات إلى متغيرات تُنسخ إليها قيم الأعمدة. ويتيح المتغير QueryRowContext تمرير كائن سياق غير background - راجع استخدام سياق.
Query. وتُرجع هذه الدالة بنية *sql.Rows يمكن استدعاء Next عليها للتنقل بين الصفوف. ويتيح النظير QueryContext تمرير سياق.
الإدراج غير المتزامن
ExecContext. ويجب تمرير سياق إليه مع تمكين الوضع غير المتزامن، كما هو موضح أدناه. يتيح ذلك للمستخدم تحديد ما إذا كان ينبغي للعميل انتظار الخادم حتى يُكمل عملية الإدراج، أو الاستجابة بمجرد استلام البيانات. ويتحكم هذا فعليًا في المعلمة wait_for_async_insert.
ربط المعلمات
Exec وQuery وQueryRow (وصيغها المكافئة التي تستخدم سياق). كما تدعم المعلمات الموضعية والمسمّاة والمرقّمة.
استخدام السياق
Context من الطرق؛ أي إن الطرق مثل Exec، التي تستخدم سياق الخلفية افتراضيًا، لها صيغة مقابلة هي ExecContext يمكن تمرير سياق إليها بوصفه المعامل الأول. ويتيح ذلك تمرير السياق في أي مرحلة من مراحل تدفق التطبيق. فعلى سبيل المثال، يمكنك تمرير سياق عند إنشاء اتصال عبر ConnContext أو عند طلب صف استعلام عبر QueryRowContext. وتظهر أدناه أمثلة على جميع الطرق المتاحة.
لمزيد من التفاصيل حول استخدام السياق لتمرير المهل الزمنية وإشارات الإلغاء ومعرّفات الاستعلام ومفاتيح الحصص وإعدادات الاتصال، راجع Using Context الخاصة بـ واجهة برمجة تطبيقات ClickHouse.
المسح الديناميكي
Scan. يتيح ذلك قراءة الأعمدة عندما لا يكون نوعها معروفًا.
الجداول الخارجية
SELECT. وتوضع هذه البيانات في جدول مؤقت، ويمكن استخدامها داخل الاستعلام نفسه أثناء التنفيذ.
لإرسال بيانات خارجية مع استعلام من العميل، يجب على المستخدم إنشاء جدول خارجي باستخدام ext.NewTable قبل تمريره عبر السياق.
OpenTelemetry
clickhouse.WithSpan لإرفاق span باستعلام عبر السياق.
قيد في نقل HTTPرغم أن ClickHouse server يقبل ترويسات HTTP القياسية
traceparent / tracestate، فإن نقل HTTP في clickhouse-go لا يرسلها حاليًا، لذا لا يكون لـ WithSpan أي تأثير عبر HTTP. وكحل بديل، يمكنك ضبط الترويسة يدويًا عبر HttpHeaders في خيارات الاتصال.الضغط
lz4 وzstd على مستوى الكتلة. بالإضافة إلى ذلك، يُدعَم الضغط باستخدام gzip وdeflate وbr لاتصالات HTTP. إذا كان أيٌّ من هذه الخيارات مفعّلًا، فسيُطبَّق الضغط على الكتل أثناء الإدراج وعلى استجابات الاستعلامات. أما الطلبات الأخرى، مثل رسائل ping أو طلبات الاستعلام، فستظل غير مضغوطة. وهذا متسق مع خياري lz4 وzstd.
إذا كنت تستخدم الطريقة OpenDB لإنشاء اتصال، فيمكن تمرير إعدادات Compression. ويشمل ذلك إمكانية تحديد مستوى الضغط (انظر أدناه). وإذا كنت تتصل عبر sql.Open باستخدام DSN، فاستخدم المعلَمة compress. ويمكن أن تكون هذه إما خوارزمية ضغط محددة، مثل gzip أو deflate أو br أو zstd أو lz4، أو قيمة منطقية. وإذا ضُبطت القيمة على true، فسيُستخدم lz4. والقيمة الافتراضية هي none، أي إن الضغط معطّل.
compress_level أو حقل Level في خيار Compression. القيمة الافتراضية هي 0، لكنها تختلف حسب الخوارزمية:
gzip- من-2(أفضل سرعة) إلى9(أفضل ضغط)deflate- من-2(أفضل سرعة) إلى9(أفضل ضغط)br- من0(أفضل سرعة) إلى11(أفضل ضغط)zstd,lz4- يتم تجاهلهما