經過五年的開發,第二個 libmdbx v1.0 候選版本。

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

LM資料庫 является достаточно известной транзакционной встраиваемой СУБД класса «ключ-значение» на основе 樹B+ 沒有 主動紀錄, которая позволяет рою многопоточных процессов конкурентно и предельно эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надежнее LMDB, при этом libmdbx сохраняет все ключевые возможности своего прародителя, такие как ACID и неблокирующее чтение с линейным масштабированием по ядрам 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 и т. д.
  • 更新 介面說明.
  • Амальгамация исходного кода для удобства встраивания.
  • CMake 支援。
  • 支持嵌套事務。
  • 使用 bootid 確定作業系統是否已重新啟動(髒資料庫停止)。
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • 選項 MDBX_ACCEDE 用於以相容模式連接到已開啟的資料庫。
  • 使用 OFD阻塞 有空的時候。
  • 管道熱備份。
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • 最大密鑰長度已增加。
  • 自動控制預讀(資料庫檔案在記憶體中的快取策略)。
  • 更積極、更快的自動壓縮。
  • 一種更優化的B+樹頁面合併策略。
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • 測試集已擴大。

libmdbx 的「下一個」版本的開發將作為一個單獨的專案繼續進行 秘銀資料庫,而MDBX「目前」版本的開發向量旨在凍結功能集並使其穩定。 做出這個決定是出於三個原因:

  • 完全不相容:MithrilDB 需要不同的(不相容的)資料庫檔案格式和不同的(不相容的)API 來實現所有計劃的功能。
  • 新原始碼:MithrilDB 原始碼已獲得獨立於 LMDB 的許可,並且專案本身計劃在不同的許可下發布(由 OSI 執照 阿帕奇2.0而且不 OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB 與 MDBX 一樣,也是基於 樹B+ 並且還將具有極高的效能,同時消除 MDBX 和 LMDB 的許多基本缺點。 特別是「長讀」問題,即由於垃圾處理被長讀事務阻塞而表現為資料庫「膨脹」的問題將被消除。 MithrilDB 的新功能包括:

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

來源: linux.org.ru

添加評論