The OpenNET Project / Index page

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

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

24.04.2025 22:58

Опубликован выпуск библиотеки libmdbx 0.13.6 (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_cursor_bind() теперь возвращает MDBX_EINVAL вместо MDBX_BAD_TXN.
  • Во избежание потенциальных проблем отключено использование copy_file_range() на ядрах Linux 5.3 - 5.18.
  • Вброс std::invalid_argument теперь производится явным сообщением MDBX_EINVAL.
  • Устранён регресс при использовании курсоров для DBI=0 (aka GC/FreeDB) в читающих транзакциях.
  • Устранён регресс в виде ошибки EAGAIN при копировании БД на NFS и CIFS/SMB.
  • При доработках/развитии API в функции копирования был добавлен захват файловой блокировки посредством как fcntl(), так и flock(). Однако, в зависимости от версии локального ядра, версии удалённого сервера NFS и опций монтирования, это могло приводить к возврату POSIX-ошибки EAGAIN (11 на большинстве платформ, включая Linux).
  • Устранена ошибка merge/rebase внутри mdbx_txn_release_all_cursors_ex(), что могло приводить к последующим неожиданным ошибкам MDBX_EBADSIGN и утечкам памяти.
  • Исправлена assert-проверка в пути завершения вложенных транзакций.
  • Устранена возможность возврата неожиданной ошибки MDBX_BUSY из mdbx_txn_lock(dont_wait=false).
  • Для совместимости с GCC 15.x в режиме C23 изменён порядок указания атрибутов функций.


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


Обсуждение (7) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 02:21, 25/04/2025 [ответить]  
  • +/
    Кто разбирается, объясните, в чем преимущества ключ-значение перед табличными бд? Ощущение что отрасль буквально помешалась на к/з базах.
     
     
  • 2.3, мимо проходил (?), 02:48, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    "Табличная БД" это тоже ключ-значение, но в значении лежит кортеж полей строки таблицы.

    Ну и далее по-возрастанию сложности, реляционная БД -- это такая "табличная БД", в которой могут быть определены как дополнительные индекс, так и отношения между полями таблиц... и БД будет автоматически все это проверять/использовать.

    Поэтому ключ-значение тут базис, который может быть как неприемлемо примитивен для многих задач, так и может позволить избежать лишних накладных расходов и/или ненужных операций.

     
  • 2.4, Аноним (4), 05:27, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Используют и то и другое вместе, нет отказа от реляционных баз. Как пример, в базу ключ- значение выносят из реляционки поля типа блоб, в реляционку записывают только ключ. Тогда реляционка значительно похудеет и станет быстрее.
     
  • 2.6, Жироватт (ok), 08:08, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Для большинства задач этого функционала ДОСТАТОЧНО.
    ПРОСТО положить (сохранить) пару К-З в файл базы не диске. ПРОСТО быстро найти З по К и считать в переменную. Особенно, если и К, и З у нас простые сами по себе (сериализованный объект в бинарном виде тоже может считаться простым, если не предполагается, что на уровне базы нужен доступ к полям).
     

  • 1.5, mos87 (ok), 07:56, 25/04/2025 [ответить]  
  • –1 +/
    "Бузина" - аффтырь не разочаровывает.
     
     
  • 2.8, Аноним (8), 12:23, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Аффтыр там реально жжет.

    Потыкал тут палочно


     

  • 1.9, n00by (ok), 13:33, 25/04/2025 [ответить]  
  • +/
    github восстановил доступ? Оно было read-only, от чего Гугол выдавал в выдаче ссылки на устаревшею версию, чем насолил пользователям и автору.
     

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



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

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