The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск встраиваемой СУБД libmdbx 0.13.7

01.08.2025 21:20

Опубликован выпуск библиотеки libmdbx 0.13.7 (MDBX) с реализацией высокопроизводительной компактной встраиваемой базы данных класса ключ-значение. Код libmdbx распространяется под лицензией Apache 2.0. Поддерживаются все актуальные операционные системы и архитектуры, а также российский Эльбрус 2000. Для libmdbx предлагается развитое API для C++, а также поддерживаемые энтузиастами привязки к языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Из проектов, использующих libmdbx, можно отметить Isar, Erigon и Reth, а также разработки компаний StarkWare и Positive Technologies.

Исторически libmdbx является глубокой переработкой СУБД LMDB и превосходит своего прародителя по надёжности, набору возможностей и производительности. В сравнении с LMDB, в libmdbx большое внимание уделяется качеству кода, стабильной работе API, тестированию и автоматическим проверкам. Поставляется утилита проверки целостности структуры БД с некоторыми возможностями восстановления. Технологически libmdbx предлагает ACID, строгую сериализацию изменений и неблокирующее чтение с линейным масштабированием по ядрам ЦПУ. Поддерживается автоуплотнение, автоматическое управление размером БД, оценка объёма выборок по диапазонам (range query estimation).

Основные изменения:

  • Устранена критическая ошибка в функциональности mdbx_env_resurrect_after_fork() при использовании SysV-семафоров. Проявлялась ошибка только после порождения дочернего процесса посредством fork() на фоне выполняющейся пишущей транзакции, что приводило к неверной работе семафоров и далее к самым различным ошибкам, вплоть до повреждения БД. Проблема существовала начиная с появления mdbx_env_resurrect_after_fork() и затрагивала macOS, а также POSIX-платформы при сборке с опцией MDBX_LOCKING=5.
  • Устранена проблема в API копирования БД, проявлявшаяся на отличных от Linux системах POSIX (в основном в macOS), а также в некоторых случаях при расположении целевого файла на не-локальной файловой системе. Проблема приводила к возврату ошибки EWOULDBLOCK/EAGAIN, что обусловлено недочётом/конфликтом блокировок fcntl(F_SETLK) и flock() в ядре ОС. Переработана обработка ошибок захвата файловых блокировок в API копирования на системах POSIX.
  • Устранена ошибка, приводившая к неожиданному возврату MDBX_BAD_DBI при одновременном старте нескольких транзакций внутри одного процесса после открытия БД.
  • Устранена ошибка, приводившая к неожиданному возврату MDBX_DBS_FULL при повторном открытии уже открытых таблиц и уже достигнутом лимите открытых DBI-дескрипторов.
  • Исправлена ошибка сборки для платформы Android при явном определении _FILE_OFFSET_BITS.
  • Исправлена ошибка использования ENOMEM вместо MDBX_ENOMEM. Что могло ломать сборку на не-POSIX/Windows платформах, в зависимости от конфигурации и/или версии SDK.
  • Поправлено либо удалено несколько неверных assert-проверок, из-за которых происходили падения отладочных сборок в специфических ситуациях. Главным образом, в коде функций txn_end(), txn_lock() и txn_unlock() как на Windows, так и на POSIX.
  • Устранены несущественные предупреждения MSVC. Отключены предупреждения C5286 и C5287.
  • Доработана логика отказа от использования OFD-блокировок на POSIX-платформах. Теперь кроме EINVAL учитываются дополнительные коды ошибок (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), что позволит работать собранной библиотеке в некоторых случаях, когда актуальное ядро/контейнер/эмулятор не поддерживает требуемых системных вызовов.
  • В тестовый фреймворк добавлена поддержка опции "--numa <num>" для привязки стохастического теста к NUMA-узлу. В battery/tmux-скрипте добавлено явное распределение по NUMA-узлам, что существенно увеличило КПД при тестировании на NUMA-машинах.
  • В стохастическом скрипте реализован случайный порядок запуска отдельных тестов.


  1. Главная ссылка к новости (https://gitflic.ru/project/ert...)
  2. OpenNews: Выпуск встраиваемой СУБД libmdbx 0.13.6
  3. OpenNews: Выпуск встраиваемой СУБД libmdbx 0.13
  4. OpenNews: Релиз LDAP-сервера ReOpenLDAP 1.2.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63653-libmdbx
Ключевые слова: libmdbx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 22:08, 01/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Что-то ошибок многовато
     
     
  • 2.7, Аноним (7), 22:31, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Автор как-то слишком страшно и дотошно формулирует описание исправлений.
    Ошибки-то в совсем новом API и проявлялись только на маке.
    А остальное и ошибками можно не называть, в GCC таких сотни, если не тысячи.
     

  • 1.4, Аноним (2), 22:20, 01/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот что автор пишет про свою СУБД:
    "libmdbx is extraordinarily fast ... in the case of libmdbx, a simple linear search may be more profitable than complex indexes"

    Просто перебирайте значения

     
     
  • 2.5, Аноним (2), 22:23, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вот ещё:
    "In comparison to LMDB, libmdbx make things “just work” perfectly and out-of-the-box"
     
     
  • 3.28, знайка (?), 15:22, 04/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А вот так и есть.
    Работает без глюков LMDB.
    Почитайте блог разрабов Erigon.
     
  • 2.6, Аноним (6), 22:23, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Про асимптотическую сложность не слышал, чо. Действительно, нафига нам индексы.
     
  • 2.10, Аноним (7), 22:43, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ага, и написано это в подразделе Gotchas.

    On the other hand, if you make something suboptimally, you can notice detrimentally only on sufficiently large data.

    Автор там похоже удачно стебёться над любителями кодить и читать по-верхам не вникая ;)

     
     
  • 3.36, Аффтар (?), 20:44, 26/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Там имелось в виду, что нужно вдумчиво подходить к вопросу селективности.

    Например, увеличение длины ключа на 1 байт ради более точного поиска может сделать хуже/медленнее чем приблизительный поиск DUPSORT-куста и перебор в нём значений.

     

  • 1.8, Аноним (8), 22:32, 01/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Пользуюсь, нареканий нет, спасибо автору!
     
     
  • 2.29, знайка (?), 15:43, 04/08/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Офигенно работает, и поддержка первоклассная!

    В телеге автор очень оперативно и подробно отвечает на все вопросы.
    Помог быстрее чем службы поддержки ptsecurity и солара.

     
  • 2.35, Аффтар (?), 20:39, 26/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо.
     

  • 1.9, Аноним (2), 22:37, 01/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Ещё на его странице: "Donations are welcome to the Ethereum/ERC-20 ... Всё будет хорошо!"

    А для кого хорошо? Напомню, оплата товаров и услуг криптовалютой запрещена в России с 2021 года

     
     
  • 2.11, Аноним (7), 22:46, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А причем тут донаты и продажа крипты?
     
     
  • 3.12, Аноним (2), 23:00, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    "Since 2020 libmdbx is used in Ethereum"
     
     
  • 4.13, Аноним (7), 23:03, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так логично что автор собирает донаты от индустрии.
    Но причем тут запрет на оплату криптой товаров и услуг?
     
     
  • 5.14, Аноним (2), 23:42, 01/08/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Так эти самые донейшены - разве не скрытая оплата товара?
     
     
  • 6.30, Аноним (30), 19:52, 04/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Диванные юристы на опеннете :)
     
  • 5.16, Аноним (7), 00:05, 02/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нет тут никакой скрытой продажи, ведь вы не приобретаете ни товар, ни услугу.
    Исходники, документация, поддержка доступны вне зависимости от крипты.

    Причем приём платежей в крипте запрещен внутри РФ, но разрешен из-за рубежа.

     

  • 1.18, Аноним10084 и 1008465039 (?), 01:25, 02/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то баз данных ключ-значение много очень стало
     
     
  • 2.20, Анонима (?), 07:29, 02/08/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    десятилетиями блобы хранились в обычных реляционных субд, но кто-то с похмелья подумал что блобы в традиционных субд хранятся неоптимально, на страницах с обычными данными и оперативная память "забивается", и понеслась...
     
     
  • 3.22, Аноним (22), 08:56, 02/08/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дидам хватало — и нам должно хватать, да.
     
     
  • 4.27, _ (??), 03:51, 04/08/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Только полные еб***шки думают что SQL db появились __ДО__ key-value db ...
    О сколько _вам_ открытий чудных готовит!(С) Наше всиО
     
  • 3.24, Аноним (24), 14:27, 02/08/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если "сводные таблицы" не планируются, то зачем заморачиваться с реляционностью?
     

  • 1.19, Аноним (19), 04:02, 02/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Чем она лучше dbm?
     
     
  • 2.23, Аноним (7), 09:06, 02/08/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ACID
    Доступ из нескольких процессов.
    Работа читателей без блокировок.
    Поддержка "дубликатов", когда с ключом связано очень много значений они хранятся во вложенном b-tree.
    Много key-value таблиц в одном файле.
     

  • 1.25, 14yoexpert (?), 13:56, 03/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Нахрена козе боян когда есть всеми используемый sqlite?
     
     
  • 2.26, Аноним (7), 18:03, 03/08/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для большинства web-поделок и мобильных свистелок sqlite подходит идеально.
    И 99% разработчиков MDBX не нужна, именно как баяйн козе.

    Но есть куча сценариев где удобство sqlite малополезно или слишком дорого, либо когда масштаб не-лайтовый как в Ethereum. Поэтому, например, Erigon и Reth сидят на MDBX.

    Еще sqlightning (https://github.com/LMDB/sqlightning) намекает что sqlite можно ускорить заменив внутреннее хранилище и b-tree на LMDB. За 12 лет инфа конечно устарела, но в Isar (БД для Flutter, с блекджеком и т.п.) была поддержка sqlite и выходило что MDBX примерно вдвое быстрее. Картинки с результатами и исходники бенчмарков где-то на Github.

     

  • 1.31, adolfus (ok), 16:25, 19/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    На фоне BerkeleyDB это MDBX просто школьное поделие. Мало того, у BDB лицензия AGPL, а у MDBX -- Apache.
    Ключевое различие между лицензиями:
    - AGPL накладывает сильные обязательства по открытию исходного кода при любом использовании программного продукта, в том числе через сеть, что характерно для копилефтных лицензий.
    - Apache 2.0 — разрешительная лицензия с защитой патентов, дающая больше свободы в использовании и включении кода в закрытые проекты без обязательств раскрывать исходный код.
     
     
  • 2.32, Имя (?), 23:00, 19/08/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Поделие уделывает LMDB, а LMDB как тузик грелку рвет этот ваш фон.
    Не только лишь все могут это принять.
    Главное батхерт успеть вылечить до начала деменции.
     
     
  • 3.33, adolfus (ok), 12:26, 26/08/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Поделие уделывает LMDB, а LMDB как тузик грелку рвет этот ваш фон.

    Смешно. Оно и пятой части возможностей BDB не реализует, какая тут грелка. Попытка что-то сляпать на замену. Поверх BDB MySQL был написан. Напиши что-либо похожее поверх этого поделия.

     
     
  • 4.34, Аффтар (?), 20:37, 26/08/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    По части MySQL вы заблуждаетесь, а информация с отсылкой к MySQL не соответствуе... большой текст свёрнут, показать
     
     
  • 5.37, adolfus (ok), 16:18, 27/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > 2. LMDB была создана Говардом Чу (Howard Chu) для OpenLDAP ради избавления
    > от проблем BerkeleyDB.

    От нормальных курсоров и вторичных индексов, да? От детального управления транзакциями, в том числе и вложенными? И что в таком случае остается? -- А то, что невозможно использовать кроме как на локалхосте для кеширования.
    Все то, от чего избавился этот ваш Чу, позволяет во многих случаях избавиться от использования sql-серверов. Я знаю несколько достаточно больших проектов на базе BDB, реально работающих более 15 лет. Среди них есть такой, который обслуживает в режиме OLTP полторы сотни клиентов в среднем одновременно.

     
     
  • 6.38, Аффтар (?), 23:07, 27/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Исходное API LMDB во многом копирует Berkeley DB, но с существенным упрощением за счет отказа от лишнего.

    Курсоры в MDBX/LMDB такие же как в Berkeley DB.
    Точнее говоря, некоторые отличия есть, но сводятся к объективным отличиям в возможностях движков.
    Вложенные транзакции тоже есть, и non-durable тоже. Но ими почти никто не пользуется.

    В OpenLDAP вторичные индексы были не нужны и Говард не стал их делать (а я бы наверное сделал).
    Однако, несмотря на полезность вторичных индексов в реальности они оказались не востребованными:
    - если возможностей простого key-value не хватает индустрия предпочитает SQL (SQLite либо внешний сервер);
    - там где накладные расходы на SQL слишком велики и вложения в разработку оправданы, реализуются собственные схемы со всякими трюками и экономией на спичках.

    30 лет назад, когда делали BDB, всё было иначе. В том числе, диски были медленнее и собственные накладные расходы BDB на кеширование и блокировки были незаметны.
    Языков программирования и их runtime-сред было сильно меньше.
    Темп изменений в схемах данных был на порядок меньше.
    Поэтому было приемлемо заморачиваться с BDB и возится с собственными кортежами и индексами.

    Сейчас же всё сводится к трем вариантам и их комбинации:
    1) SQLite или SQL-сервер;
    2) key-value из-за достаточности и/или простоты схемы данных;
    3) собственные решения ради уменьшения накладных расходов.

    Вторичные индексы BDB тут оказываются не востребованными, а часто и BDB в целом.
    MDBX/LMDB же работают в пунктах 2 и 3, но (конечно) не во всех случаях, а там где подходят под сценарий использования БД.

    Всё сказанное не ставит под сомнения факта что есть много проектов использующих BDB.
    Однако, в основном это именно проекты возрастом от 15 лет и старше.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру