Lightning Memory-Mapped 데이터베이스
Lightning Memory-Mapped Database| 원저작자 | 하워드 추 |
|---|---|
| 개발자 | Symas |
| 초기 릴리즈 | 2011년 11월 24일, 전( |
| 안정된 릴리스 | 2021년 3월 16일 / 0.9.29; 전 ( |
| 저장소 | |
| 기입처 | C |
| 운영 체제 | Unix, Linux, Windows, AIX, Sun Solaris, SCO Unix, macOS, iOS |
| 크기 | 64 KB |
| 유형 | 임베디드 데이터베이스 |
| 면허증. | OpenLDAP Public License(허용 소프트웨어 라이선스) |
| 웹 사이트 | symas |
Lumning Memory-Mapped Database(LMDB; 라이트닝메모리 맵 데이터베이스)는 키 값 스토어 형식으로 내장된 트랜잭션 데이터베이스를 제공하는 소프트웨어 라이브러리입니다.LMDB는 여러 프로그래밍 언어에 대한 API 바인딩과 함께 C로 작성됩니다.LMDB는 임의의 키/데이터 쌍을 바이트 배열로 저장하고 범위 기반 검색 기능을 제공하며 단일 키에 대해 여러 데이터 항목을 지원하며 일관성을 [1]검사하지 않고 레코드를 추가하는 특수 모드(MDB_APPEND)를 갖추고 있습니다.LMDB는 관계형 데이터베이스가 아니라 Berkeley DB 및 dbm과 같은 키 값 저장소입니다.
LMDB는 멀티 스레드 또는 멀티 프로세싱 환경에서 동시에 사용할 수도 있으며, 설계에 따라 읽기 성능이 선형으로 확장됩니다.LMDB 데이터베이스에는 한 번에 하나의 라이터만 있을 수 있지만 많은 유사한 키-값 데이터베이스와 달리 쓰기 트랜잭션은 독자를 차단하지 않으며 독자도 라이터를 차단하지 않습니다.또한 LMDB는 동일한 시스템 상의 여러 애플리케이션이 동시에 열려 성능을 확장하는 수단으로 동일한 LMDB 저장소를 사용할 수 있다는 점에서 특이합니다.또한 LMDB는 본질적으로 데이터 무결성을 유지하기 때문에 트랜잭션 로그가 필요하지 않습니다(따라서 데이터를 두 번 쓸 필요가 없으므로 쓰기 성능이 향상됩니다).
역사
LMDB의 설계는 프로젝트의 Berkeley DB 의존으로 야기된 캐시 관리 문제에 대한 해결책을 탐색하는 맥락에서 OpenLDAP 개발자 메일링 목록에 [2]대한 2009년 게시물에서 처음 논의되었습니다.구체적인 목표는 Berkeley DB 설계에 내재된 구성 및 캐싱의 여러 계층을 호스트 운영 체제의 제어 하에 자동으로 관리되는 단일 캐시로 대체하는 것이었습니다.
그 후 OpenBSD ldapd [3]프로젝트와 유사한 구현의 포크로 개발이 시작되었습니다.OpenLDAP 소스 저장소에 공개된 첫 번째 버전은 2011년 [4]6월에 공개되었습니다.
이 프로젝트는 2012년 11월까지 MDB로 알려졌으며 이후 기존 [5]소프트웨어와의 충돌을 피하기 위해 이름이 변경되었습니다.
기술 설명
내부적으로 LMDB는 B+ 트리 데이터 구조를 사용합니다.설계의 효율성과 작은 설치 공간도 뛰어난 쓰기 성능을 제공하는 의도하지 않은 부작용을 낳았습니다.LMDB에는 Berkeley DB 및 dbm과 유사한 API가 있습니다.LMDB는 컴퓨터의 메모리를 단일 주소 공간으로 취급하며, 여러 프로세스 또는 스레드 간에 공유되며, 카피 온 라이트(Copy-on-Write) 시멘틱스를 가진 공유 메모리를 사용합니다(역사적으로 단일 수준 저장소로 알려져 있음).대부분의 최신 컴퓨팅 아키텍처는 32비트 메모리 주소 공간 제한을 가지고 있으며, 이러한 기술을 사용하는 데이터베이스 크기에 4GB의 하드 제한을 가하고 있기 때문에 데이터베이스를 단일 레벨 저장소에 직접 매핑하는 기술의 효율은 엄격히 제한되었습니다.그러나 현재 64비트 프로세서는 대부분 48비트 주소 공간을 구현하여 47비트 주소 또는 128테라바이트의 데이터베이스 [6]크기에 액세스할 수 있으므로 공유 메모리를 사용하는 데이터베이스가 실제 애플리케이션에서 다시 한 번 유용합니다.
LMDB의 주목할 만한 기술적 특징은 다음과 같습니다.
- B+ 트리의 사용.LMDB 인스턴스가 공유 메모리에 있고 B+ 트리 블록 크기가 OS 페이지 크기로 설정되어 있는 경우 LMDB 저장소에 대한 접근은 매우 효율적입니다[7].
- 새 데이터는 기존 데이터를 덮어쓰거나 이동하지 않고 작성됩니다.이를 통해 트랜잭션 로그나 정리 서비스를 필요로 하지 않고도 데이터 무결성과 신뢰성을 보장할 수 있습니다.
- 새로운 레코드를 B+ 트리의 끝에 직접 추가할 수 있도록 함으로써 구현되는 고유한 추가 쓰기 모드(MDB_APPEND)[1]의 프로비저닝.이로 인해 페이지 읽기 및 쓰기 작업이 줄어들어 성능이 크게 향상되지만, DB에 저장할 때 키가 정렬되어 있는지 프로그래머가 확인해야 합니다.
- Copy-on-Write 시멘틱스는 데이터 무결성을 보장하고 트랜잭션 보증과 현재 라이터에 의한 잠금 없이 독자에 의한 동시 액세스를 제공합니다.데이터 수정 시 내부적으로 필요한 새로운 메모리 페이지는 기본 OS에 의해 Copy-on-Write 시멘틱스를 통해 할당됩니다.LMDB 라이브러리 자체는 실제로 리더가 액세스하는 오래된 데이터를 수정하지 않습니다.공유 메모리 업데이트는 메모리 페이지의 완전히 독립된 복사본을 자동으로 만듭니다.g 기입처.
- LMDB는 메모리 매핑되므로 API를 통해 키와 값의 메모리 주소로 직접 포인터를 반환할 수 있으므로 불필요하고 비싼 메모리 복사를 피할 수 있습니다.따라서 성능이 크게 향상되고(특히 저장된 값이 매우 큰 경우), LMDB의 잠재적인 사용 사례가 확대됩니다.
- 또한 LMDB는 B+ 트리를 사용하여 사용되지 않는 메모리 페이지를 추적하여 트랜잭션 중에 해방된(더 이상 필요하지 않은) 페이지를 추적합니다.사용되지 않는 페이지를 추적함으로써 가비지 수집(및 CPU 사이클을 소비하는 가비지 수집 단계)의 필요성을 완전히 회피할 수 있습니다.새 페이지가 필요한 트랜잭션은 먼저 이 사용되지 않는 빈 페이지 트리에서 페이지가 주어집니다. 이러한 페이지를 모두 사용한 후에만 기본 메모리 매핑 파일의 이전에 사용되지 않은 영역으로 확장됩니다.스파스 파일이 지원되는 최신 파일 시스템에서는 실제 디스크 사용량을 최소화하는 데 도움이 됩니다.
LMDB의 파일 형식은 버클리 DB와 달리 아키텍처에 의존합니다.즉, 데이터베이스를 32비트 머신에서 64비트 [8]머신으로 이동하기 전에 또는 엔디안성이 [9]다른 컴퓨터 간에 변환을 수행해야 합니다.
동시성
LMDB는 Multi Version Concurrency Control(MVCC; 다중 버전 동시 제어)을 사용하여 여러 프로세스 내의 여러 스레드를 사용하여 데이터베이스에 대한 동시 액세스를 조정할 수 있습니다.리더는 설계에 따라[10][11] 선형적으로 확장됩니다.쓰기 트랜잭션은 뮤텍스를 통해 글로벌하게 직렬화되지만 읽기 전용 트랜잭션은 쓰기 트랜잭션의 존재를 포함하여 병렬로 작동하며 스레드 상의 첫 번째 읽기 전용 트랜잭션을 제외하고 완전히 대기 상태가 아닙니다.데이터베이스에서 읽어낸 각 스레드는 공유 메모리 어레이 내의 요소의 소유권을 취득하고, 이를 갱신하여 트랜잭션 내에 있을 때를 나타낼 수 있다.라이터는 액티브 리더와 직접 동기화할 필요 없이 어레이를 스캔하여 트랜잭션이 유지해야 하는 가장 오래된 데이터베이스 버전을 결정합니다.
성능
2011년 구글은 다양한 [12]시나리오에서 레벨 DB의 성능을 SQLite 및 교토 캐비닛과 비교하는 마이크로 벤치마크(micro-benchmark)를 생성할 수 있는 소프트웨어를 공개했습니다.2012년에 Symas는 LMDB와 Berkeley DB에 대한 지원을 추가하였고 업데이트된 벤치마킹 소프트웨어를 공개적으로 사용할 [13]수 있게 되었습니다.결과 벤치마크에서는 LMDB가 읽기 및 배치 쓰기 작업에서 다른 모든 데이터베이스를 능가하는 성능을 보였습니다.LMDB를 사용하는 SQLite는 쓰기 작업, 특히 동기/트랜잭션 쓰기 작업에 탁월했습니다.
벤치마크에서는 기본 파일 시스템이 성능에 큰 영향을 미치는 것으로 나타났습니다.외부 저널이 있는 JFS는 특히 Btrfs 및 ZFS와 [14][15]같은 다른 최신 시스템에 비해 성능이 우수합니다.Zimbra는 OpenLDAP에서 back-mdb와 back-hdb의 성능을 테스트했습니다.LMDB는 BDB 기반의 back-hdb를 [16]확실히 능가합니다.다른 OpenLDAP 사용자들도 비슷한 [17]이점을 경험하고 있습니다.
2012년에 실시된 최초의 벤치마킹 작업 이후, 인메모리 워크로드와 디스크 워크로드 모두에 대해 추가 데이터베이스 엔진을 사용하여 여러 CPU와 레코드 크기의 성능을 특징짓는 여러 후속 테스트가 수행되었습니다.이러한 테스트에 따르면 LMDB의 성능은 모든 메모리 내 워크로드에서 타의 추종을 불허하며, 모든 디스크 바인딩 읽기 워크로드 및 큰 레코드 크기를 사용하는 디스크 바인딩 쓰기 워크로드에서 탁월합니다.벤치마크 드라이버 코드는 이후 GitHub에[20] 공개되었으며 데이터베이스 커버리지로 더욱 확장되었습니다.
신뢰성.
LMDB는 시스템 및 애플리케이션 충돌 시 데이터 손실을 방지하기 위해 처음부터 설계되었습니다.Copy-on-Write 방식은 현재 사용 중인 데이터를 덮어쓰지 않습니다.덮어쓰기를 방지한다는 것은 디스크/스토리지 구조가 항상 유효하다는 것을 의미하므로 애플리케이션 또는 시스템 크래시로 인해 데이터베이스가 손상되는 일이 없습니다.기본 모드에서는 크래시가 발생할 경우 마지막으로 커밋되지 않은 쓰기 트랜잭션에서 데이터가 손실될 수 있습니다.모든 비동기 모드가 유효하게 되어 있어도, 이것은 OS 의 치명적인 장해나 하드웨어의[21] 전원 손실의 이벤트일 뿐이며, 단순한 애플리케이션 크래시가 아니고, 데이터 파손의 원인이 될 가능성이 있습니다.
USENIX OSDI[22] 심포지엄의 2개의 학술논문에서는 갑작스런 정전 또는 시스템 크래시 [23][24]시 DB 엔진(LMDB 포함)의 고장 모드를 다루었습니다.Pilai 등의 논문은 LMDB에서 고려된 실제 파일 시스템에서 발생할 수 있는 장애를 발견하지 못했습니다. LMDB의 연구에서 확인된 단일 장애는 가상 파일 [25]시스템과만 관련이 있습니다.Mai Jheng 등 논문은 LMDB의 고장을 지적한다고 주장하지만, 결론은 fsync 또는 fdataasync의 활용 여부에 달려 있다.fsync를 사용하면 문제가 개선됩니다.fsync 또는 fdatasync는 컴파일 시 스위치로, LMDB의 현재 Linux 빌드에서는 기본 동작은 아니지만 macOS, *BSD, Android 및 Windows에서는 기본 동작입니다.따라서 LMDB의 기본 Linux 빌드는 정마이 연구자에 의해 발견된 문제에 취약한 유일한 것이지만, LMDB는 Linux 사용자가 [26]fsync를 사용하기 위해 재구축할 수 있습니다.
퍼징에 의해 생성된 데이터베이스 등 파손된 데이터베이스가 제공되면 LMDB가 크래쉬할 수 있습니다.LMDB의 작성자는 이 사례가 우려될 가능성이 낮다고 생각하지만, 그럼에도 불구하고 별도의 [27]지점에 부분적인 수정을 가했다.
오픈 소스 라이선스
2013년 6월 Oracle은 Berkeley DB(관련 프로젝트)의 라이센스를 Sleepycat 라이센스에서 Affero General Public [28]License로 변경함으로써 광범위한 애플리케이션에서 사용을 제한했습니다.이로 인해 Debian 프로젝트에서는 6.0 이후 라이브러리가 제외되었습니다.또한 이 라이선스는 상업적 재배포업자에게 우호적이지 않다는 비판도 받았다.LMDB에도 같은 라이선스 변경이 일어날 수 있는지에 대한 논의가 시작되었습니다.작성자 Howard Chu는 LMDB는 참여하기 전에 BSD 스타일의 라이선스를 가지고 있던 OpenLDAP 프로젝트의 일부이며 앞으로도 그럴 것임을 분명히 했습니다.체크인을 해도 저작권이 누구에게 넘어가지 않기 때문에 오라클과 비슷한 움직임이 일어날 [29][30][31][32][33][34][35][36][37]수 있습니다.
Berkeley DB 라이센스 문제로 인해 Debian과 같은 주요 Linux 디스트리뷰션에서는 LMDB를 [38]우선하여 Berkeley DB 사용을 완전히 중단했습니다.
API 및 용도
C++,[39][40] Java,[41] [42][43]Python, Lua,[44] Go,[45] [46]Ruby, Objective C,[47] Javascript,[48] C#,[49] Perl,[50] PHP,[51] Tcl[52] 및 Common [53]Lisp와 같은 여러 프로그래밍 언어에 대한 래퍼가 있습니다.전체 래퍼 목록은 메인 웹 사이트에서 [54]확인할 수 있습니다.
Howard Chu는 원래 B 트리 코드 대신 LMDB를 사용하도록 SQLite 3.7.1을 포트화하여 최종 결과를 SQLightning이라고 [55]불렀습니다.한 예로 1000개의 레코드에 대한 삽입 테스트가 B-Tree를 [56]구현한 원래 SQLite보다 20배 더 빨랐다고 합니다.LMDB는 Cyrus SASL,[57] Heimdal Kerberos [58]및 OpenDKIM을 [59]포함한 다른 오픈 소스 프로젝트의 백업 저장소로 사용할 수 있습니다.또한 MemcacheDB 및 [61]Mapkeeper와 같은 다른 NoSQL 프로젝트에서도 사용할 수 있습니다.LMDB는 메모리 내 저장소 Redis가 디스크에 데이터를 유지하도록 하기 위해 사용되었습니다.레디스의 기존 백엔드는 드문 경우에서 병리학적 행동을 보였으며, 이를 대체할 수 있는 방법을 모색했다.하지만 LMDB의 바로크 API는 비판을 받았고, 간단한 작업을 하기 위해 많은 코딩이 필요했습니다.그러나 테스트 중 성능과 신뢰성은 [62]다른 백엔드 스토어보다 훨씬 우수했습니다.
한 독립 타사 소프트웨어 개발자는 고성능 환경에서 LMDB에[63] 대한 Python 바인딩을 활용했으며, 이 시스템이 초당 200,000회의 동시 읽기, 쓰기 및 삭제 작업(총 [64][65]초당 600,000회의 데이터베이스 작업)을 성공적으로 유지하는 방법에 대해 기술 뉴스 사이트 Slashdot에 게시했습니다.
LMDB를 사용하는 응용 프로그램의 최신 목록은 메인 [66]웹 사이트에 유지됩니다.
응용 프로그램 지원
널리 사용되는 많은 무료 소프트웨어 프로젝트에서는 LMDB 지원을 배포하거나 포함하고 있으며, 종종 프라이머리 스토리지 또는 단독 스토리지 메커니즘으로 사용됩니다.
- Debian,[67] Ubuntu,[68] Fedora [69]및 OpenSuSE[70] 운영 체제.
- LMDB가 최초로 개발된 OpenLDAP은백 [71]mdb
- lmdb_table [72]어댑터를 통한 포스트픽스.
- PowerDNS, DNS 서버
- CFEngine은 3.6.[73]0 버전 이후 디폴트로 LMDB를 사용합니다.
- Shopify는 [74]SkyDB 시스템에서 LMDB를 사용합니다.
- 고성능 DNS 서버에 DNS를 결합합니다.
- Monero는 프라이버시, 분산화 및 확장성에 초점을 맞춘 오픈 소스 암호 화폐입니다.
- Enduro/X 미들웨어는 옵션의 XATMI Microservices(SOA) 캐시에 LMDB를 사용합니다.따라서 첫 번째 요청에서는 실제 서비스가 호출되고 다음 요청에서는 클라이언트 프로세스가 저장된 결과를 LMDB에서 직접 읽습니다.
- Samba Active Directory 도메인 컨트롤러
LMDB 기술 검토
LMDB는 Copy-on-Write 시멘틱스 및 B+ 트리와 같은 잘 알려진 컴퓨터 과학 기술을 참신하게 사용하여 라이브러리의 상대적 단순성과 다른 유사한 키 값 저장 데이터베이스가 동일한 보증이나 전반적인 성능을 제공하지 않는 경우, 수용하기 어려운 성능을 제공합니다.그러나 저자는 프레젠테이션에서 LMDB가 쓰기 최적화가 아니라 읽기 최적화라고 명시적으로 진술한다.또한 LMDB는 주로 OpenLDAP에서 사용하기 위해 개발되었기 때문에 개발자들은 주로 LMDB 그 자체가 아닌 OpenLDAP의 개발과 유지보수에 초점을 맞추고 있다.개발자들은 한계를 전달하는 정도가 아닌 첫번째 벤치 마크 결과가 비난 받았다를 제시하고 있습니다. 그리고"왕도 인상" 적절하지 않는 엔지니어들을 모시고 연설을 하게 attitude[75](그것은 우려를 제기 하지만 나중에 적절히 리뷰어의 만족을 위해서 k.로 언급되었다 지적할 시간을 보냈다를 제한했다ey LMDB의 배후에 있는 개발자).[76][77]
이 프레젠테이션은 다른 데이터베이스 개발자들이 이 코드가 어떻게 왜 동작하는지 이해하기 위해 심도 있게 해석하는 계기가 되었습니다.리뷰는 간결함부터 상세함까지 있습니다.데이터베이스 개발자인 Oren Eini는 2013년 7월 9일부터 LMDB 분석에 대한 12부작의 기사를 작성했습니다.결론은 "인상적인 코드베이스... 사랑이 절실히 필요하다"는 것이었다. 주로 너무 긴 메서드와 코드 [79]복제 때문이다.이 리뷰는 에 의해 실행됩니다.2013년 8월 22일, C의 경험이 없는 NET 개발자는 다음과 같이 결론지었다. "코드에 관한 문제를 넘어 구현은 매우 훌륭합니다.LMDB가 일을 하지 않고 많은 기능을 갖춘 것은 매우 인상적입니다.저는 이 프로젝트를 통해 많은 것을 배웠습니다.그것은 좌절과 짜증, 그리고 매혹적인 [80]경험이었습니다.」
다른 여러 리뷰에서는 [82][83]중국어를 포함한 다양한 언어로 LMDB를 다루고[81] 있습니다.
레퍼런스
- ^ a b LMDB 참조 가이드 2014-10-20 웨이백 머신에 보관.2014년 10월 19일 취득
- ^ back-mdb - 미래.2014년 10월 19일 취득
- ^ MDB: OpenLDAP용 메모리 매핑 데이터베이스 및 백엔드.2018-10-22 취득
- ^ MDB 소스 코드의 첫 번째 공개 버전입니다.2020-03-16 취득
- ^ MDB를 LMDB로 변경. 2020-03-16 취득.
- ^ 를 클릭합니다Chu, Howard (2011). MDB: A Memory-Mapped Database and Backend for OpenLDAP (PDF). LDAPCon..
- ^ B+ 트리 # 구현
- ^ "The LMDB file format". Separate Concern. Retrieved 27 February 2020.
- ^ Chu, Howard. "lmdb - Is the Monero blockchain database portable between 32 and 64 bit architectures, and little/big endian architectures?". Monero Stack Exchange.
- ^ 스케일링, LMDB의 벤치마크
- ^ 메모리 내 벤치마크 스케일링, LMDB용
- ^ "LevelDB Benchmarks". Google, Inc. Archived from the original on 20 August 2011. Retrieved 8 August 2014.
- ^ Chu, Howard. "Database Microbenchmarks". Symas Corp. Archived from the original on 9 August 2014. Retrieved 8 August 2014.
- ^ "MDB Microbenchmarks". Symas Corp., 2012-09년
- ^ Database Microbenchmarks, Symas Corp., 2012-07.
- ^ "OpenLDAP MDB vs HDB performance". Zimbra, Inc.
- ^ "OpenLDAP: A comparison of back-mdb and back-hdb performance". 16 May 2013. Retrieved 8 May 2017.
- ^ Chu, Howard. "In-Memory Microbenchmark". Symas Corp. Archived from the original on 2014-12-09. Retrieved 2014-12-06.
- ^ Chu, Howard. "On-Disk Microbenchmark". Symas Corp. Archived from the original on 2014-12-09. Retrieved 2014-12-06.
- ^ "Benchmark Drivers".
- ^ "LMDB Corruption detection".
- ^ "OSDI 2014". 2013-02-08.
- ^ Langston, Mark C.; Skelly, Hal (2014). OSDI 2014, All File Systems Are Not Created Equal: On the Complexity of Crafting Crash-Consistent Applications. pp. 433–448. ISBN 9781931971164.
- ^ Langston, Mark C.; Skelly, Hal (2014). OSDI 2014, Torturing Databases for Fun and Profit. pp. 449–464. ISBN 9781931971164.
- ^ "Archive of discussion regarding the Usenix 2014 pillai paper".
- ^ "LMDB Crash consistency discussion".
- ^ Debroux, Lionel (16 Jun 2018). "oss-security - Fun with DBM-type databases..." openwall.com.
- ^ "Berkeley DB Release Announcement". Oracle Corporation.
Starting with the 6.0 / 12c releases, all Berkeley DB products are licensed under the GNU AFFERO GENERAL PUBLIC LICENSE (AGPL), version 3. This license is published by the Free Software Foundation (FSF) (1) and approved by the Open Source Initiative (2). Please review the terms of the license to ensure compliance before upgrading to the 12c release. Previous releases of Berkeley DB software will continue to be distributed under the Sleepycat license.
- ^ Ondřej Surý (July 2, 2013). "Berkeley DB 6.0 license change to AGPLv3". debian-devel (Mailing list). Debian.
- ^ Simon Phipps (July 5, 2013). "Oracle switches Berkeley DB license". InfoWorld.
- ^ "Oracle Quietly Switches BerkeleyDB to AGPL". Slashdot.
- ^ "Oracle меняет лицензию Berkeley DB" [Oracle Berkeley DB license changes]. Programmers in Ukraine (in Russian). Blogspot. July 22, 2013.
- ^ Jean Elyan (July 8, 2013). "Oracle passe Berkeley DB sous licence GNU AGPL" [Oracle Berkeley DB passes under GNU AGPL] (in French). Le Monde Informatique.
- ^ Ondřej Surý (July 2, 2013). "Berkeley DB 6.0 vydána pod licencí AGPLv3" [Berkeley DB 6.0 is released under the GPLv3 license] (in Czech). Abclinuxu.
- ^ Nathan Willis (July 10, 2013). "Debian, Berkeley DB, and AGPLv3". LWN.net.
- ^ Dan Shearer (July 2, 2013). "Berkeley DB 6.0 license change to AGPLv3". debian-devel (Mailing list). Debian.
- ^ Howard Chu (July 2, 2013). "Berkeley DB 6.0 license change to AGPLv3". debian-devel (Mailing list). Debian.
- ^ Ondřej Surý (June 19, 2014). "New project goal: Get rid of Berkeley DB (post jessie)". debian-devel (Mailing list). Debian.
- ^ LMDB C++11 래퍼, 2015-04
- ^ LMDB C++ 래퍼, 2012-11.
- ^ LmdbJava, 2019-04
- ^ LMDB Python 래퍼, 2013-02
- ^ py-lmdb.2014년 10월 20일에 회수.
- ^ LMDB Lua 래퍼, 2013-04.
- ^ LMDB Go 래퍼, 2013-04
- ^ LMDB 루비 래퍼, 2013-02
- ^ LMDB Objective-C 래퍼, 2013-04
- ^ LMDB Node.js 래퍼, 2013-05
- ^ LMDB .Net 래퍼, 2013-06
- ^ LMDB Perl 래퍼, 2013-08
- ^ LMDB PHP 래퍼, 2015-04
- ^ tcl-lmdb, 2015-11
- ^ Common Lisp의 LMDB 사용, 2016-04
- ^ "List of API wrappers for LMDB".
- ^ "gitorious.org Git - mdb:sqlightning.git/summary". gitorious.org. Archived from the original on 9 August 2013. Retrieved 8 May 2017.
- ^ SQLightning 테스트
- ^ "Cyrus IMAP — Cyrus IMAP 3.0.1 (stable) documentation". cyrusimap.web.cmu.edu. Archived from the original on 30 April 2017. Retrieved 8 May 2017.
- ^ "Heimdal". h5l.org. Retrieved 8 May 2017.
- ^ "OpenDKIM". www.opendkim.org. Retrieved 8 May 2017.
- ^ "gitorious.org Git - mdb:memcachedb.git/summary". gitorious.org. Retrieved 8 May 2017.
- ^ "m1ch1/mapkeeper". GitHub. Retrieved 8 May 2017.
- ^ "Second Strike With Lightning". Anchor. 2013-05-09.
- ^ "Python bindings to LMDB".
- ^ "Python-LMDB in a high-performance environment on Slashdot".
- ^ "Open letter to Howard Chu and David Wilson regarding Python-LMDB".
- ^ "List of projects using LMDB".
- ^ debian의 liblmdb0.2014년 10월 20일 취득.
- ^ rhonda@ubuntu.com, Rhonda D'Vine. "Ubuntu – Package Search Results -- lmdb-utils". packages.ubuntu.com. Retrieved 2 Jan 2018.
- ^ Fedora 20의 LMDB.2014년 10월 20일 취득.
- ^ OpenSUSE의 lmdb. 2014-10-20을 취득했습니다.
- ^ OpenLDAP back-mdb.2014-10-20 취득
- ^ postfix lmdb_table(5).2014-10-20 취득
- ^ "CFEngine 3.6 Documentation - New in CFEngine". docs.cfengine.com. Retrieved 8 May 2017.
- ^ "Google Groups". groups.google.com. Retrieved 8 May 2017.
- ^ "LMDB: The Leveldb Killer?".
- ^ "Response to LMDB review". 2013-08-19.
- ^ LMDB: 레벨드비 킬러?2014년 10월 20일 취득.
- ^ "Lightning Memory-Mapped Database".
- ^ "Reviewing Lightning memory-mapped database library: Partial".
- ^ "Some final notes about LMDB review".
- ^ "LMDB". Sampath Herga. Archived from the original on 2013-08-29. Retrieved 2013-08-30.
- ^ "lmdb".
- ^ "lmdb". Archived from the original on 5 March 2016. Retrieved 8 May 2017.