שחרור של DBMS משובץ בעל ביצועים גבוהים libmdbx 0.11.3

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

מבחינה היסטורית, libmdbx הוא עיבוד מעמיק של ה-LMDB DBMS והוא עדיף על האב הקדמון שלו באמינות, מערך תכונות וביצועים. בהשוואה ל-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_env_get_syncbytes(), 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 נמחקו.

מקור: OpenNet.ru

הוספת תגובה