Пускане на високопроизводителна вградена СУБД libmdbx 0.10

След три месеца разработка, беше пусната libmdbx 0.10.0 (MDBX), която внедрява високоефективна, компактна вградена база данни ключ-стойност. Кодът на libmdbx е лицензиран под публичния лиценз OpenLDAP. libmdbx е дълбока преработка на LMDB DBMS и, според разработчиците, превъзхожда своя предшественик по надеждност, набор от възможности и производителност. Твърди се, че libmdbx е до 20% по-бърз от LMDB в CRUD сценарии и до 30% по-бърз, ако вътрешните контроли са деактивирани при изграждане на libmdbx до ниво, сравнимо с LMDB.

Libmdbx предлага ACID, силна сериализация на промените и неблокиращи четения, които се мащабират линейно в ядрата на процесора. В libmdbx се обръща много внимание на качеството на кода, стабилната работа на API, тестването и автоматичните проверки. Поддържа автоматично уплътняване, автоматично управление на размера на базата данни, единичен формат на база данни за 32-битови и 64-битови сборки и оценка на заявка за диапазон. Доставя се помощна програма за проверка на целостта на структурата на базата данни с някои възможности за възстановяване. От 2016 г. проектът се финансира от Positive Technologies и се използва в нейните продукти от 2017 г., а санкциите, наложени от правителството на САЩ срещу Positive Technologies, нямат забележимо въздействие.

Основни нововъведения, подобрения и поправки, добавени след последната версия:

  • Налични са обвързване на Ruby от Mahlon E. Smith и пробна версия на обвързвания на Python от Noel Kuntze, а обвързванията GoLang от Alexey Sharov са актуализирани.
  • За режима „MDBX_WRIITEMAP“, когато данните от базата данни се променят директно в RAM, се реализира „прозрачно разливане“ на променени страници от база данни на диск. Сега, след завършване на всяка операция, такива страници веднага са напълно готови за запис на диск и ядрото на операционната система може независимо да изтрие променените страници на диска и извършването на транзакция няма да изисква тяхната модификация. В резултат на това при натоварени сценарии с недостатъчна RAM памет обемът на дисковите операции може да бъде намален до 2 пъти.
  • Внедрено изгонване на отдавна неизползвани копия в сянка на модифицирани страници, с предпочитание за изгонване на страници с големи/дълги стойности, които в по-голямата част от сценариите се променят само веднъж на транзакция. Резултатът е намален дисков трафик и подобрена производителност в сценарии с много големи транзакции.
  • Въведен е „интелигентен“ режим за разделяне на страници при вмъкване на ключове. Сега, когато вмъквате подредени последователности, страниците автоматично се запълват напълно, а в други случаи дървото е по-оптимално балансирано. В резултат на това средно страниците на базата данни се запълват по-оптимално и B-дървото е по-балансирано, което има положителен ефект върху производителността.
  • Добавена е статистика за операциите със страници, което ви позволява точно да оцените разходите за промяна на операциите с базата данни.
  • Отстранени са повече от дузина бъгове и грешки, включително: проблеми при изграждане с помощта на MinGW, използване на `std::filesystem::path` в iOS <= 13.0, изграждане, насочено към по-стари версии на Windows и др.
  • Общо бяха направени повече от 200 промени в 66 файла, ~6500 реда бяха добавени, ~4500 бяха изтрити.

Отделно бих искал да отбележа избора на проекта Turbo-Geth (турбо разклонение на Go-Ethereum) libmdbx като нов бекенд за съхранение и също така благодаря на екипа на проекта (особено Алексей Шаров, Артьом Воротников и Алексей Ахунов) за техните голяма помощ при тестване в екстремни сценарии на употреба. По-специално беше открит и отстранен дефект в контрола за предварително четене/кеширане, което доведе до влошаване на производителността при трудни за възпроизвеждане сценарии с големи бази данни.

Източник: opennet.ru

Добавяне на нов коментар