إصدار نظام DBMS مضمّن عالي الأداء libmdbx 0.10.4 و libfpta 0.3.9

تم إصدار مكتبة libmdbx 0.10.4 (MDBX) مع تنفيذ قاعدة بيانات ذات قيمة مفتاح مدمجة عالية الأداء، ومكتبة libfpta 0.3.9 (FPTA) المرتبطة بها، والتي تنفذ تمثيلاً جدوليًا للبيانات باستخدام فهارس ثانوية ومركبة. على رأس MDBX. يتم توزيع كلا المكتبتين بموجب تراخيص OSI المعتمدة. يتم دعم جميع أنظمة التشغيل والبنيات الحالية، بالإضافة إلى Elbrus 2000 الروسي.

تاريخيًا، يعد libmdbx بمثابة إعادة صياغة عميقة لنظام إدارة قواعد البيانات LMDB ويتفوق على سلفه من حيث الموثوقية ومجموعة الميزات والأداء. بالمقارنة مع LMDB، يركز libmdbx كثيرًا على جودة التعليمات البرمجية واستقرار واجهة برمجة التطبيقات (API) والاختبار والفحوصات الآلية. يتم توفير أداة مساعدة للتحقق من سلامة بنية قاعدة البيانات مع بعض إمكانيات الاسترداد.

من الناحية التقنية، يقدم libmdbx ACID، وتسلسلًا قويًا للتغيير، وقراءات غير محظورة مع مقياس خطي عبر مراكز وحدة المعالجة المركزية. يتم دعم الضغط التلقائي والإدارة التلقائية لحجم قاعدة البيانات وتقدير استعلام النطاق. منذ عام 2016، تم تمويل المشاريع من قبل شركة Positive Technologies ومنذ عام 2017 تم استخدامها في منتجاتها.

يقدم libmdbx واجهة برمجة تطبيقات C++، بالإضافة إلى روابط اللغة المدعومة من قبل المتحمسين لـ Rust وHaskell وPython وNodeJS وRuby وGo وNim. بالنسبة إلى libfpta، يتوفر وصف واجهة برمجة التطبيقات (API) فقط للعامة في شكل ملف رأس C/C++.

الابتكارات والتحسينات والتصحيحات الرئيسية التي تمت إضافتها منذ الأخبار السابقة في 9 مايو:

  • تمكين البنيات القابلة للتكرار.
  • تم إصلاح الخلل الذي قد يؤدي، في حالات نادرة جدًا، إلى حدوث حلقة/تجميد أثناء تنفيذ المعاملة. تم تحديد المشكلة بواسطة متخصصي التقنيات الإيجابية أثناء الاختبار الداخلي لمنتجاتهم.
  • تم تحسين الاختبارات وتوسيع سيناريوهات الاختبار للتحقق من جميع الحالات غير المتماثلة التي يمكن الوصول إليها لشجرة الصفحة ومحتويات GC داخل قاعدة البيانات.
  • في واجهة برمجة تطبيقات C++، تم إصلاح "noexcept" إضافي، وتمت إضافة أحمال زائدة إضافية لطريقة "cursor::erase()"، وتم تجنب تنفيذ المخازن المؤقتة باستخدام "std::string" لضمان المحاذاة (ذو صلة بـ CLANG libstdc++).
  • تم التخلص من الانحدار في خوارزمية انسكاب الصفحات القذرة (الطرد الانتقائي لصفحات قاعدة البيانات المتغيرة) والذي تجلى من خلال خطأ نادر غير متوقع MDBX_PROBLEM عند تغيير البيانات في المعاملات الضخمة.
  • تم إجراء اختبار مرحلي مع إضافة عدد من الفحوصات لضمان الاستقرار في حالة حدوث ضرر متعمد لقاعدة البيانات.
  • تم إصلاح التحذيرات الطفيفة ومشكلات UnifiedBehaviorSanitizer وCoverity Scan.
  • تم إصلاح التحقق من العلامة الداخلية القديمة والتي لم تعد مستخدمة "P_DIRTY" في الصفحات المتداخلة داخل صور قاعدة البيانات التي تم إنشاؤها بواسطة الإصدارات الأقدم من المكتبة.
  • في البرامج النصية CMake، تم تحسين البحث عن مكونات المترجم المطلوبة لـ LTO (تحسين وقت الارتباط).
  • تم زيادة الحد الأقصى لعدد القراء المتزامنين إلى 32767.
  • تحسين الأداء عند استخدام Valgrind وAddressSanitizer.
  • في نظام التشغيل Windows، تم التخلص من الاستخدام المتكرر لقفل SRW عند العمل في وضع MDBX_NOTLS (دون استخدام التخزين المحلي لمؤشر الترابط)، وتم إصلاح إنشاء معرف التمهيد إذا تغير وقت النظام، وتم تحسين اكتشاف WSL1 وWSL2، والقدرة على تمت إضافة فتح قاعدة بيانات على الخطة 9 المثبتة عبر DrvFS.
  • في المجمل، تم إجراء أكثر من 160 تغييرًا على 57 ملفًا، وتمت إضافة 5000 سطر تقريبًا، وتم حذف 2500 سطر تقريبًا.

أود بشكل خاص أن أشكر فريق مشروع Erigon (نظام Ethereum البيئي) لمساعدتهم في الاختبار في سيناريوهات الاستخدام الشديد. من الجدير بالملاحظة أنه خلال خمسة أشهر منذ إصدار libmdbx v0.10.0، مع حجم قاعدة بيانات يصل إلى 1-2 تيرابايت في كل تثبيت Erigon (مستخدم على 7% من عقد Ethereum)، تم تلقي ثلاثة تقارير فقط عن تلف قاعدة البيانات، جميعها والتي حدثت لأسباب خارجية، وليس أخطاء برمجية: في حالتين كان السبب هو فشل ذاكرة الوصول العشوائي، وفي الحالة الثالثة خطأ في إعادة تعيين البيانات في تكوين محدد لنظام التخزين الفرعي باستخدام BTRFS.

المصدر: opennet.ru

إضافة تعليق