Antrasis kandidatas į libmdbx v1.0 leidimą po penkerių metų kūrimo.

biblioteka libmdbx является существенно переработанным потомком LMDB — предельно высокопроизводительной, компактной встраиваемой базой данных класса ключ-значение.
Текущая версия v0.5 является техническим релизом, отмечает завершение каких-либо доработок и переход к фазе публичного финального тестирования и стабилизации, с последующем формированием первого полноценного релиза библиотеки.

LMDB является достаточно известной транзакционной встраиваемой СУБД класса «ключ-значение» на основе medis B+ be aktyvus medienos ruoša, которая позволяет рою многопоточных процессов конкурентно и предельно эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надежнее LMDB, при этом libmdbx сохраняет все ключевые возможности своего прародителя, такие как RŪGŠTIS и неблокирующее чтение с линейным масштабированием по ядрам CPU, а также добавляет несколько новых.

Описание отличий и усовершенствований libmdbx относительно LMDB заслуживает отдельной статьи (планируется публикации на «Хабре» и «Medium»). Здесь же уместно упомянуть самые важные и заметные:

  • Iš esmės daugiau dėmesio skiriama kodo kokybei, testavimui ir automatinėms patikroms.
  • Žymiai didesnė kontrolė eksploatacijos metu nuo parametrų tikrinimo iki vidinio duomenų bazių struktūrų audito.
  • Automatinis sutankinimas ir automatinis duomenų bazės dydžio valdymas.
  • Vieno duomenų bazės formatas 32 bitų ir 64 bitų rinkiniams.
  • Оценка объема выборок по диапазонам (range query estimation).
  • Du kartus didesnių už blynus raktų ir vartotojo pasirenkamo duomenų bazės puslapio dydžio palaikymas.

Выпущенный релиз-кандидат libmdbx является результатом решения (см далее) о разделении проектов MDBX и MithrilDB в августе 2019. При этом в libmdbx было решено устранить (рациональный) максимум технического долга и стабилизировать библиотеку. По-факту в обозначенном направлении сделано в 2-3 раза больше, чем оценивалось и планировалось исходно:

  • Реализована поддержка Mac OS и платформ «второго эшелона»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Поддержка AIX и HP -UX может быть добавлена при необходимости.
  • Проведена санация кода при помощи Undefined Behavior Sanitizer и Address Sanitizer, устранены все предупреждения при сборке с -Wpedantic, все предупреждения Coverity Static Analyzer и т. д.
  • Atnaujinti API aprašymai.
  • Амальгамация исходного кода для удобства встраивания.
  • CMake palaikymas.
  • Įdėtųjų operacijų palaikymas.
  • Bootid naudojimas norint nustatyti, ar OS buvo paleista iš naujo (nešvarus duomenų bazės sustabdymas).
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • Parinktis MDBX_ACCEDE, skirta prisijungti prie jau atidarytos duomenų bazės suderinamu režimu.
  • Naudoti OFD blokavimas kai bus galima.
  • Karšta atsarginė kopija vamzdyje.
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • Maksimalus rakto ilgis buvo padidintas.
  • Automatinis skaitymo į priekį valdymas (duomenų bazės failų talpyklos atmintyje strategija).
  • Agresyvesnis ir greitesnis automatinis sutankinimas.
  • Optimalesnė B+ medžio puslapių sujungimo strategija.
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • Testų rinkinys buvo išplėstas.

„Kitos“ libmdbx versijos kūrimas bus tęsiamas kaip atskiras projektas MithrilDB, o „dabartinės“ MDBX versijos kūrimo vektorius yra skirtas sustabdyti funkcijų rinkinį ir jį stabilizuoti. Toks sprendimas priimtas dėl trijų priežasčių:

  • Visiškai nesuderinamas: MithrilDB reikalingas kitoks (nesuderinamas) duomenų bazės failo formatas ir kita (nesuderinama) API, kad būtų įdiegtos visos suplanuotos funkcijos.
  • Naujas šaltinio kodas: MithrilDB šaltinio kodas buvo licencijuotas nepriklausomas nuo LMDB, o patį projektą planuojama išleisti pagal kitą licenciją (patvirtinta ARBA JEIGU licencija Apache 2.0Ir ne OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB, kaip ir MDBX, taip pat yra pagrįstas medis B+ ir taip pat pasižymės itin dideliu našumu, pašalindami daugybę esminių MDBX ir LMDB trūkumų. Visų pirma, bus pašalinta „ilgų skaitymų“ problema, kuri pasireiškia duomenų bazės „brinkimu“ dėl to, kad šiukšlių apdorojimas blokuojamas dėl ilgų skaitymo operacijų. Naujos MithrilDB funkcijos apima:

  • поддержка размещения БД на нескольких разнородных носителях: HDD, SSD и энергонезависимой памяти.
  • оптимальные стратегии для «ценных» и «малоценных», для «горячих», «теплых» и «холодных» данных.
  • использование Merkle tree для контроля целостности БД.
  • опциональное использование WAL и существенно более высокая производительно в сценариях с интенсивной записью и гарантиями на целостность данных.
  • ленивая догоняющая фиксация данных на дисках.

Šaltinis: linux.org.ru

Добавить комментарий