إصدار نظام إدارة قواعد البيانات المدمج عالي الأداء libmdbx 0.10

بعد ثلاثة أشهر من التطوير، تم إصدار libmdbx 0.10.0 (MDBX)، لتطبيق قاعدة بيانات مدمجة عالية الأداء ومدمجة ذات قيمة رئيسية. تم ترخيص كود libmdbx بموجب ترخيص OpenLDAP العام. يعد libmdbx بمثابة إعادة صياغة عميقة لنظام إدارة قواعد البيانات LMDB، ووفقًا للمطورين، فهو يتفوق على سلفه من حيث الموثوقية ونطاق الإمكانات والأداء. يُذكر أن libmdbx أسرع بنسبة تصل إلى 20% من LMDB في سيناريوهات CRUD وأسرع بنسبة تصل إلى 30% إذا تم تعطيل الضوابط الداخلية عند إنشاء libmdbx إلى مستوى مشابه لـ LMDB.

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

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

  • يتوفر ربط Ruby بواسطة Mahlon E. Smith وإصدار تجريبي من روابط Python بواسطة Noel Kuntze، كما تم تحديث روابط GoLang بواسطة Alexey Sharov.
  • بالنسبة لوضع "MDBX_WRITEMAP"، عندما يتم تغيير بيانات قاعدة البيانات مباشرة في ذاكرة الوصول العشوائي (RAM)، يتم تنفيذ "انسكاب شفاف" لصفحات قاعدة البيانات التي تم تغييرها إلى القرص. الآن، بعد الانتهاء من كل عملية، تصبح هذه الصفحات جاهزة تمامًا للكتابة على القرص ويمكن لنظام التشغيل kernel مسح الصفحات التي تم تغييرها على القرص بشكل مستقل، ولن يتطلب تنفيذ المعاملة تعديلها. ونتيجة لذلك، في السيناريوهات المزدحمة التي تحتوي على ذاكرة وصول عشوائي غير كافية، يمكن تقليل حجم عمليات القرص بما يصل إلى مرتين.
  • تم تنفيذ إزالة النسخ الاحتياطية غير المستخدمة لفترة طويلة من الصفحات المعدلة، مع تفضيل إزالة الصفحات ذات القيم الكبيرة/الطويلة، والتي يتم تعديلها في الغالبية العظمى من السيناريوهات مرة واحدة فقط لكل معاملة. والنتيجة هي تقليل حركة مرور القرص وتحسين الأداء في السيناريوهات ذات المعاملات الكبيرة جدًا.
  • تم تنفيذ الوضع "الذكي" لتقسيم الصفحات عند إدخال المفاتيح. الآن، عند إدراج تسلسلات مرتبة، يتم ملء الصفحات تلقائيًا بالكامل، وفي حالات أخرى، تكون الشجرة متوازنة بشكل أفضل. ونتيجة لذلك، في المتوسط، يتم ملء صفحات قاعدة البيانات بشكل أفضل وتكون شجرة B أكثر توازناً، مما له تأثير إيجابي على الأداء.
  • تمت إضافة إحصائيات العمليات مع الصفحات، مما يسمح لك بتقدير تكلفة تعديل العمليات مع قاعدة البيانات بدقة.
  • تم إصلاح أكثر من عشرة أخطاء وأخطاء، بما في ذلك: مشاكل البناء باستخدام MinGW، واستخدام `std::filesystem::path` في iOS <= 13.0، والبناء الذي يستهدف الإصدارات الأقدم من Windows، وما إلى ذلك.
  • في المجمل، تم إجراء أكثر من 200 تغييرًا على 66 ملفًا، وتمت إضافة 6500 سطر تقريبًا، وتم حذف 4500 سطر تقريبًا.

بشكل منفصل، أود أن أشير إلى اختيار مشروع Turbo-Geth (شوكة توربو لـ Go-Ethereum) libmdbx كواجهة خلفية جديدة للتخزين، وأشكر أيضًا فريق المشروع (خاصة Alexey Sharov وArtyom Vorotnikov وAlexey Akhunov) على جهودهم مساعدة كبيرة في الاختبار في سيناريوهات حالة الاستخدام القصوى. على وجه الخصوص، تم اكتشاف خلل في التحكم في القراءة المسبقة/التخزين المؤقت وإزالته، مما أدى إلى انخفاض الأداء في السيناريوهات التي يصعب إعادة إنتاجها مع قواعد البيانات الكبيرة.

المصدر: opennet.ru

إضافة تعليق