Беш жылдык өнүгүүдөн кийин экинчи libmdbx v1.0 релиз талапкери.

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

LMDB является достаточно известной транзакционной встраиваемой СУБД класса «ключ-значение» на основе дарак B+ жок проактивдүү каттоо, которая позволяет рою многопоточных процессов конкурентно и предельно эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надежнее LMDB, при этом libmdbx сохраняет все ключевые возможности своего прародителя, такие как КЫЧКЫЛ и неблокирующее чтение с линейным масштабированием по ядрам CPU, а также добавляет несколько новых.

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

  • Негизинен коддун сапатына, тестирлөөгө жана автоматтык текшерүүлөргө көбүрөөк көңүл бурулат.
  • Параметрлерди текшерүүдөн тартып маалымат базасынын структураларынын ички аудитине чейин иштөө учурунда кыйла көбүрөөк контроль.
  • Автоматтык компактификация жана маалымат базасынын өлчөмүн автоматтык түрдө башкаруу.
  • 32 биттик жана 64 биттик жыйындар үчүн бирдиктүү маалымат базасынын форматы.
  • Оценка объема выборок по диапазонам (range query estimation).
  • Блинден эки эсе чоң ачкычтарды колдоо жана колдонуучу тандай турган маалымат базасынын бетинин өлчөмү.

Выпущенный релиз-кандидат 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 и т. д.
  • Жаңыртуу API сүрөттөмөлөрү.
  • Амальгамация исходного кода для удобства встраивания.
  • CMake колдоо.
  • Уюшкан транзакцияларды колдоо.
  • OS кайра жүктөлгөнүн аныктоо үчүн bootid колдонуу (кирдүү маалымат базасын токтотуу).
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • Шайкеш режимде мурунтан эле ачык маалымат базасына туташуу үчүн MDBX_ACCEDE опциясы.
  • пайдалануунун OFD бөгөттөө жеткиликтүү болгондо.
  • Түтүктө ысык камдык көчүрмө.
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • Ачкычтын максималдуу узундугу көбөйтүлдү.
  • Алдыда окууну автоматтык түрдө башкаруу (эстутумдагы маалымат базасын кэштөө стратегиясы).
  • Агрессивдүү жана тезирээк авто-компактификация.
  • B+ дарак беттерин бириктирүү үчүн оптималдуу стратегия.
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • Сыноолордун комплекси кеңейтилди.

libmdbxтин "кийинки" версиясын иштеп чыгуу өзүнчө долбоор катары уланат MithrilDB, ал эми MDBXтин "учурдагы" версиясын өнүктүрүү вектору функциялар топтомун тоңдурууга жана аны турукташтырууга багытталган. Бул чечим үч себеп менен кабыл алынган:

  • Толугу менен шайкеш келбейт: MithrilDB бардык пландаштырылган функцияларды ишке ашыруу үчүн башка (иликсиз) маалымат базасынын файл форматын жана башка (иликсиз) API талап кылат.
  • Жаңы булак коду: MithrilDB булак коду LMDBден көз карандысыз лицензияланган жана долбоордун өзү башка лицензия боюнча жарыялоо пландаштырылууда (бекитилген ЖЕ ЭГЕР лицензия Apache 2.0Ал эмес, OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB, MDBX сыяктуу, ошондой эле негизделген дарак B+ жана ошондой эле MDBX жана LMDBнин бир катар негизги кемчиликтерин жоюу менен бирге өтө жогорку көрсөткүчтөргө ээ болот. Тактап айтканда, таштандыларды иштетүү узак окуу транзакциялары менен бөгөттөлгөндүктөн, маалымат базасынын «шишигин» көрсөткөн «узак окуу» көйгөйү жоюлат. Жаңы MithrilDB өзгөчөлүктөрү төмөнкүлөрдү камтыйт:

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

Source: linux.org.ru

Комментарий кошуу