انتشار DBMS جاسازی شده با کارایی بالا libmdbx 0.10.4 و libfpta 0.3.9

کتابخانه‌های libmdbx 0.10.4 (MDBX) با پیاده‌سازی یک پایگاه داده فشرده و فشرده با ارزش کلیدی با کارایی بالا و کتابخانه مرتبط libfpta 0.3.9 (FPTA) منتشر شدند که نمایش جدولی داده‌ها را با نمایه‌های ثانویه و ترکیبی پیاده‌سازی می‌کند. در بالای MDBX. هر دو کتابخانه تحت مجوزهای تایید شده OSI توزیع می شوند. تمام سیستم عامل ها و معماری های فعلی و همچنین Elbrus 2000 روسی پشتیبانی می شوند.

از لحاظ تاریخی، libmdbx یک بازسازی عمیق از LMDB DBMS است و از نظر قابلیت اطمینان، مجموعه ویژگی ها و عملکرد برتر از اجداد خود است. در مقایسه با LMDB، libmdbx تاکید زیادی بر کیفیت کد، پایداری API، تست و بررسی خودکار دارد. ابزاری برای بررسی یکپارچگی ساختار پایگاه داده با برخی از قابلیت های بازیابی ارائه شده است.

از نظر فناوری، libmdbx ACID، سریال‌سازی تغییرات قوی و خواندن غیر مسدودکننده را با مقیاس‌بندی خطی در هسته‌های CPU ارائه می‌دهد. فشرده سازی خودکار، مدیریت خودکار اندازه پایگاه داده، و برآورد محدوده پرس و جو پشتیبانی می شود. از سال 2016، پروژه ها توسط Positive Technologies تامین مالی شده و از سال 2017 در محصولات آن استفاده شده است.

libmdbx یک API ++C و همچنین اتصالات زبانی با پشتیبانی علاقه مندان را برای Rust، Haskell، Python، NodeJS، Ruby، Go و Nim ارائه می دهد. برای libfpta، فقط توضیحات API در قالب یک فایل هدر C/C++ در دسترس عموم است.

نوآوری ها، بهبودها و اصلاحات عمده اضافه شده از اخبار قبلی در 9 می:

  • ساخت های قابل تکرار را فعال می کند.
  • رفع اشکالی که به دلیل آن، در شرایط بسیار نادر، ممکن است در حین انجام یک تراکنش، یک حلقه/تجمع رخ دهد. این مشکل توسط متخصصان Positive Tecnologies در طول آزمایش داخلی محصولات خود شناسایی شد.
  • آزمایش‌ها بهبود یافته‌اند و سناریوهای آزمایشی برای بررسی همه حالت‌های غیر هم‌شکل قابل دسترس درخت صفحه و محتویات GC در داخل پایگاه داده گسترش یافته‌اند.
  • در C++ API، یک "noexcept" اضافی ثابت شده است، اضافه بارهای اضافی برای روش "cursor::erase()" اضافه شده است، اجرای بافرها از استفاده از "std::string" برای اطمینان از همسویی صرف نظر شده است. (مرتبط با CLANG libstdc++).
  • یک رگرسیون در الگوریتم ریختن صفحه کثیف (خروج انتخابی صفحات پایگاه داده تغییر یافته) که با یک خطای غیرمنتظره نادر MDBX_PROBLEM هنگام تغییر داده ها در تراکنش های بزرگ نشان داده شد، حذف شده است.
  • یک آزمایش مرحله‌بندی با افزودن تعدادی بررسی برای اطمینان از پایداری در صورت آسیب عمدی به پایگاه داده انجام شد.
  • رفع مشکلات جزئی UndefinedBehaviorSanitizer و Coverity Scan.
  • بررسی پرچم داخلی قدیمی "P_DIRTY" در صفحات تو در تو در داخل تصاویر پایگاه داده ایجاد شده توسط نسخه های قدیمی کتابخانه رفع شد.
  • در اسکریپت های CMake، جستجوی اجزای کامپایلر مورد نیاز برای LTO (بهینه سازی زمان پیوند) بهبود یافته است.
  • حداکثر تعداد خوانندگان همزمان به 32767 افزایش یافته است.
  • عملکرد بهبود یافته هنگام استفاده از Valgrind و AddressSanitizer.
  • در ویندوز، استفاده بازگشتی از SRW-lock هنگام کار در حالت MDBX_NOTLS (بدون استفاده از حافظه محلی رشته) حذف شده است، در صورت تغییر زمان سیستم، تولید بوتید رفع شده است، تشخیص WSL1 و WSL2 بهبود یافته است، و توانایی باز کردن یک پایگاه داده در Plan 9 که از طریق DrvFS نصب شده است اضافه شده است.
  • در مجموع، بیش از 160 تغییر در 57 فایل ایجاد شد، ~ 5000 خط اضافه شد، ~ 2500 خط حذف شد.

مایلم به ویژه از تیم پروژه Erigon (اکوسیستم اتریوم) برای کمک آنها در آزمایش در سناریوهای استفاده شدید تشکر کنم. قابل توجه است که طی پنج ماه پس از انتشار libmdbx v0.10.0، با حجم پایگاه داده 1 تا 2 ترابایت در هر نصب Erigon (استفاده شده در 7٪ از گره های اتریوم)، تنها سه گزارش از خرابی پایگاه داده دریافت شد، همه موارد که به دلایل خارجی رخ داده است و نه خطاهای نرم افزاری: در دو مورد علت خرابی RAM بود، در مورد سوم خطا در تنظیم مجدد داده ها در یک پیکربندی خاص از زیر سیستم ذخیره سازی با استفاده از BTRFS.

منبع: opennet.ru

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