مرشح إصدار libmdbx v1.0 الثاني بعد خمس سنوات من التطوير.

مكتبة libmdbx هي نسخة مُعاد تصميمها بشكل كبير من LMDB - وهي قاعدة بيانات مدمجة عالية الأداء ومدمجة ذات قيمة أساسية.
الإصدار الحالي v0.5 هو إصدار تقني، ويمثل اكتمال أي تحسينات والانتقال إلى مرحلة الاختبار النهائي العام والتثبيت، مع التشكيل اللاحق للإصدار الكامل الأول للمكتبة.

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

وصف الاختلافات والتحسينات في libmdbx بالنسبة إلى LMDB يستحق مقالة منفصلة (من المقرر نشرها على حبري وميديوم). ومن المناسب هنا أن نذكر أهمها وأبرزها:

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

مرشح إصدار libmdbx هو نتيجة القرار (انظر أدناه) بفصل مشروعي MDBX وMithrilDB في أغسطس 2019. وفي الوقت نفسه، قرر libmdbx إلغاء الحد الأقصى (العقلاني) للديون الفنية وتحقيق استقرار المكتبة. في الواقع، تم إنجاز ما يزيد بمقدار 2-3 مرات في الاتجاه المحدد عما كان مقدرًا ومخططًا له في البداية:

  • تم تنفيذ الدعم لنظام التشغيل Mac OS ومنصات الطبقة الثانية: FreeBSD، Solaris، DragonFly BSD، OpenBSD، NetBSD. يمكن إضافة دعم AIX وHP-UX حسب الحاجة.
  • تمت تنقية الكود باستخدام Unified Behavior Sanitizer وAddress Sanitizer، وتم حذف جميع التحذيرات عند الإنشاء باستخدام -Wpedantic، وجميع تحذيرات Coverity Static Analyzer، وما إلى ذلك.
  • تحديث أوصاف واجهة برمجة التطبيقات.
  • دمج كود المصدر لسهولة التضمين.
  • تقديم الدعم.
  • دعم المعاملات المتداخلة.
  • استخدام bootid لتحديد ما إذا كان نظام التشغيل قد تمت إعادة تشغيله (توقف قاعدة البيانات القذرة).
  • العد الشامل للصفحات المحدثة/القديمة ومعلومات المعاملات الموسعة.
  • الخيار MDBX_ACCEDE للاتصال بقاعدة بيانات مفتوحة بالفعل في الوضع المتوافق.
  • استخدام حجب OFD عندما تكون متاحة.
  • النسخ الاحتياطي الساخن في الأنابيب.
  • خوارزمية فرز داخلية محسنة متخصصة (أسرع بما يصل إلى 2-3 مرات من qsort() وأسرع بنسبة تصل إلى 30% من std::sort()).
  • تمت زيادة الحد الأقصى لطول المفتاح.
  • التحكم الآلي في القراءة المقبلة (استراتيجية التخزين المؤقت لملف قاعدة البيانات في الذاكرة).
  • ضغط تلقائي أكثر عدوانية وأسرع.
  • استراتيجية أكثر مثالية لدمج صفحات شجرة B+.
  • التحكم في أنظمة الملفات غير المحلية (NFS، Samba، إلخ) لمنع تلف قاعدة البيانات إذا تم استخدامها بشكل غير صحيح.
  • تم توسيع مجموعة الاختبارات.

سيستمر تطوير الإصدار "التالي" من libmdbx كمشروع منفصل MithrilDB، في حين أن ناقل التطوير للإصدار "الحالي" من MDBX يهدف إلى تجميد مجموعة الميزات وتثبيتها. تم اتخاذ هذا القرار لثلاثة أسباب:

  • غير متوافق تمامًا: يتطلب MithrilDB تنسيق ملف قاعدة بيانات مختلفًا (غير متوافق) وواجهة برمجة تطبيقات مختلفة (غير متوافقة) لتنفيذ جميع الميزات المخططة.
  • كود مصدر جديد: تم ترخيص كود مصدر MithrilDB بشكل مستقل عن LMDB، ومن المخطط نشر المشروع نفسه بموجب ترخيص مختلف (وافق عليه OSI رخصة أباتشي 2.0وليس مؤسسة OpenLDAP).
  • ويتجنب هذا الفصل الالتباس المحتمل، ويوفر مزيدًا من اليقين، ويضمن أن يكون للمشاريع مسار مستقل للمضي قدمًا.

يعتمد MithrilDB، مثل MDBX، أيضًا على شجرة ب+ وسيتميز أيضًا بأداء عالٍ للغاية، مع التخلص من عدد من العيوب الأساسية لـ MDBX وLMDB. على وجه الخصوص، سيتم القضاء على مشكلة "القراءات الطويلة"، والتي تتجلى في شكل "تضخم" لقاعدة البيانات بسبب حقيقة أن معالجة البيانات المهملة محظورة من خلال معاملات القراءة الطويلة. تتضمن ميزات MithrilDB الجديدة ما يلي:

  • دعم وضع قاعدة البيانات على عدة وسائط غير متجانسة: HDD وSSD والذاكرة غير المتطايرة.
  • الاستراتيجيات المثلى للبيانات "القيمة" و"المنخفضة القيمة"، للبيانات "الساخنة" و"الدافئة" و"الباردة".
  • استخدام شجرة Merkle لمراقبة سلامة قاعدة البيانات.
  • الاستخدام الاختياري لـ WAL وأداء أعلى بكثير في سيناريوهات الكتابة المكثفة وضمانات سلامة البيانات.
  • التثبيت البطيء للبيانات الموجودة على الأقراص.

المصدر: linux.org.ru

إضافة تعليق