База данных Lightning, отображаемая в памяти
Оригинальный автор(ы) | Говард Чу |
---|---|
Разработчик(и) | Симс |
Первоначальный выпуск | 24 ноября 2011 г |
Стабильная версия | 0.9.32 / 29 января 2024 г |
Репозиторий | |
Написано в | С |
Операционная система | Unix , Linux , Windows , AIX , Sun Solaris , SCO Unix , macOS , iOS |
Размер | 64 КБ |
Тип | Встроенная база данных |
Лицензия | Публичная лицензия OpenLDAP ( разрешительная лицензия на программное обеспечение ) |
Веб-сайт | сим |
База данных Lightning Memory-Mapped ( LMDB ) — это встроенная транзакционная база данных в форме хранилища значений ключа . LMDB написан на C с привязкой API к нескольким языкам программирования . LMDB хранит произвольные пары ключ/данные в виде байтовых массивов, имеет возможность поиска по диапазону, поддерживает несколько элементов данных для одного ключа и имеет специальный режим для добавления записей (MDB_APPEND) без проверки согласованности. [1] LMDB — это не реляционная база данных , это строго хранилище «ключ-значение», такое как Berkeley DB и DBM.
LMDB также может использоваться одновременно в многопоточной или многопроцессорной среде с линейным масштабированием производительности чтения. В базах данных LMDB одновременно может быть только один писатель, однако, в отличие от многих аналогичных баз данных «ключ-значение», транзакции записи не блокируют считыватели, а читатели не блокируют писателей. LMDB также необычен тем, что несколько приложений в одной системе могут одновременно открывать и использовать одно и то же хранилище LMDB в качестве средства повышения производительности. Кроме того, LMDB не требует журнала транзакций (тем самым увеличивая производительность записи за счет отсутствия необходимости дважды записывать данные), поскольку он поддерживает целостность данных по своей сути.
История
[ редактировать ]Дизайн LMDB впервые обсуждался в сообщении 2009 года в списке рассылки разработчиков OpenLDAP . [2] в контексте изучения решения проблемы управления кэшем, вызванной зависимостью проекта от Berkeley DB . Конкретная цель заключалась в замене нескольких уровней конфигурации и кэширования, присущих конструкции Berkeley DB, единым автоматически управляемым кэшем под контролем операционной системы хоста .
Впоследствии началась разработка, первоначально как ответвление аналогичной реализации проекта OpenBSD ldapd. [3] Первая общедоступная версия появилась в репозитории исходных текстов OpenLDAP в июне 2011 года. [4]
Проект был известен как MDB до ноября 2012 года, после чего был переименован во избежание конфликтов с существующим программным обеспечением. [5]
Техническое описание
[ редактировать ]Внутри LMDB используются B+ древовидные структуры данных . Эффективность его конструкции и небольшой размер имели непреднамеренный побочный эффект, заключающийся в обеспечении хорошей производительности записи . LMDB имеет API, аналогичный Berkeley DB и dbm . LMDB рассматривает память компьютера как единое адресное пространство, совместно используемое несколькими процессами или потоками с использованием общей памяти с семантикой копирования при записи (исторически известной как одноуровневое хранилище ). Большинство прежних современных вычислительных архитектур имели 32-битное адресное пространство памяти, что налагало жесткий предел в 4 ГБ на размер любой базы данных, которая напрямую отображалась в одноуровневом хранилище. Однако современные 64-битные процессоры в основном реализуют 48-битные адресные пространства, предоставляя доступ к 47-битным адресам или базе данных объемом 128 ТБ. [6] сделать базы данных, использующие общую память, снова полезными в реальных приложениях.
К особым техническим особенностям LMDB относятся:
- Использование дерева B+ . Поскольку экземпляр LMDB находится в общей памяти, а размер блока дерева B+ равен размеру страницы ОС, доступ к хранилищу LMDB чрезвычайно эффективен с точки зрения использования памяти. [7]
- Новые данные записываются без перезаписи или перемещения существующих данных. Это гарантирует целостность и надежность данных без необходимости вести журналы транзакций или услуги очистки.
- Предоставление уникального режима добавления-записи (MDB_APPEND). [1] реализуется путем добавления новой записи непосредственно в конец дерева B+ . Это уменьшает количество операций чтения и записи страницы, что приводит к значительному увеличению производительности, но требует от программиста убедиться, что ключи уже находятся в отсортированном порядке при хранении в БД.
- копирования при записи Семантика помогает обеспечить целостность данных , а также обеспечивает гарантии транзакций и одновременный доступ для читателей без необходимости какой-либо блокировки, даже для текущего записывающего устройства. Новые страницы памяти, необходимые внутри во время изменения данных, выделяются посредством семантики копирования при записи базовой ОС: сама библиотека LMDB никогда фактически не изменяет старые данные, к которым обращаются читатели, потому что она просто не может этого сделать: любые обновления общей памяти автоматически создают полностью независимая копия страницы памяти, в которую выполняется запись.
- Поскольку LMDB отображается в памяти, она может возвращать прямые указатели на адреса ключей и значений в памяти через свой API, тем самым избегая ненужного и дорогостоящего копирования памяти. Это приводит к значительному увеличению производительности (особенно когда хранимые значения чрезвычайно велики) и расширяет потенциальные варианты использования LMDB.
- LMDB также отслеживает неиспользуемые страницы памяти, используя дерево B+ для отслеживания страниц, освобожденных (больше не нужных) во время транзакций. Отслеживание неиспользуемых страниц позволяет полностью избежать необходимости сборки мусора (и фазы сборки мусора, которая потребляет циклы ЦП). Транзакции, которым нужны новые страницы, сначала получают страницы из этого дерева неиспользуемых свободных страниц; только после того, как они будут израсходованы, он расширится на ранее неиспользуемые области основного файла, отображаемого в памяти. В современной файловой системе с поддержкой разреженных файлов это помогает минимизировать фактическое использование диска.
Формат файла LMDB, в отличие от формата Berkeley DB , зависит от архитектуры. Это означает, что преобразование необходимо выполнить перед перемещением базы данных с 32-битной машины на 64-битную. [8] или между компьютерами с разным порядком байтов . [9]
Параллелизм
[ редактировать ]LMDB использует управление многоверсионным параллелизмом (MVCC) и позволяет нескольким потокам в нескольких процессах координировать одновременный доступ к базе данных. Читатели масштабируются линейно по своей конструкции. [10] [11] В то время как транзакции записи глобально сериализуются через мьютекс , транзакции только для чтения работают параллельно, в том числе при наличии транзакции записи. Они полностью не требуют ожидания, за исключением первой транзакции в потоке, доступной только для чтения. Каждый поток, читающий из базы данных, получает право собственности на элемент в массиве общей памяти, который он может обновлять, чтобы указать, когда он находится в транзакции. Модули записи сканируют массив, чтобы определить самую старую версию базы данных, которую должна сохранить транзакция, не требуя прямой синхронизации с активными читателями.
Производительность
[ редактировать ]В 2011 году Google опубликовала программное обеспечение, которое позволяло пользователям создавать микротесты, сравнивающие SQLite производительность LevelDB с и Kyoto Cabinet в различных сценариях. [12] В 2012 году Symas добавила поддержку LMDB и Berkeley DB и сделала общедоступным обновленное программное обеспечение для сравнительного анализа. [13] Результаты тестов показали, что LMDB превосходит все другие базы данных в операциях чтения и пакетной записи. SQLite с LMDB преуспел в операциях записи, особенно в синхронной/транзакционной записи.
Тесты показали, что базовая файловая система оказывает большое влияние на производительность. JFS с внешним журналом работает хорошо, особенно по сравнению с другими современными системами, такими как Btrfs и ZFS . [14] [15] Zimbra протестировала производительность back-mdb и back-hdb в OpenLDAP, причем LMDB явно превосходит back-hdb на основе BDB. [16] Многие другие пользователи OpenLDAP заметили аналогичные преимущества. [17]
С момента первоначального сравнительного тестирования, проведенного в 2012 году, было проведено множество последующих тестов с дополнительными ядрами баз данных как для операций в памяти, так и для [18] и на диске [19] рабочие нагрузки, характеризующие производительность нескольких процессоров и размеры записей. Эти тесты показывают, что производительность LMDB не имеет себе равных при всех рабочих нагрузках в памяти и превосходит все рабочие нагрузки чтения с привязкой к диску и рабочие нагрузки записи с привязкой к диску с использованием записей большого размера. Код эталонного драйвера впоследствии был опубликован на GitHub. [20] и дальнейшее расширение охвата базы данных.
Надежность
[ редактировать ]LMDB был разработан для предотвращения потери данных в случае сбоев системы и приложений. Его подход копирования при записи никогда не перезаписывает используемые в данный момент данные. Отсутствие перезаписи означает, что структура на диске/хранилище всегда действительна, поэтому сбои приложений или системы никогда не могут привести к повреждению базы данных. В худшем случае в режиме по умолчанию сбой может привести к потере данных из последней еще не зафиксированной транзакции записи. Даже если включены все асинхронные режимы, это всего лишь катастрофический сбой ОС или отключение питания оборудования. [21] событие, а не просто сбой приложения, который потенциально может привести к повреждению данных.
Два научных доклада с симпозиума USENIX OSDI [22] рассмотрены режимы отказа двигателей DB (включая LMDB) при внезапном отключении питания или сбое системы. [23] [24] В статье Пиллая и др. не обнаружено каких-либо сбоев в LMDB, которые могли бы возникнуть в рассматриваемых реальных файловых системах; единственный сбой, выявленный в ходе исследования LMDB, относится только к гипотетическим файловым системам. [25] Май Чжэн и др. В документе утверждается, что указывают на сбои в LMDB, но вывод зависит от того, используется ли fsync или fdatasync. Использование fsync решает проблему. Выбор fsync или fdatasync — это переключатель времени компиляции, который не является поведением по умолчанию в текущих сборках LMDB для Linux, но используется по умолчанию в macOS, *BSD, Android и Windows. Таким образом, сборки LMDB для Linux по умолчанию являются единственными, уязвимыми для проблемы, обнаруженной исследователями zhengmai, однако пользователи Linux могут просто пересобрать LMDB для использования вместо этого fsync. [26]
При наличии поврежденной базы данных, например, созданной с помощью фаззинга , LMDB может выйти из строя. Автор LMDB считает, что этот случай маловероятен, но внес частичное исправление в отдельную ветку. [27]
Лицензия с открытым исходным кодом
[ редактировать ]В июне 2013 года Oracle изменила лицензию Berkeley DB (родственный проект) с лицензии Sleepycat на Affero General Public License . [28] тем самым ограничивая его использование в самых разных приложениях. Это привело к тому, что проект Debian исключил библиотеку, начиная с версии 6.0. Также подвергалось критике за то, что эта лицензия недружелюбна к коммерческим распространителям. Дискуссия разгорелась по поводу того, может ли такое же изменение лицензирования произойти с LMDB. Автор Говард Чу пояснил, что LMDB является частью проекта OpenLDAP, у которого до его присоединения была лицензия в стиле BSD, и она останется таковой. Никакие авторские права не передаются никому при регистрации, что делает невозможным аналогичный шаг Oracle. [29] [30] [31] [32] [33] [34] [35] [36] [37]
Проблема с лицензией Berkeley DB привела к тому, что основные дистрибутивы Linux, такие как Debian, полностью отказались от использования Berkeley DB, отдав предпочтение LMDB. [38]
API и использование
[ редактировать ]Существуют оболочки для нескольких языков программирования, таких как C++, [39] [40] Ява, [41] Питон, [42] [43] Два, [44] Ржавчина, [45] [46] Идти, [47] Руби, [48] Цель С, [49] Javascript, [50] С#, [51] Перл, [52] PHP, [53] Ткл [54] и Common Lisp. [55] Полный список оберток можно найти на главном веб-сайте. [56]
Говард Чу портировал SQLite 3.7.7.1 для использования LMDB вместо исходного кода B-дерева , назвав результат SQLightning. [57] Один упомянутый тест вставки 1000 записей был в 20 раз быстрее (чем исходный SQLite с его реализацией B-дерева). [58] LMDB доступен в качестве резервного хранилища для других проектов с открытым исходным кодом, включая Cyrus SASL, [59] Хеймдаль Керберос, [60] и ОпенДКИМ. [61] Он также доступен в некоторых других проектах NoSQL, таких как MemcacheDB. [62] и Картограф. [63] LMDB использовался для того, чтобы хранилище Redis в памяти сохраняло данные на диске. Существующая серверная часть Redis в редких случаях проявляла патологическое поведение, и требовалась замена. Однако причудливый API LMDB подвергся критике, заставив писать много кода для выполнения простых задач. Однако его производительность и надежность во время тестирования были значительно лучше, чем у опробованных альтернативных серверных хранилищ. [64]
Независимый сторонний разработчик программного обеспечения использовал привязки Python к LMDB. [65] в высокопроизводительной среде и опубликовал на сайте технологических новостей Slashdot , как системе удалось успешно выдержать 200 000 одновременных операций чтения, записи и удаления в секунду (всего 600 000 операций с базой данных в секунду). [66] [67]
Актуальный список приложений, использующих LMDB, поддерживается на главном веб-сайте. [68]
Поддержка приложений
[ редактировать ]Многие популярные проекты бесплатного программного обеспечения распространяют или включают поддержку LMDB, часто в качестве основного или единственного механизма хранения.
- Дебиан , [69] Убунту , [70] Федора , [71] и OpenSuSE [72] операционные системы.
- OpenLDAP, для которого LMDB изначально был разработан через назад-MDB . [73]
- Постфикс через адаптер lmdb_table . [74]
- PowerDNS — DNS-сервер.
- CFEngine по умолчанию использует LMDB, начиная с версии 3.6.0. [75]
- Shopify использует LMDB в своей системе SkyDB. [76]
- Knot DNS — высокопроизводительный DNS-сервер.
- Monero — криптовалюта с открытым исходным кодом, созданная в апреле 2014 года и ориентированная на конфиденциальность, децентрализацию и масштабируемость.
- Промежуточное программное обеспечение Enduro/X использует LMDB для дополнительного кэша микросервисов XATMI (SOA). Для первого запроса вызывается реальная служба; в следующем запросе клиентский процесс считывает сохраненный результат непосредственно из LMDB.
- Samba Active Directory Контроллер домена
- Nano — одноранговая криптовалюта с открытым исходным кодом, созданная в 2015 году, в которой приоритет отдается быстрым и бесплатным транзакциям.
- Meilisearch — молниеносная, простая в использовании и очень релевантная поисковая система с открытым исходным кодом. [77]
- LMDB-IndexedDB — это JavaScript-оболочка IndexedDB , обеспечивающая поддержку LMDB в веб-браузерах. [78]
Технические обзоры LMDB
[ редактировать ]LMDB по-новому использует хорошо известные методы информатики, такие как семантика копирования при записи и деревья B+, чтобы обеспечить атомарность и гарантии надежности, а также производительность, которую может быть трудно принять, учитывая относительную простоту библиотеки и отсутствие другого подобного ключа. База данных хранилища значений предлагает те же гарантии или общую производительность, хотя авторы явно заявляют в презентациях, что LMDB оптимизирован для чтения, а не для записи. Кроме того, поскольку LMDB в первую очередь разрабатывался для использования в OpenLDAP , его разработчики сосредоточены в основном на разработке и обслуживании OpenLDAP, а не на LMDB как таковом. Ограниченное время разработчиков, потраченное на представление первых результатов тестов, поэтому подверглось критике за то, что они не указали ограничения и создали впечатление «серебряной пули», неадекватное отношению к позиции инженеров. [79] (Следует отметить, что высказанные опасения позже были адекватно решены, к удовлетворению рецензента, ключевым разработчиком LMDB. [80] )
Презентация побудила других разработчиков баз данных глубже проанализировать код, чтобы понять, как и почему он работает. Обзоры начинаются с краткого обзора [81] для углубления. Разработчик баз данных Орен Эйни написал серию статей из 12 статей о своем анализе LMDB, начиная с 9 июля 2013 года. Вывод был таким: «Впечатляющая кодовая база... очень нуждается в некоторой любви», главным образом из-за слишком длинных методов и дублирование кода. [82] Этот обзор, проведенный разработчиком .NET, не имеющим опыта работы с C , завершился 22 августа 2013 года словами: «Помимо моих проблем с кодом, реализация действительно блестящая. делать что-то весьма впечатляюще... Я многому научился благодаря этому проекту, и это был разочаровывающий, раздражающий и захватывающий опыт». [83]
Множество других обзоров посвящено LMDB. [84] [85] на разных языках, включая китайский. [86] [87]
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Справочное руководство LMDB Проверено 21 марта 2023 г.
- ^ back-mdb — фьючерсы . Проверено 19 октября 2014 г.
- ^ MDB: база данных с отображением в памяти и серверная часть для OpenLDAP . Проверено 22 октября 2018 г.
- ^ Первая общедоступная версия исходного кода MDB . Проверено 16 марта 2020 г.
- ^ MDB переименован в LMDB . Проверено 16 марта 2020 г.
- ^ Чу, Ховард (2011). MDB: база данных, отображаемая в памяти, и серверная часть для OpenLDAP (PDF) . LDAPCon . .
- ^ Дерево B+#Реализация
- ^ «Формат файла LMDB» . Отдельная забота . Проверено 27 февраля 2020 г.
- ^ Чу, Говард. «lmdb — Переносима ли база данных блокчейна Monero между 32- и 64-битными архитектурами, а также между архитектурами с прямым порядком байтов?» . Обмен стеками Monero .
- ^ тесты масштабирования для LMDB
- ^ масштабирование тестов в памяти для LMDB
- ^ «Бенчмарки LevelDB» . Google, Inc. Архивировано из оригинала 20 августа 2011 года . Проверено 8 августа 2014 г.
- ^ Чу, Говард. «Микробенчмарки баз данных» . Symas Corp. Архивировано из оригинала 9 августа 2014 года . Проверено 8 августа 2014 г.
- ^ «Микробенчмарки MDB» . Корпорация Симас , 2012-09 г.
- ^ Микротесты базы данных , Symas Corp., 2012-07.
- ^ «Производительность OpenLDAP MDB и HDB» . Зимбра, ООО
- ^ «OpenLDAP: сравнение производительности back-mdb и back-hdb» . 16 мая 2013 года . Проверено 8 мая 2017 г.
- ^ Чу, Говард. «Микротест в памяти» . Symas Corp. Архивировано из оригинала 9 декабря 2014 г. Проверено 6 декабря 2014 г.
- ^ Чу, Говард. «Микротест на диске» . Symas Corp. Архивировано из оригинала 9 декабря 2014 г. Проверено 6 декабря 2014 г.
- ^ «Эталонные драйверы» . Гитхаб .
- ^ «Обнаружение коррупции LMDB» .
- ^ «ОСДИ 2014» . 08.02.2013.
- ^ Лэнгстон, Марк К.; Скелли, Хэл (2014). OSDI 2014, Все файловые системы не созданы равными: о сложности создания отказоустойчивых приложений . стр. 433–448. ISBN 9781931971164 .
- ^ Лэнгстон, Марк К.; Скелли, Хэл (2014). OSDI 2014, Пытки баз данных ради удовольствия и прибыли . стр. 449–464. ISBN 9781931971164 .
- ^ «Архив обсуждений статьи о пиллайе Usenix 2014» .
- ^ «Обсуждение согласованности сбоев LMDB» .
- ^ Дебру, Лионель (16 июня 2018 г.). «oss-security — удовольствие от баз данных типа DBM…» openwall.com .
- ^ «Объявление о выпуске Berkeley DB» . Корпорация Оракл . 11 июня 2013 г.
Начиная с выпусков 6.0/12c, все продукты Berkeley DB лицензируются по ГЕНЕРАЛЬНОЙ ПУБЛИЧНОЙ ЛИЦЕНЗИИ GNU AFFERO (AGPL), версия 3. Эта лицензия опубликована Фондом свободного программного обеспечения (FSF) (1) и одобрена Инициатива открытого исходного кода (2). Перед обновлением до версии 12c ознакомьтесь с условиями лицензии, чтобы убедиться в их соответствии. Предыдущие версии программного обеспечения Berkeley DB по-прежнему будут распространяться под лицензией Sleepycat.
- ^ Ондржей Суры (2 июля 2013 г.). «Изменение лицензии Berkeley DB 6.0 на AGPLv3» . debian-devel (список рассылки). Дебиан .
- ^ Саймон Фиппс (5 июля 2013 г.). «Oracle меняет лицензию Berkeley DB» . Инфомир .
- ^ «Oracle незаметно переключает BerkeleyDB на AGPL» . Слэшдот . 5 июля 2013 г.
- ^ "Oracle меняет лицензию Berkeley DB" [Oracle Berkeley DB license changes]. Programmers in Ukraine (in Russian). Blogspot . July 22, 2013.
- ^ Жан Элиан (8 июля 2013 г.). «Oracle passe Berkeley DB под лицензией GNU AGPL» [Oracle Berkeley DB переходит под лицензию GNU AGPL] (на французском языке). Ле Монд Информатик.
- ^ Ондржей Суры (2 июля 2013 г.). «Berkeley DB 6.0 выпущен под лицензией AGPLv3» [Berkeley DB 6.0 выпущен под лицензией GPLv3] (на чешском языке). Абклинукс.
- ^ Натан Уиллис (10 июля 2013 г.). «Debian, Berkeley DB и AGPLv3» . LWN.net .
- ^ Дэн Ширер (2 июля 2013 г.). «Изменение лицензии Berkeley DB 6.0 на AGPLv3» . debian-devel (список рассылки). Дебиан .
- ^ Говард Чу (2 июля 2013 г.). «Изменение лицензии Berkeley DB 6.0 на AGPLv3» . debian-devel (список рассылки). Дебиан .
- ^ Ондржей Суры (19 июня 2014 г.). «Цель нового проекта: избавиться от Berkeley DB (после Джесси)» . debian-devel (список рассылки). Дебиан .
- ^ Оболочка LMDB C++11 , 2015-04
- ^ Оболочка LMDB C++ , 2012–11.
- ^ LmdbJava , 2019-04
- ^ Оболочка Python LMDB , 2013-02
- ^ py-lmdb . Проверено 20 октября 2014 г.
- ^ Обертка Lua LMDB , 2013-04.
- ^ напечатанная оболочка LMDB Rust , 2023-01
- ^ высокоуровневая оболочка Rust , 2022-12
- ^ Обертка LMDB Go , 2013-03
- ^ Рубиновая оболочка LMDB , 2013-02.
- ^ Оболочка LMDB Objective-C , 2013-04
- ^ Оболочка LMDB Node.js , 2013-05
- ^ Обертка LMDB .Net , 2013-06
- ^ Обертка Perl LMDB , 2013-08
- ^ PHP-оболочка LMDB , 2015-04.
- ^ tcl-lmdb , 2015-11
- ^ Использование LMDB из Common Lisp , 2016-04.
- ^ «Техническая информация Symas LMDB» .
- ^ «gitorious.org Git — mdb:sqlightning.git/summary» . gitorious.org . Архивировано из оригинала 9 августа 2013 года . Проверено 8 мая 2017 г.
- ^ Тесты SQLightning .
- ^ «Cyrus IMAP — Документация Cyrus IMAP 3.0.1 (стабильная)» . cyrusimap.web.cmu.edu . Архивировано из оригинала 30 апреля 2017 года . Проверено 8 мая 2017 г.
- ^ «Хеймдаль» . h5l.org . Проверено 8 мая 2017 г.
- ^ «ОпенДКИМ» . www.opendkim.org . Проверено 8 мая 2017 г.
- ^ «gitorious.org Git — mdb:memcachedb.git/summary» . gitorious.org . Проверено 8 мая 2017 г.
- ^ «GitHub — m1ch1/mapkeeper: экономное хранилище значений ключей с различными серверными модулями хранения, включая MySQL, Berkeley DB и LevelDB» . github.com . Архивировано из оригинала 9 февраля 2016 года.
- ^ «Второй удар молнии» . Якорь. 09.05.2013.
- ^ «Привязки Python к LMDB» .
- ^ «Python-LMDB в высокопроизводительной среде на Slashdot» . 17 октября 2014 г.
- ^ «Открытое письмо Говарду Чу и Дэвиду Уилсону относительно Python-LMDB» .
- ^ «Список проектов, использующих LMDB» .
- ^ liblmdb0 в Debian . Проверено 20 октября 2014 г.
- ^ Д'Вайн, Ронда. «Ubuntu — Результаты поиска пакетов — lmdb-utils» . packages.ubuntu.com . Проверено 2 января 2018 г.
- ^ LMDB в Fedora 20 . Проверено 20 октября 2014 г.
- ^ lmdb в OpenSUSE . Проверено 20 октября 2014 г.
- ^ OpenLDAP back-mdb . Проверено 20 октября 2014 г.
- ^ Постфикс lmdb_table(5) . Проверено 20 октября 2014 г.
- ^ «Документация CFEngine 3.6 — новое в CFEngine» . docs.cfengine.com . Проверено 8 мая 2017 г.
- ^ «Группы Google» . groups.google.com . Проверено 8 мая 2017 г.
- ^ «Хранилище | Документация Meilisearch v1.0» . Проверено 21 марта 2023 г.
- ^ «LMDB-IndexedDB на GitHub» . Гитхаб . Проверено 2 апреля 2023 г.
- ^ «LMDB: убийца Leveldb?» .
- ^ «Ответ на обзор LMDB» . symas.com . Архивировано из оригинала 11 ноября 2020 года.
- ^ «База данных, отображаемая в памяти Lightning» . Архивировано из оригинала 14 марта 2016 года.
- ^ «Обзор библиотеки базы данных с отображением в памяти Lightning: частичный» .
- ^ «Некоторые заключительные замечания по обзору LMDB» .
- ^ «Обзор проекта: хранилище ключей-значений» . mozilla.github.io .
Мы предлагаем стандартизацию простой системы хранения ключей и значений, основанной на LMDB, которая является быстрой, компактной, многопроцессной и одинаково пригодной для использования в JS, Java, Rust, Swift и C++.
- ^ «ЛМДБ» . Сампатх Херга. Архивировано из оригинала 29 августа 2013 г. Проверено 30 августа 2013 г.
- ^ «Введение в lmdb — краткая книга» .
- ^ "лмдб" . Архивировано из оригинала 5 марта 2016 года . Проверено 8 мая 2017 г.