انتشار libmdbx 0.13.3 (MDBX) منتشر شده است که یک پایگاه داده کلید-مقدار جاسازی شده فشرده با کارایی بالا را پیاده سازی می کند. کد libmdbx تحت مجوز آپاچی 2.0 توزیع شده است. همه سیستمهای عامل و معماریهای فعلی و همچنین Elbrus 2000 روسی پشتیبانی میشوند. libmdbx یک API توسعهیافته برای C++ و همچنین اتصالات پشتیبانی شده توسط علاقهمندان به زبانهای Rust، Haskell، Python، NodeJS، Ruby، Go، Nim ارائه میکند. ، دنو، اسکالا.
از لحاظ تاریخی، libmdbx یک بازسازی عمیق از LMDB DBMS است و از نظر قابلیت اطمینان، مجموعه ویژگی ها و عملکرد برتر از اجداد خود است. در مقایسه با LMDB، libmdbx تاکید زیادی بر کیفیت کد، پایداری API، تست و بررسی خودکار دارد. ابزاری برای بررسی یکپارچگی ساختار پایگاه داده با برخی از قابلیت های بازیابی ارائه شده است. از نظر فناوری، libmdbx ACID، سریالسازی تغییرات قوی و خواندن غیر مسدودکننده را با مقیاسبندی خطی در هستههای CPU ارائه میدهد. فشرده سازی خودکار، مدیریت خودکار اندازه پایگاه داده، و برآورد محدوده پرس و جو پشتیبانی می شود.
تغییرات اصلی:
- شاخه 0.13.x وضعیت پایدار دریافت کرده است. توسعه شاخه 0.14.x آغاز شده است.
- تابع mdbx_cursor_count_ex() به C API اضافه شده است که به شما امکان می دهد هم تعداد چند مقدار مربوط به کلید فعلی و هم اطلاعات مربوط به درخت تودرتو که این مقادیر را ذخیره می کند را دریافت کنید.
- متد mdbx::txn::make_broken()، مشابه mdbx_txn_break()، به API C++ اضافه شده است.
- ابزارهای mdbx_copy، mdbx_drop، mdbx_dump، mdbx_load، mdbx_stat ثبت خطاها، هشدارها و پیامهای مهم libmdbx را اجرا میکنند.
- تغییر رفتار:
- وقتی پروفایل GC فعال است (با گزینه MDBX_ENABLE_PROFGC=ON ساخته می شود)، زمان CPU صرف شده برای ادغام لیست های صفحه محاسبه می شود، به عنوان مثال. برای اینکه تابع pnl_merge() کار کند.
- در ابزار تست، مقدار حالت داده از data.dups به data.multi تغییر نام داده است.
- کنترل طول کلید در داخل cursor_seek().
- اگر کاربر مقدار واقعی را با استفاده از mdbx_env_set_option (MDBX_opt_txn_dp_limit) مشخص نکند، آنگاه محدودیت صفحات کثیف در شروع هر تراکنش نوشتاری غیر تودرتو، بر اساس مقدار RAM موجود و اندازه پایگاه داده تنظیم می شود.
- در حالت MDBX_NOSTICKYTHREADS، commit/abort تراکنشهای تودرتو از هر رشته/رشته مجاز است.
- هنگام تلاش برای اجرای تراکنشهای تودرتو در حالت MDBX_WRITEAP، ورود به سیستم انجام میشود و خطای MDBX_INCOMPATIBLE برگردانده میشود.
- در C++ API، در سازنده ها/آغاز کننده ها و روش های مربوط به شکل گیری هندسه پایگاه داده، به طور پیش فرض فقط از مقادیر پیش فرض استفاده می شود.
- در داخل mdbx_env_set_geometry()، اکتشافی برای انتخاب پارامترهای هندسه پایگاه داده درخواست شده توسط کاربر "به طور پیش فرض" بهبود یافته است.
- رفع:
- رگرسیون باز نشدن قفل mutex هنگام تلاش برای بستن مجدد توصیفگر dbi، از جمله زمانی که سعی میکنید صریحاً توصیفگر را پس از حذف جدول مرتبط با آن ببندید، رفع شد.
- رگرسیون وضعیت مکان نما تودرتو/دوپسور پس از درج داده در حالت MDBX_APPEND ثابت شد.
- پشتیبانی از به دست آوردن boot_id هنگام کار در یک ظرف LXC.
- مشکل پردازش نادرست تلاش برای شروع تراکنش خواندن تودرتو برطرف شد. خطای MDBX_EINVAL اکنون در این شرایط برگردانده شده است زیرا تودرتو فقط برای تراکنش های خواندن و نوشتن پشتیبانی می شود.
- رگرسیون SIGSEGV دسترسی به آدرس صفر هنگام کار در حالت فقط خواندنی بدون استفاده از فایل LCK حذف شده است، به عنوان مثال، هنگام قرار دادن پایگاه داده در رسانه فقط خواندنی.
منبع: opennet.ru
