A doua versiune candidată libmdbx v1.0 după cinci ani de dezvoltare.

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

LMDB является достаточно известной транзакционной встраиваемой СУБД класса «ключ-значение» на основе arborele B+ fără înregistrare proactivă, которая позволяет рою многопоточных процессов конкурентно и предельно эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надежнее LMDB, при этом libmdbx сохраняет все ключевые возможности своего прародителя, такие как ACID и неблокирующее чтение с линейным масштабированием по ядрам CPU, а также добавляет несколько новых.

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

  • În mod fundamental, se acordă mai multă atenție calității codului, testării și verificărilor automate.
  • Control semnificativ mai mare în timpul funcționării, de la verificarea parametrilor până la auditul intern al structurilor bazei de date.
  • Auto-compactare și gestionarea automată a dimensiunii bazei de date.
  • Un singur format de bază de date pentru ansambluri pe 32 și 64 de biți.
  • Оценка объема выборок по диапазонам (range query estimation).
  • Suport pentru chei de două ori mai mari decât clătitele și dimensiunea paginii de bază de date selectabilă de utilizator.

Выпущенный релиз-кандидат 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 и т. д.
  • Actualizați Descrieri API.
  • Амальгамация исходного кода для удобства встраивания.
  • Asistență CMake.
  • Suport pentru tranzacții imbricate.
  • Folosind bootid pentru a determina dacă sistemul de operare a repornit (oprire a bazei de date murdare).
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • Opțiunea MDBX_ACCEDE pentru conectarea la o bază de date deja deschisă în modul compatibil.
  • Folosi Blocarea OFD atunci când sunt disponibile.
  • Rezervă fierbinte în conductă.
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • Lungimea maximă a cheii a fost mărită.
  • Control automat al citirii în avans (strategia de stocare în cache a fișierelor baze de date în memorie).
  • Auto-compactare mai agresivă și mai rapidă.
  • O strategie mai optimă pentru îmbinarea paginilor arborescente B+.
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • Setul de teste a fost extins.

Dezvoltarea versiunii „următoare” a libmdbx va continua ca proiect separat MithrilDB, în timp ce vectorul de dezvoltare al versiunii „actuale” a MDBX are ca scop înghețarea setului de caracteristici și stabilizarea acestuia. Această decizie a fost luată din trei motive:

  • Total incompatibil: MithrilDB necesită un format de fișier de bază de date diferit (incompatibil) și un alt API (incompatibil) pentru a implementa toate caracteristicile planificate.
  • Cod sursă nou: Codul sursă MithrilDB a fost licențiat independent de LMDB, iar proiectul în sine este planificat să fie publicat sub o licență diferită (aprobată de OSI licență Apache 2.0Și nu OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB, ca și MDBX, se bazează și pe arborele B+ și va prezenta, de asemenea, performanțe extrem de ridicate, eliminând în același timp o serie de dezavantaje fundamentale ale MDBX și LMDB. În special, va fi eliminată problema „citurilor lungi”, care se manifestă ca „umflarea” bazei de date datorită faptului că procesarea gunoiului este blocată de tranzacțiile de citire lungă. Noile caracteristici MithrilDB includ:

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

Sursa: linux.org.ru

Adauga un comentariu