Lightning Memory-Mapped Database (LMDB) представляет собой интересный, во многом уникальный движок базы данных класса Berkeley DB и Level DB с ребус-подобным исходным кодом. Будучи относительно малоизвестным, LMDB показывает ЧЕМПИОНСКУЮ производительность по чтению. А наши доработки предлагают ряд компромиссов для достижения невероятной производительности по записи.
Доклад точно будет интересен разработчикам, интересующимся "внутренностями" баз данных или характеристиками отдельных движков.
Хочу рассказать как о исходной версии LMDB, так и о нашем движке внутри ReOpenLDAP:
- Обзор внутреннего устройства LMDB.
- Пояснение "фишек" и преимуществ.
- Разбор выявленных проблем и недостатков.
- Наши доработки (lifo-reclaiming, oom-handler, weak/steady) и их последствия.
- Результаты сравнения производительности тестами от Дмитрия Симоненко (автор Sophia DB).
Изначально LMDB был создан для использования внутри известного проекта OpenLDAP. А мы в Петер-Сервис решили задействовать связку OpenLDAP+LMDB в своих решениях для «Больших Телекомов».
LMDB представляет собой предельный вариант MVCC на основе B-tree с прямым отображением всех данных в память, подходом copy-on-write и lockfree при чтении. Это наделяет LMDB уникальным набором свойств.
Движок LMDB является чемпионом по чтению в сценариях использования с range lookup. Что логично и подтверждается тестами. Но при интенсивной записи всё не так радужно – для высокой производительности требовалось либо жертвовать гарантией консистентности данных, либо устанавливать подсистему хранения, способную переварить огромные IOPSы.
Был ещё целый ряд проблем и недостатков, которые нам пришлось устранить, разбираясь в ребусах исходного кода.
Обратите внимание на доклад по связанной теме http://www.highload.ru/2015/abstracts/1829.html, где планируется рассказать о промышленном проекте с использованием LMDB.
Проект реализуется силами компании Петер-Сервис R&D, резидента Сколково, для применения в телеком-проектах федерального масштаба.
Информация о нашем проекте = https://github.com/ReOpen/ReOpenLDAP/wiki
Дополнительная информация об исходной версии LMDB = http://symas.com/mdb/