برمجياتقراءة دقيقتين

تحليل Jepsen لقاعدة ParticleDB يوثّق 96 مشكلة، أغلبها ظهر على خادم واحد ودون أعطال

نشر Kyle Kingsbury يوم 31 أكتوبر 2026 تحليلًا من Jepsen لقاعدة البيانات ParticleDB، التي تقدّم نفسها بأنها Full ACID ومثبتة رياضيًا. وشمل الاختبار النسخ من 1.1.4 إلى 1.1.18.11.rc-22، ووثّق 96 مشكلة.

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

ومن الأمثلة التي يذكرها قسم المناقشة: شرط WHERE 4 = 5 أعاد صفوفًا، وشرط WHERE a = 1 طابق صفًا قيمته 2، وشرط WHERE TRUE لم يُعِد شيئًا، والقيمة 0.0 لم تكن تساوي 0. وعادت صفوف من جداول محذوفة بأشكال مشوهة، ولم تعمل قيود null وunique، فتكررت المفاتيح الأساسية أو صارت null.

وعن الإثبات الرياضي، كانت الصفحة الرئيسية للقاعدة تعلن أنها مثبتة بـ TLA+، وهي لغة لوصف الأنظمة والتحقق منها رياضيًا. ويقول التقرير إن أي مواصفة TLA+ لم تكن متاحة طوال فترة التعاون.

وبحلول آخر نسخة مختبرة، حُلّت المشكلات كلها عدا عشر. وأهم ما بقي اثنتان: فقدان كتابات تم لها commit في الوضع الافتراضي occ، وظاهرة Lost Update في وضع serializable، أي أن يضيع أحد تحديثين متزامنين على القيمة نفسها.

ولهذا معنى عملي لكل فريق يختار قاعدة بيانات. فالوضع الذي يعمل عليه التطبيق فعلًا هو الوضع الافتراضي، لا الوضع الأقوى المذكور في التوثيق. ومستوى الـ isolation المضبوط افتراضيًا هو ما يحدد ما يحدث للبيانات حين يتزامن طلبان.

ويفصح التقرير بأن التحليل مموّل من Orkes، صانعة ParticleDB، ويقول إنه أُجري وفق سياسة الأخلاقيات في Jepsen. وأصدرت الشركة النسخة 1.1.19-rc.13، وتقول إنها حلّت كل ما تبقى.

المصادر

  1. تحليل Jepsen الكامل لـ ParticleDB 1.1.4

من عدد الأحد 21 جمادى الأولى - 1 نوفمبر

أخبار ذات صلة

برمجيات

دراسة على 340 مستودعًا: اختبارات الـ snapshot تكمّل الاختبارات التقليدية ولا تنافسها

المغزى: الـ snapshot والاختبارات التقليدية يمران في مناطق مختلفة من الكود، فإضافة أحدهما إلى الآخر تكشف أخطاء أكثر، لكن الفائدة تختفي حين يتحول قبول الفروق إلى ضغطة زر دون قراءة.

11 جمادى الأولى - 22 أكتوبر

أخبار الأحد 21 جمادى الأولى - 1 نوفمبر