دومین نامزد انتشار libmdbx v1.0 پس از پنج سال توسعه.

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

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

شرح تفاوت‌ها و پیشرفت‌های libmdbx نسبت به LMDB شایسته مقاله جداگانه‌ای است (برنامه‌ریزی شده برای انتشار در Habré و Medium). در اینجا مناسب است به مهمترین و قابل توجه ترین آنها اشاره شود:

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

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

  • پشتیبانی از سیستم عامل مک و پلتفرم های سطح دوم اجرا شده است: FreeBSD، Solaris، DragonFly BSD، OpenBSD، NetBSD. پشتیبانی AIX و HP-UX را می توان در صورت نیاز اضافه کرد.
  • کد با استفاده از Undefined Behavior Sanitizer و Address Sanitizer پاکسازی شد، همه هشدارها هنگام ساخت با -Wpedantic، همه هشدارهای Coverity Static Analyzer و غیره حذف شدند.
  • به روز رسانی توضیحات API.
  • ادغام کد منبع برای سهولت در جاسازی.
  • پشتیبانی از CMake
  • پشتیبانی از تراکنش های تو در تو
  • استفاده از bootid برای تعیین اینکه آیا سیستم عامل راه اندازی مجدد شده است (پایگاه داده کثیف توقف).
  • شمارش انتها به انتها صفحات به روز/قدیمی و اطلاعات تراکنش گسترده.
  • گزینه MDBX_ACCEDE برای اتصال به یک پایگاه داده از قبل باز در حالت سازگار.
  • استفاده مسدود کردن OFD زمانی که در دسترس است.
  • پشتیبان گیری داغ در لوله.
  • الگوریتم مرتب سازی داخلی بهینه شده تخصصی (حداکثر 2-3 برابر سریعتر از qsort() و تا 30٪ سریعتر از 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 و عملکرد بسیار بالاتر در سناریوهای فشرده و تضمین یکپارچگی داده ها.
  • تثبیت تنبلی داده ها روی دیسک ها.

منبع: linux.org.ru

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