libmdbx هي قاعدة بيانات قيمة للمعاملات سريعة للغاية ومضغوطة وقوية ومتكاملة ومرخصة بشكل مسموح به.
ال إصدار النسخة الجديدة من libmdbx 0.12.3 (MDBX) تنفيذ لقاعدة بيانات مدمجة ذات قيمة مفتاح عالية الأداء.
libmdbx هو إعادة صياغة عميقة لنظام LMDB DBMS وتفوق سابقتها من حيث الموثوقية ، مجموعة الميزات والأداء. مقارنة بـ LMDB ، يركز libmdbx كثيرًا على جودة الكود واستقرار واجهة برمجة التطبيقات والاختبار والفحوصات الذاتية.
الميزات الرئيسية الجديدة لـ libmdbx 0.12.3
في هذا الإصدار الجديد يمكننا أن نجد ذلك نفذت خيارًا ديناميكيًا بين الكتابة المتزامنة على القرص والكتابة عادي متبوعًا بـ fdatasync () ، يتحكم فيه الخيار MDBX_opt_writethrough_threshold. في أوضاع التحمل ، يمكن مسح البيانات إلى القرص بطريقتين: الكتابة عبر واصف ملف مفتوح باستخدام O_DSYNC ، والكتابة العادية متبوعة بـ fdatasync ().
الطريقة الأولى يكون أكثر ملاءمة عند كتابة عدد صغير من الصفحات و / أو إذا كانت قناة الاتصال مع القرص / الوسائط بها تأخير قريب من الصفر. الطريقة الثانية مناسبة إذا كنت بحاجة إلى كتابة الكثير من الصفحات و / أو إذا كانت قناة التفاعل بها تأخير كبير (مراكز البيانات ، السحب). يسمح لك خيار MDBX_opt_writethrough_threshold المضاف بتعيين حد في وقت التشغيل لتحديد طريقة الكتابة ديناميكيًا بناءً على الحجم وظروف الاستخدام المحددة.
التغيير الآخر الذي يبرز هو ذلك أضاف خيار تجميع MDBX_MMAP_USE_MS_ASYNC والذي يسمح لك بتعطيل استخدام استدعاء نظام msync (MS_ASYNC) ، وهو أمر غير ضروري في الغالبية العظمى من أنظمة التشغيل الحالية.
بالإضافة إلى أنه تم تعيينه افتراضيًا إلى MDBX_MMAP_USE_MS_ASYNC = 0(ديزاكتيفادو) على Linux والأنظمة الأخرى ذات ذاكرة التخزين المؤقت الموحدة للصفحة. يتوافق هذا السلوك (بدون استخدام msync (MS_ASYNC)) مع منطق LMDB ذي الترميز الثابت. نتيجة لذلك ، في المعايير البسيطة / الساذجة ، يتفوق libmdbx على LMDB بنفس الطريقة كما في الاستخدام الفعلي.
فقط في هذه الحالة ، من الجدير بالذكر / تذكر مرة أخرى أنه في نظام التشغيل Windows ، من المتوقع أن يتخلف libmdbx عن LMDB في السيناريوهات التي تحتوي على العديد من المعاملات الصغيرة ، حيث يستخدم libmdbx بشكل متعمد أقفال الملفات على Windows ، والتي تكون بطيئة (سيئة التنفيذ). نظام التشغيل) ، ولكنه يسمح لك بحماية المستخدمين من العدد الكبير من الإجراءات الخاطئة التي تؤدي إلى تلف قاعدة البيانات.
في وضع تخصيص / إعادة استخدام MDBX_WRITEMAP ، تولد الصفحات خطأ في الصفحة وتتم قراءة الصفحة من القرص ، حتى إذا لم يكن محتوى الصفحة مطلوبًا (سيتم الكتابة فوقه). هذا نتيجة لعمل النظام الفرعي للذاكرة الظاهرية ، ولا تعمل طريقة MADV_REMOVE العادية في جميع أنظمة الملفات وغالبًا ما تكون أكثر تكلفة من المدخرات الناتجة.
بالإضافة إلى ذلك ، تجدر الإشارة أيضًا إلى ذلك يستخدم libmdbx الآن "الكتابة مسبقًا" لمثل هذه الصفحات، والتي في الأنظمة ذات ذاكرة التخزين المؤقت الموحدة للصفحة تؤدي إلى "دفع" البيانات ، مما يلغي الحاجة إلى القراءة من القرص عند الوصول إلى تلك الصفحة من الذاكرة. تعمل الوظيفة الجديدة جنبًا إلى جنب مع المعالجة التلقائية لذاكرة التخزين المؤقت للقراءة المسبقة وحالة حضور الصفحة في ذاكرة الوصول العشوائي ، عبر mincore ().
يذكر أيضًا أنه تم تنفيذ الكتابة قبل الفشل عند تخصيص الصفحات لتخصيصات القراءة والكتابة. وهذا يؤدي إلى تخفيضات متعددة في تكاليف النظام وزيادة كبيرة في الأداء في حالات الاستخدام ذات الصلة ، عندما يكون حجم قاعدة البيانات وكمية البيانات أكبر بكثير من ذاكرة الوصول العشوائي ؛ يتم استخدام وضع MDBX_WRITEMAP ؛ المعاملات غير الصغيرة (يتم تخصيص عدة مئات أو آلاف الصفحات في سياق المعاملة).
من التغييرات الأخرى التي تبرز:
- التحكم الإضافي في عدم وجود ملفات LCK بأسماء بديلة.
- دعم محسّن للدمج التلقائي لسجلات GC داخل page_alloc_slowpath ().
- اشتملت على مؤشر واحد للبحث في GC. العلامات الداخلية المعدلة المتعلقة باستدعاء GC.
- إعداد محسّن للحجز قبل تحديث GC مع تمكين BigFoot.
- تحسين استخدام pnl_merge () لحالات القوائم المدمجة غير المتداخلة.
- دعم محسن لقائمة مرتبة من الصفحات في dpl_append ().
- تحسين أداء mdbx_chk عند معالجة إدخال المستخدم علىMAIN.
- علامات LRU المعدلة
- إعادة تصميم وحدة تحكم "عدم تناسق" ذاكرة التخزين المؤقت للصفحة الموحدة لتقليل الحمل.
- قدم التثبيت التلقائي MDBX_opt_rp_augment_limit اعتمادًا على حجم قاعدة البيانات.
- تمت إضافة خيار MDBX_opt_prefault_write_enable لفرض تمكين / تعطيل الكتابة قبل الخطأ.
- دعم إضافي للأسماء غير القابلة للطباعة لـ subDb.
تمت إضافة خيار tls_model صريح ("ديناميكي محلي") لإصلاح "إعادة تحديد موقع R_X86_64_TPOFF32 ضد FOO لا يمكن استخدامه مع مشكلة -shared" بسبب خطأ في Clang تسبب في استخدام وضع ls_model الخاطئ.
وأخيرا، إذا كنت مهتمًا بمعرفة المزيد عنها، يمكنك التحقق من التفاصيل في الرابط التالي.