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

متاح لاختبار المرشح الثاني لإصدارات المكتبة libmdbx من خلال تنفيذ قاعدة بيانات ذات قيمة أساسية مدمجة عالية الأداء. الإصدار الحالي (0.5) هو إصدار تقني، ويمثل اكتمال أي تحسينات والانتقال إلى مرحلة الاختبار النهائي العام والتثبيت، مع التشكيل اللاحق للإصدار الكامل الأول للمكتبة. كود ليبمدكس وزعت من خلال مرخص بموجب ترخيص OpenLDAP العام.

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

أهم الاختلافات بين MDBX وLMDB:

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

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

  • تم تقديم الدعم لنظام التشغيل macOS ومنصات الطبقة الثانية: 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 وتحسين الأداء بشكل ملحوظ في سيناريوهات الكتابة المكثفة مع ضمانات تكامل البيانات.
  • اللحاق البطيء بإرسال البيانات إلى الأقراص.

المصدر: opennet.ru

إضافة تعليق