قبل أن نكتب "يدعم 46 محركاً" شغّلنا 28 محركاً بأنفسنا، والنتيجة لم تكن 28


libredb

عضو جديد
الكاتب
إنضم
3 أكتوبر 2026
المشاركات
2
مستوى التفاعل
1
النقاط
0
العمر
36
الإقامة
Istanbul
الجنس
السلام عليكم

أعمل ضمن فريق يطور أداة قواعد بيانات مفتوحة المصدر، وأكتب هنا عن شيء تعلمناه بالطريقة الصعبة، لأنه يخص أي شخص يقرأ صفحة منتج ويرى رقماً كبيراً بجانب كلمة "محركات مدعومة".

المشكلة بدأت من عندنا نحن.

عندنا ثمانية عشر مشغّلاً (driver) مكتوباً بأيدينا: PostgreSQL وMySQL وOracle وSQL Server وMongoDB وRedis وCassandra وClickHouse وغيرها. وهناك ثمانية وعشرون محركاً آخر لا تملك مشغّلاً خاصاً بها، لكنها تتكلم نفس بروتوكول الاتصال لأحد مشغّلاتنا: TiDB تتكلم بروتوكول MySQL، وCitus وTimescaleDB تتكلمان بروتوكول PostgreSQL، وValkey وDragonflyDB تتكلمان بروتوكول Redis.

فالجمع بسيط: 18 زائد 28 يساوي 46. ويمكن كتابة "يدعم 46 محركاً" على صفحة المنتج دون أن يكذب أحد.

لكن هنا الخدعة التي وقعنا فيها نحن أولاً.

عميل قاعدة البيانات لا يفتح اتصالاً فقط. هو يقرأ قائمة الجداول، وعدد الصفوف والحجم، والفهارس والمفاتيح الأجنبية، وخطة التنفيذ، وقائمة الجلسات، والإحصائيات. وهذه كلها تُقرأ من كتالوج النظام الخاص بكل محرك، وليس من البروتوكول. فالبروتوكول قد يكون واحداً بينما الكتالوج مختلف تماماً. وعندها يمر الاتصال بنجاح، ثم تفتح الشاشة فتجدها فارغة.

لذلك قبل أن نكتب الرقم شغّلنا الثمانية والعشرين محركاً المستعارة بأنفسنا عبر Docker، ومررنا عليها نفس الخطوات. خمس عشرة شاشة لكل محرك.

النتيجة: سبعة عشر محركاً فقط استجابت فيها كل الشاشات. سبعة استجابت جزئياً. واثنان لم ينفع فيهما سوى محرر الاستعلامات.

وأسوأ من ذلك: أن تستجيب الشاشة لا يعني أن الرقم الذي تعيده صحيح. StarRocks مثلاً يعيد صفراً لحجم الجدول وعدد الصفوف دائماً، حتى بعد التحقق المباشر. وDoris، وهو الأصل الذي تفرّع منه StarRocks، يعيد الأرقام الحقيقية. فإذا شغّلتهما جنباً إلى جنب يظهر الفرق فوراً.

وهناك حالة أخطر في الاتجاه المعاكس: بعض المحركات تعيد صفراً لفترة بعد إدخال البيانات، لا لأنها معطوبة بل لأن جامع الإحصائيات عندها بطيء. فتظن أن الجدول فارغ وهو ليس كذلك.

ماذا فعلنا بالرقم؟

ما زلنا نكتب 46، لأنه صحيح من ناحية الاتصال. لكننا وضعنا بجانبه نتيجة القياس لكل محرك على حدة: سبعة عشر كاملة، وسبعة جزئية، واثنان محرر استعلامات فقط. ومكتوب لكل محرك أي شاشة تسقط ولماذا.

وأضفنا شيئاً آخر لم نكن نكتبه: خمسة من محركاتنا الثمانية عشر للقراءة فقط بحكم التصميم، وهي Druid وElasticsearch وOpenSearch وPrometheus وKafka. كنا نعدّها ضمن المدعوم دون توضيح، وهذا غير دقيق.

الخلاصة التي أردت مشاركتها: إن رأيت رقماً كبيراً بجانب "محركات مدعومة"، اسأل عن معنى كلمة مدعوم عندهم. هل جُرّب الاتصال فقط، أم جُرّبت الشاشات؟ نحن كنا سنكتب الرقم دون أن نسأل أنفسنا هذا السؤال، ولولا أننا شغّلنا المحركات بأنفسنا لما عرفنا.

من يريد الاطلاع على نتائج القياس لكل محرك، هي منشورة في مجلد docs/providers داخل المستودع:

https://github.com/libredb/libredb-studio
 
شكرا لك على التوضيح والمعلومة المفيدة

بارك الله فيك
​
 
السلام عليكم ورحمة الله
شكراً لك على الترحيب، وأقدّر أن الرد جاء من الإدارة.
أضيف شيئاً عملياً لمن يقرأ الموضوع لاحقاً، لأن القياس الذي ذكرته يستطيع أي شخص إعادته في عشر دقائق ودون أن يصدقني.
بعد نجاح الاتصال، افتح ثلاث شاشات فقط: قائمة الجداول، وعدد الصفوف والحجم، وخطة التنفيذ. فإن نجح الاتصال وبقيت واحدة من هذه الثلاث فارغة والبيانات موجودة فعلاً، فالسبب أن البروتوكول متوافق والكتالوج ليس كذلك. وهذه هي الحالة التي لا تُكتب في أي صفحة منتج.
وفخ واحد يستحق التنبيه: اقرأ عدد الصفوف مرتين بفارق دقيقتين قبل أن تحكم. جامع الإحصائيات البطيء يعطيك صفراً تماماً كما يعطيك الجدول الفارغ، وقد ظننا محركاً معطوباً وهو سليم.
وإن جرّب أحدكم محركاً لم يأتِ في قائمتنا وخرجت عنده نتيجة مختلفة، فأنا مهتم بأن أقرأها.
 
عودة
أعلى أسفل