Segon candidat a la versió libmdbx v1.0 després de cinc anys de desenvolupament.

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

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

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

  • Bàsicament, es presta més atenció a la qualitat del codi, les proves i les comprovacions automàtiques.
  • Molt més control durant el funcionament, des de la comprovació de paràmetres fins a l'auditoria interna de les estructures de bases de dades.
  • Compactació automàtica i gestió automàtica de la mida de la base de dades.
  • Un únic format de base de dades per a conjunts de 32 i 64 bits.
  • Оценка объема выборок по диапазонам (range query estimation).
  • Suport per a tecles el doble de grans que les creps i mida de pàgina de base de dades seleccionable per l'usuari.

Выпущенный релиз-кандидат 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 и т. д.
  • Actualització Descripcions de l'API.
  • Амальгамация исходного кода для удобства встраивания.
  • Suport CMake.
  • Suport per a transaccions imbricades.
  • S'utilitza bootid per determinar si el sistema operatiu s'ha reiniciat (aturada de base de dades bruta).
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • Opció MDBX_ACCEDE per connectar-se a una base de dades ja oberta en mode compatible.
  • Utilitzar Bloqueig OFD quan estigui disponible.
  • Còpia de seguretat en calent a la canonada.
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • S'ha augmentat la longitud màxima de la clau.
  • Control automàtic de lectura anticipada (estratègia d'emmagatzematge en memòria cau de fitxers de base de dades a la memòria).
  • Compactació automàtica més agressiva i ràpida.
  • Una estratègia més òptima per combinar pàgines d'arbre B+.
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • S'ha ampliat el conjunt de proves.

El desenvolupament de la "següent" versió de libmdbx continuarà com un projecte independent MithrilDB, mentre que el vector de desenvolupament de la versió "actual" de MDBX té com a objectiu congelar el conjunt de funcions i estabilitzar-lo. Aquesta decisió es va prendre per tres motius:

  • Totalment incompatible: MithrilDB requereix un format de fitxer de base de dades diferent (incompatible) i una API diferent (incompatible) per implementar totes les funcions planificades.
  • Nou codi font: el codi font de MithrilDB s'ha fet independent de LMDB, i es preveu que el projecte en si es publiqui amb una llicència diferent (aprovada per TAMBÉ llicència Apache 2.0I no OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB, com MDBX, també es basa en arbre B+ i també comptarà amb un rendiment extremadament alt, alhora que eliminarà una sèrie d'inconvenients fonamentals de MDBX i LMDB. En particular, s'eliminarà el problema de les "lectures llargues", que es manifesta com una "inflor" de la base de dades a causa del fet que el processament d'escombraries està bloquejat per transaccions de lectura llarga. Les noves característiques de MithrilDB inclouen:

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

Font: linux.org.ru

Afegeix comentari