The OpenNET Project / Index page

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

Выпуск высокопроизводительной встраиваемой СУБД libmdbx 0.11.3

31.12.2021 14:23

Состоялся выпуск библиотеки libmdbx 0.11.3 (MDBX) с реализацией высокопроизводительной компактной встраиваемой базы данных класса ключ-значение. Код libmdbx распространяется под лицензией OpenLDAP Public License. Поддерживаются все актуальные операционные системы и архитектуры, а также российский Эльбрус 2000. На конец уходящего 2021 года libmdbx используется как бэкенд хранения в двух самых быстрых клиентах Ethereum — Erigon и новой «Акуле», которая по доступной информации является самым высокопроизводительным клиентом Ethereum.

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

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

Для libmdbx предлагается C++ API, а также поддерживаемые энтузиастами привязки к языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.

Основные новшества, доработки и исправления, добавленные после предыдущей новости от 11 октября:

  • C++ API считается готовым к применению.
  • Существенно ускоренно обновление данных GC при фиксации огромных транзакций, что особенно актуально при использовании libmdbx в экосистеме Ethereum.
  • Изменена внутренняя сигнатура формата БД с поддержкой автоматического обновления, которое полностью прозрачно для пользователей. Это позволяет исключить ложно-положительные сообщения о повреждении БД, когда устаревшие версии библиотеки используется для чтения транзакций зафиксированных актуальными версиями.
  • Добавлены функции mdbx_cursor_get_batch(), mdbx_env_get_syncperiod() и mdbx_env_get_syncbytes(). Для курсоров добавлена поддержка операции MDBX_SET_UPPERBOUND.
  • Устранены все предупреждения при сборке всеми поддерживаемыми компиляторами в режимах С++ 11/14/17/20. Обеспечена совместимость с устаревшими компиляторами: clang начиная с 3.9, gcc начиная с 4.8, включая сборку посредством сdevtoolset-9 для CentOS/RHEL 7.
  • Устранена возможность конфликта мета-страниц после ручного переключения на определенную мета-страницу с помощью утилиты mdbx_chk.
  • Исправлен возврат неожиданной ошибки MDBX_PROBLEM при перезаписи устаревших мета-страниц.
  • Исправлен возврат MDBX_NOTFOUND в случае неточного совпадения при обработке запроса MDBX_GET_BOTH.
  • Устранена ошибка компиляции на Linux при отсутствии заголовочных файлов с описаниями интерфейсов с ядром.
  • Исправлена коллизия между внутренним флагом MDBX_SHRINK_ALLOWED и опцией MDBX_ACCEDE.
  • Устранено несколько излишних assert-проверок.
  • Исправлена неожиданный возврат MDBX_RESULT_TRUE из функции mdbx_env_set_option().
  • Суммарно внесено более 90 изменений в 25 файлов, добавлено ~1300 строк, удалено ~600.


  1. Главная ссылка к новости (https://github.com/erthink/lib...)
  2. OpenNews: Выпуск высокопроизводительной встраиваемой СУБД libmdbx 0.10.4 и libfpta 0.3.9
  3. OpenNews: Выпуск высокопроизводительной встраиваемой СУБД libmdbx 0.10
  4. OpenNews: Выпуск высокопроизводительной встраиваемой СУБД libmdbx 0.9.3
  5. OpenNews: Выпуск высокопроизводительной встраиваемой СУБД libmdbx 0.9.2
  6. OpenNews: Доступен ReOpenLDAP 1.1.6, форк проекта OpenLDAP
Автор новости: Леонид Юрьев (erthink)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/56438-libmdbx
Ключевые слова: libmdbx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 15:25, 31/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Круто, поздравляю. Хотелось бы конечно полноценной реляционной БД. Ключ/значение подходит для чего-то очень специфического.

    А так интересный проект. Для Android есть что-то похожее, вроде - mmkv.

     
     
  • 2.2, тоже Аноним (ok), 15:41, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Хотелось бы конечно полноценной реляционной БД.

    Ваше пожелание исполнено: https://www.opennet.dev/opennews/art.shtml?num=4438

     
     
  • 3.4, Rev (?), 16:04, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Вот если такое же, но ~с перламутровыми пуговицами~ на чистом Расте...
     
     
  • 4.8, Урри (ok), 16:50, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Возьми и напиши. Язык ведь простой, безопасный, легко изучаемый и внутренне не противоречивый.
    За недельки две осилишь, думаю.
     
     
  • 5.30, Аноним (30), 17:34, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Rev вышел из чата...
     
     
  • 6.36, Аноним (36), 19:09, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Слабак немодный!
     
  • 3.9, Аноним (1), 17:07, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это медленное и с архитектурой 20 летней давности. 25мс на примитивнейшие запросы... моё почтение, это много!!!

    Если весь бюджет на изменение UI максимум 100мс, включая рендеринг и все-все-все остальное.

    Есть DuckDB как лучик света https://github.com/duckdb/duckdb, который превосходит во всём. И на некоторых запросах 8х раз быстрее. Но есть и но.

     
     
  • 4.17, x3who (?), 19:56, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но есть и но.

    Давай уже бросай второй сапог.

     
     
  • 5.20, Аноним (1), 20:21, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Нет "Persistent index structures", те индексы пересоздаются каждый раз и живут только в памяти. Наверное для анализа данных и пофиг, а для моего todo листа очень плохо, не подходит.

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

    https://github.com/duckdb/duckdb/issues/693#issuecomment-646847487

     
     
  • 6.24, тоже Аноним (ok), 12:00, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Например, с прекрасным правильным и перспективным языком D эксперт мирового уровня колупается уже лет двадцать. Но есть одно но...
     
  • 6.25, x3who (?), 13:18, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет "Persistent index structures", те индексы пересоздаются каждый раз и живут только
    > в памяти. Наверное для анализа данных и пофиг, а для моего
    > todo листа очень плохо, не подходит.

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

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

     
     
  • 7.27, Аноним (1), 15:46, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, у них OLAP БД, а не OLTP Те заточены на аналитические запросы по всей табли... большой текст свёрнут, показать
     
     
  • 8.38, Аноним (38), 19:45, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Дихотомия OLAP OLTP не просто так появилась Далеко не всегда рожденный ползать... текст свёрнут, показать
     
     
  • 9.39, Аноним (1), 19:55, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Не согласен Надо смотреть именно реализацию ... текст свёрнут, показать
     
  • 2.3, Аноним (3), 15:54, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ну так libmdbx и есть "для чего-то специфического" (LDAP)
     
     
  • 3.12, erthink (ok), 18:04, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > ну так libmdbx и есть "для чего-то специфического" (LDAP)

    У libmdbx действительно плохо только с одним сценарием - когда требуется фиксировать много мелких транзакций с гарантией сохранности данных при системной аварии (потери питания и т.п.), ибо намеренно нет WAL. В остальных случаях достаточно хорошо, либо ещё лучше.

    А LDAP - просто идеальный вариант, много поисков/чтений и относительно мало апдейтов.

     
  • 2.11, erthink (ok), 17:45, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    На всякий - libmdbx без проблем собирается под Android и iOS.

    В сравнении с  mmkv есть несколько принципиальных отличий:
    1. mmkv это "framework", т.е. с более развесистым, гуманно-плюшевым API;
    2. насколько помню в mmkv накладные расходы в 3-4 больше раза, но это не заметно на его целевых "мобильных" масштабах.
    3. libmdbx может больше именно как движок хранения. Например эффективные вложенные b-tree для повторов/дубликатов в индексах. И на терабайтных базах, с которыми libmdbx "просто работает", mmkv примерно не сможет.

     

  • 1.13, Аноним (13), 18:37, 31/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Раз уж новость от самого автора, то хотелось бы у него же и поинтересоваться, в каком состоянии сейчас находится ReOpenLDAP, и планируется ли возобновление активности по проекту?
     
     
  • 2.14, erthink (ok), 18:42, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Раз уж новость от самого автора, то хотелось бы у него же
    > и поинтересоваться, в каком состоянии сейчас находится ReOpenLDAP, и планируется ли
    > возобновление активности по проекту?

    Уже отвечал, см https://www.opennet.dev/openforum/vsluhforumID3/125492.html#33

     

  • 1.15, Аноним (1), 19:09, 31/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что там с секретной SQL DB, которую автор обещал пару лет назад?
     
     
  • 2.16, erthink (ok), 19:23, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А что там с секретной SQL DB, которую автор обещал пару лет
    > назад?

    Уточните, что именно вы имеете в виду?

    Если форк кликхауса:
    - то лицензия позволяет не открывать код, а финальное решение зависит от Positive Technologies.
    - в ряде продуктов уже используется, а в 2022 таковых станет больше.
    - имеет собственные фичи, а в целевых сценариях использования обгоняет кликхаус, в том числе умеет больше при использовании меньших ресурсов.

    Если MithrilDB, то там никогда не планировался SQL. Аналогично с libfpta, но эта либа давно в production и доступна публично.

    Если о приземлении SQLite на libmdbx, то это не ко мне, а сюда https://github.com/LumoSQL/lumosql/issues/4

     
     
  • 3.21, Аноним (1), 20:24, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Понял, спасибо. Я о MithrilDB, думал это будет реляционная БД с SQL, замена SQLite
     

  • 1.18, Аноним (18), 19:59, 31/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    как на счет sophia?
     
     
  • 2.19, erthink (ok), 20:13, 31/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > как на счет sophia?

    Не совсем понятно что вы хотите услышать, но для информации:
    - это LSM, который Дмитрий делал (насколько мне известно) для Тарантула;
    - разработка Sophia остановлена ~5 лет назад;
    - еще до ухода Константина по-мотивам был сделан Vinyl, одна из основных фишек которого - глубока интеграция с тарантулом и одновременная фиксация транзакций от большого кол-ва клиентов.

     

  • 1.22, Аноним (22), 03:27, 01/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    gnu recutils
     
     
  • 2.49, Аноним (49), 16:26, 04/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > gnu recutils

    а при чем тут эта шняга уровня ini-файлов?
    даже не bdb.

     

  • 1.23, Аноним (23), 10:40, 01/01/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –2 +/
     

     ....ответы скрыты (9)

  • 1.28, adolfus (ok), 17:31, 01/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Чтобы называться базой данных, нужно, как минимум, поддерживать вторичные ключи, транзакции и временные блокировки вдоль и поперек таблиц.
    И это, как его... AIDC -- вот!
     
     
  • 2.34, Аноним (38), 18:50, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Чтобы называться базой данных, нужно, как минимум, поддерживать вторичные ключи, транзакции и временные блокировки вдоль и поперек таблиц.

    Как насчет СУБД Redis, где нет даже таблиц?

     
     
  • 3.35, adolfus (ok), 19:04, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Чтобы называться базой данных, нужно, как минимум, поддерживать вторичные ключи, транзакции и временные блокировки вдоль и поперек таблиц.
    > Как насчет СУБД Redis, где нет даже таблиц?

    До СУБД этому редису, как до Луны раком. То, что умеет редис, я сделаю на c++11 и будет оно в разы быстрее, жрать памяти будет меньше и при этом не будет называться СУБД. Мало того, в дополнение к базовому функционалу будет поддерживаться isam в ключе.

     
     
  • 4.37, Аноним (38), 19:42, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > То, что умеет редис, я сделаю на c++11 и будет оно в разы быстрее, жрать памяти будет меньше

    Возможно, вам стоит сменить ник на "Лев Николаевич"?

     
     
  • 5.40, Аноним (23), 20:48, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не, пусть лучше сделает.
     
     
  • 6.41, Аноним (38), 20:57, 01/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На деле оно обычно совсем не так, как на словах.
     
  • 6.47, adolfus (ok), 09:57, 04/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Не, пусть лучше сделает.

    Ага, мы тут десятилетиями ждали, когда-же редис изволит появиться.

     
  • 2.52, erthink (ok), 17:49, 04/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуйста RTFM, транзакции и ACID в libmdbx есть.
    Таблиц и вторичных ключей в key-value не должно быть по определению, но может быть надстроено (см. libfpta).

    Блокировки нужны там "где они нужны", но в целом это лишь путь решения одних проблем ценой получение других.
    В libmdbx намеренно полная сериализация для пишущих транзакций и примерно lockfree для читателей.
    Собственно за счет этого в libmdbx существенно меньше накладных расходов, что позволяет получить в целевых сценария использования производительность на несколько порядков больше условного оракла.
    Поэтому, например, возможно сделать Akula (самый быстрый клиент Ethereum).

    Тем не менее, критику по поводу корректности использования терминов "база данных" и "СУБД" просьба начинать с первоисточников:
    https://en.wikipedia.org/wiki/Database
    https://ru.bmstu.wiki/LMDB_(Lightning_Memory-Mapped_Database)
    и т.д.

     

  • 1.46, Denis (??), 00:25, 04/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где найти бинари под Windows?
     
     
  • 2.51, erthink (ok), 17:18, 04/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А где найти бинари под Windows?

    Только собрать, больше никак.
    Но ничего сложно https://github.com/erthink/libmdbx#building-and-testing

    Распространение пакетов планируется для нескольких дистрибутивов Linux, но не для винды.

     

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



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

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