الانتقال إلى المحتوى الرئيسي

إعدادات الاتصال

للاطلاع على شرح تفصيلي كامل لكل خيار، بما في ذلك القيم الافتراضية ومعلمات DSN وأفضل الممارسات واستكشاف الأخطاء وإصلاحها، راجع مرجع الإعدادات.
عند فتح اتصال، يمكن استخدام البنية Options للتحكم في سلوك العميل. الإعدادات التالية متاحة:
مثال متكامل

TLS

على المستوى الأدنى، ستستخدم جميع طرائق اتصال العميل (DSN/OpenDB/Open) حزمة Go tls لإنشاء اتصال آمن. ويعرف العميل أنه يجب استخدام TLS إذا كانت بنية Options تحتوي على مؤشّر tls.Config غير nil.
مثال كامل عادةً ما يكون الحد الأدنى من إعداد TLS.Config كافيًا للاتصال بالمنفذ الأصلي الآمن (عادةً 9440) على خادم ClickHouse. إذا لم تكن لدى خادم ClickHouse شهادة صالحة (منتهية الصلاحية، أو باسم مضيف غير صحيح، أو غير موقَّعة من قِبل سلطة شهادات جذرية معترف بها علنًا)، فيمكن ضبط InsecureSkipVerify على true، لكن لا يُنصح بذلك بشدة.
المثال الكامل إذا كانت هناك حاجة إلى معلمات TLS إضافية، فينبغي أن تضبط شيفرة التطبيق الحقول المطلوبة في بنية tls.Config. وقد يشمل ذلك تحديد حِزم تشفير معيّنة، أو فرض إصدار محدد من TLS (مثل 1.2 أو 1.3)، أو إضافة سلسلة شهادات CA داخلية، أو إضافة شهادة عميل (والمفتاح الخاص بها) إذا كان خادم ClickHouse يتطلب ذلك، بالإضافة إلى معظم الخيارات الأخرى المرتبطة بإعدادات أمان أكثر تخصصًا.

المصادقة

حدِّد بنية Auth ضمن تفاصيل الاتصال لتعيين اسم المستخدم وكلمة المرور.
المثال الكامل

الاتصال بعدة عُقد

يمكن تحديد عدة عناوين عبر البنية Addr.
مثال كامل تتوفر ثلاث استراتيجيات للاتصال:
  • ConnOpenInOrder (الافتراضي) - تُجرَّب العناوين بالترتيب. ولا تُستخدم العناوين اللاحقة إلا إذا تعذّر الاتصال باستخدام العناوين السابقة في القائمة. وهذه فعليًا استراتيجية تجاوز عند الفشل.
  • ConnOpenRoundRobin - يُوزَّع الحمل على العناوين باستخدام استراتيجية round-robin.
  • ConnOpenRandom - تُختار عقدة عشوائيًا من قائمة العناوين.
يمكن التحكم في ذلك من خلال الخيار ConnOpenStrategy
مثال كامل

تجميع الاتصالات

يحافظ العميل على مجموعة من الاتصالات ويعيد استخدامها عبر الاستعلامات عند الحاجة. ولن يُستخدم في أي وقت أكثر من MaxOpenConns، بينما يتحكم MaxIdleConns في الحد الأقصى لحجم المجموعة. يحصل العميل على اتصال من المجموعة عند تنفيذ كل استعلام، ثم يعيده إليها لإعادة استخدامه. ويظل الاتصال مستخدمًا طوال مدة الـ Batch، ثم يُحرَّر عند Send(). لا يوجد ما يضمن استخدام الاتصال نفسه من المجموعة في الاستعلامات اللاحقة ما لم يضبط المستخدم MaxOpenConns=1. ونادرًا ما تكون هناك حاجة إلى ذلك، لكنه قد يكون مطلوبًا في الحالات التي يستخدم فيها المستخدمون الجداول المؤقتة. لاحظ أيضًا أن القيمة الافتراضية لـ ConnMaxLifetime هي ساعة واحدة. وقد يؤدي ذلك إلى حالات يصبح فيها الحمل على ClickHouse غير متوازن إذا غادرت بعض العقد الـ cluster. ويمكن أن يحدث هذا عندما تصبح إحدى العقد غير متاحة، فتتوزع الاتصالات على العقد الأخرى. وستظل هذه الاتصالات قائمة ولن تُجدَّد لمدة ساعة واحدة افتراضيًا، حتى إذا عادت العقدة التي كانت بها المشكلة إلى الـ cluster. فكّر في خفض هذه القيمة في حالات أعباء العمل الكبيرة. استقصاء الاتصالات مفعّل لكلٍّ من Native (TCP) وبروتوكول HTTP.

التسجيل

يدعم العميل التسجيل المُهيكل عبر الحزمة القياسية log/slog في Go باستخدام الحقل Logger ضمن Options. أما الحقلان الأقدمان Debug وDebugf فهما مهملان، لكنهما لا يزالان يعملان حفاظًا على التوافق مع الإصدارات السابقة (الأولوية: Debugf > Logger > عدم تنفيذ أي إجراء).
يمكنك أيضًا إثراء الـ logger بسياق على مستوى التطبيق:
المثال الكامل

الضغط

يعتمد دعم طرق الضغط على البروتوكول الأساسي المستخدم. بالنسبة إلى البروتوكول الأصلي، يدعم العميل الضغط باستخدام LZ4 وZSTD. ويُنفَّذ ذلك على مستوى الكتلة فقط. يمكن تمكين الضغط عبر تضمين إعداد Compression ضمن الاتصال.
المثال الكامل تتوفر أيضًا تقنيات ضغط إضافية عند استخدام النقل عبر HTTP: ‏gzip وdeflate وbr. راجع قاعدة البيانات/واجهة برمجة تطبيقات SQL - الضغط لمزيد من التفاصيل.

TCP مقابل HTTP

بروتوكول النقل ليس سوى خيار واحد في الإعدادات — وكل ما عدا ذلك في هذا الدليل ينطبق على كليهما. إليك ما يتغيّر: لتحويل أيٍّ من واجهتَي برمجة التطبيقات إلى HTTP:
آخر تعديل في ١ يوليو ٢٠٢٦