پس از پنج سال توسعه، دومین نامزد انتشار libmdbx 1.0 منتشر شد

در دسترس برای آزمایش دومین کاندید برای انتشارات کتابخانه libmdbx با اجرای یک پایگاه داده کلید-مقدار جاسازی شده با کارایی بالا و فشرده. نسخه فعلی (0.5) یک نسخه فنی است، نشان دهنده تکمیل هر گونه پیشرفت و انتقال به مرحله آزمایش نهایی عمومی و تثبیت، با تشکیل بعدی اولین نسخه کامل کتابخانه است. کد libmdbx توزیع شده توسط تحت مجوز عمومی OpenLDAP.

کتابخانه MDBX یک فورک اصلاح شده قابل توجه است LMDB - DBMS جاسازی شده تراکنشی از کلاس «کلید-مقدار» بر اساس درخت B+ بدون ثبت پیشگیرانه، که به فرآیندهای چند رشته ای اجازه می دهد تا به طور رقابتی و کارآمد با پایگاه داده به اشتراک گذاشته شده (نه شبکه) محلی کار کنند. به نوبه خود، MDBX سریعتر و قابل اعتمادتر از LMDB است و در عین حال تمام ویژگی های کلیدی اجداد خود را حفظ می کند، مانند ACID و خواندن غیر مسدود با مقیاس خطی در سراسر هسته های CPU.

مهمترین تفاوت های MDBX و LMDB:

  • اساساً توجه بیشتری به کیفیت کد، آزمایش و بررسی خودکار می شود.
  • کنترل قابل توجهی بیشتر در طول عملیات، از بررسی پارامترها تا ممیزی داخلی ساختارهای پایگاه داده.
  • فشرده سازی خودکار و مدیریت خودکار اندازه پایگاه داده.
  • یک قالب پایگاه داده واحد برای مجموعه های 32 بیتی و 64 بیتی.
  • برآورد حجم نمونه بر اساس محدوده (تخمین محدوده پرس و جو).
  • پشتیبانی از کلیدهای دو برابر بزرگتر از پنکیک و اندازه صفحه پایگاه داده قابل انتخاب توسط کاربر.

نامزد انتشار libmdbx نتیجه تصمیمی است که در آگوست 2019 برای جداسازی پروژه‌های MDBX و MithrilDB اتخاذ شد. در همان زمان، libmdbx تصمیم گرفت حداکثر بدهی فنی (عقلانی) را حذف کند و کتابخانه را تثبیت کند. در واقع، 2-3 برابر بیشتر از آنچه در ابتدا برآورد و برنامه ریزی شده بود، در جهت تعیین شده انجام شده است:

  • پشتیبانی از macOS و پلتفرم های سطح دوم اجرا شده است: FreeBSD، Solaris، DragonFly BSD، OpenBSD، NetBSD. پشتیبانی AIX و HP-UX را می توان در صورت نیاز اضافه کرد.
  • کد با استفاده از ضدعفونی کننده رفتار نامشخص و ضد عفونی کننده آدرس پاکسازی شد، همه هشدارها هنگام ساخت با "-Wpedantic"، همه هشدارهای Coverity Static Analyzer و غیره حذف شدند.
  • به روز رسانی توضیحات API.
  • ادغام (ادغام) کد منبع برای سهولت جاسازی.
  • پشتیبانی از CMake
  • پشتیبانی از تراکنش های تو در تو
  • استفاده از bootid برای تعیین اینکه آیا سیستم عامل راه اندازی مجدد شده است (پایگاه داده کثیف توقف).
  • شمارش انتها به انتها صفحات به روز/قدیمی و اطلاعات تراکنش گسترده.
  • گزینه MDBX_ACCEDE برای اتصال به یک پایگاه داده از قبل باز در حالت سازگار.
  • استفاده مسدود کردن OFD زمانی که در دسترس است.
  • پشتیبان گیری داغ در لوله.
  • الگوریتم مرتب‌سازی داخلی بهینه‌سازی شده تخصصی (حداکثر ۲ تا ۳ برابر سریع‌تر از "qsort()" و تا ۳۰٪ سریع‌تر از "std::sort()").
  • حداکثر طول کلید افزایش یافته است.
  • کنترل خودکار خواندن پیش رو (استراتژی ذخیره فایل های پایگاه داده در حافظه).
  • فشرده سازی خودکار تهاجمی تر و سریع تر.
  • یک استراتژی بهینه تر برای ادغام صفحات درختی B+.
  • کنترل سیستم های فایل غیر محلی (NFS، Samba و غیره) برای جلوگیری از آسیب دیدن پایگاه داده در صورت استفاده نادرست.
  • مجموعه تست ها گسترش یافته است.

توسعه نسخه "بعدی" libmdbx به عنوان یک پروژه جداگانه ادامه خواهد یافت MithrilDB، در حالی که بردار توسعه نسخه "جاری" MDBX با هدف منجمد کردن مجموعه ویژگی ها و تثبیت آن است. این تصمیم به سه دلیل گرفته شده است:

  • کاملاً ناسازگار: MithrilDB به فرمت فایل پایگاه داده متفاوت (ناسازگار) و API متفاوت (ناسازگار) برای پیاده سازی همه ویژگی های برنامه ریزی شده نیاز دارد.
  • کد منبع جدید: کد منبع MithrilDB دارای مجوز مستقل از LMDB شده است و خود پروژه قرار است تحت مجوز دیگری منتشر شود (مورد تایید یا اگر مجوز آپاچی 2.0، نه مجوز عمومی OpenLDAP).
  • جداسازی از سردرگمی احتمالی جلوگیری می کند، اطمینان بیشتری را معرفی می کند و مسیر مستقلی را برای پروژه ها تضمین می کند.

MithrilDB، مانند MDBX، نیز بر اساس درخت B+ و همچنین دارای عملکرد بسیار بالایی خواهد بود، در حالی که تعدادی از معایب اساسی MDBX و LMDB را از بین می برد. به طور خاص، مشکل "خواندن طولانی" که خود را به عنوان "تورم" پایگاه داده نشان می دهد به دلیل اینکه پردازش زباله توسط تراکنش های خواندن طولانی مسدود می شود، حذف خواهد شد. ویژگی های جدید MithrilDB عبارتند از:

  • پشتیبانی از قرار دادن پایگاه داده در چندین رسانه ناهمگن: HDD، SSD و حافظه غیر فرار.
  • استراتژی های بهینه برای داده های "با ارزش" و "کم ارزش"، برای داده های "گرم"، "گرم" و "سرد".
  • استفاده از درخت Merkle برای نظارت بر یکپارچگی پایگاه داده.
  • استفاده اختیاری از WAL و بهبود قابل توجه عملکرد در سناریوهای فشرده نوشتن با تضمین یکپارچگی داده ها.
  • تسلیم کردن داده‌ها به دیسک‌ها.

منبع: opennet.ru

اضافه کردن نظر