Вторият кандидат за релиз на libmdbx v1.0 след пет години разработка.

Библиотека libmdbx е значително подобрен потомък на LMDB — изключително високопроизводителна, компактна вградена база данни с ключ-стойност.
Текущата версия v0.5 е технически релиз, който отбелязва завършването на всички разработки и преминаването към фазата на обществено финално тестване и стабилизиране, с последващо формиране на първия пълен релиз на библиотеката.

LMDB е добре позната транзакционна вградена СУБД от клас "ключ-стойност" основана на 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 и т.н.
  • Актуализация описание на API.
  • Амалгамация на изходния код за удобство на вграждането.
  • Поддръжка на CMake.
  • Поддръжка на вложени транзакции.
  • Използване на bootid за определяне на факта за рестартиране на ОС (мръсно спиране на БД).
  • Цялостно броене на обновени/стари страници и разширена информация за транзакции.
  • Опция MDBX_ACCEDE за свързване с вече отворена БД в съвместим режим.
  • Използване Забележки OFD при тяхната наличност.
  • Горещо резервно копиране в pipe.
  • Специализиран оптимизиран алгоритъм за вътрешно сортиране (до 2-3 пъти по-бърз от qsort() и до 30% по-бърз от std::sort()).
  • Увеличена е максималната дължина на ключа.
  • Автоматизирано управление read ahead (стратегия за кеширане на файловата база данни в паметта).
  • По-агресивна и бърза авто-компактификация.
  • По-оптимална стратегия за сливане на страниците в B+ дървото.
  • Контрол на нелокални файлови системи (NFS, Samba и др.) за предотвратяване на повреждане на базата данни при неправилна употреба.
  • Разширен набор от тестове.

Разработката на 'следващата' версия на libmdbx ще продължи в рамките на отделен проект. MithrilDB, докато векторът на разработка на 'текущата' версия MDBX е насочен към замразяване на набор от възможности и стабилизация. Този подход е приет по три причини:

  • Пълна несъвместимост: за реализиране на всички планирани възможности в MithrilDB е необходим друг (несъвместим) формат на файловете на базата данни и друго (несъвместимо) API.
  • Новият изходен код: за изходния код на MithrilDB е осигурена лицензионна независимост от LMDB, а проектът се планира да бъде публикуван под друга лицензия (одобрена OSI лицензията Apache 2.0, а не OpenLDAP Foundation).
  • Разделението позволява да се избегне потенциална обърканост, да се внесе повече яснота и да се осигури независимост на пътя на развитие на проектите.

MithrilDB, както и MDBX, също е основан на B+ дървото. Ще се отличава с изключително висока производителност, като същевременно елиминира редица съществени недостатъци на MDBX и LMDB. В частност, ще бъде ликвидирана проблемът с 'дългите четения', проявяващ се като 'подуване' на базата данни, поради блокиране на обработката на боклука от дългосрочни четящи транзакции. Сред новите възможности на MithrilDB се открояват:

  • поддръжка на бази данни на различни носители: HDD, SSD и енергийно независима памет.
  • оптимални стратегии за "ценни" и "малкоценни", за "горещи", "топли" и "студени" данни.
  • използване на Merkle tree за контрол на целостта на базите данни.
  • опционално използване на WAL и значително по-висока производителност в сценарии с интензивно записване и гаранции за цялостността на данните.
  • лениво догонващо фиксиране на данните на дисковете.

Източник: linux.org.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster