Articulo de referencia

Base de datos mapeada en memoria Lightning

Lightning Memory-Mapped Database ( LMDB ) es una base de datos transaccional integrada en forma de almacén clave-valor . LMDB está escrita en C con enlaces API para varios lengu...

Lightning Memory-Mapped Database ( LMDB ) es una base de datos transaccional integrada en forma de almacén clave-valor . LMDB está escrita en C con enlaces API para varios lenguajes de programación . LMDB almacena pares clave/dato arbitrarios como matrices de bytes, tiene capacidad de búsqueda basada en rangos, admite múltiples elementos de datos para una sola clave y tiene un modo especial para agregar registros (MDB_APPEND) sin verificar la consistencia. [ 1 ] LMDB no es una base de datos relacional , es estrictamente un almacén clave-valor como Berkeley DB y DBM .

LMDB también puede utilizarse simultáneamente en entornos multihilo o multiprocesamiento, con un rendimiento de lectura que escala linealmente por diseño. Las bases de datos LMDB solo pueden tener un escritor a la vez; sin embargo, a diferencia de muchas bases de datos clave-valor similares, las transacciones de escritura no bloquean a los lectores, ni los lectores a los escritores. LMDB también se distingue porque permite que varias aplicaciones en el mismo sistema abran y utilicen simultáneamente el mismo almacén LMDB, lo que permite escalar el rendimiento. Además, LMDB no requiere un registro de transacciones (lo que aumenta el rendimiento de escritura al no tener que escribir los datos dos veces) porque mantiene la integridad de los datos de forma inherente por diseño.

Historia

El diseño de LMDB se discutió por primera vez en una publicación de 2009 en la lista de correo de desarrolladores de OpenLDAP , [ 2 ] en el contexto de la exploración de soluciones a la dificultad de gestión de caché causada por la dependencia del proyecto de Berkeley DB . Un objetivo específico era reemplazar las múltiples capas de configuración y almacenamiento en caché inherentes al diseño de Berkeley DB con una única caché administrada automáticamente bajo el control del sistema operativo del host .

Posteriormente se inició el desarrollo, inicialmente como una bifurcación de una implementación similar del proyecto ldapd de OpenBSD . [ 3 ] La primera versión disponible públicamente apareció en el repositorio de código fuente de OpenLDAP en junio de 2011. [ 4 ]

El proyecto se conocía como MDB hasta noviembre de 2012, después de lo cual se le cambió el nombre para evitar conflictos con el software existente. [ 5 ]

Descripción técnica

Internamente, LMDB utiliza estructuras de datos de árbol B+ . La eficiencia de su diseño y su reducido tamaño tuvieron el efecto secundario no deseado de proporcionar también un buen rendimiento de escritura. LMDB tiene una API similar a la de Berkeley DB y dbm . LMDB trata la memoria del ordenador como un único espacio de direcciones, compartido entre múltiples procesos o hilos mediante memoria compartida con semántica de copia en escritura (conocida históricamente como almacenamiento de un solo nivel ). La mayoría de las arquitecturas informáticas modernas anteriores tenían un espacio de direcciones de memoria de 32 bits , lo que imponía un límite estricto de 4 GB al tamaño de cualquier base de datos que se mapeara directamente en un almacenamiento de un solo nivel. Sin embargo, los procesadores de 64 bits actuales implementan en su mayoría espacios de direcciones de 48 bits, lo que proporciona acceso a direcciones de 47 bits o 128  TB de tamaño de base de datos, [ 6 ] haciendo que las bases de datos que utilizan memoria compartida vuelvan a ser útiles en aplicaciones del mundo real.

Las características técnicas específicas más destacables de LMDB son:

  • Su uso del árbol B+ . Con una instancia de LMDB en memoria compartida y el tamaño del bloque del árbol B+ configurado al tamaño de página del sistema operativo, el acceso a un almacenamiento LMDB es extremadamente eficiente en cuanto a memoria. [ 7 ]
  • Los nuevos datos se escriben sin sobrescribir ni mover los datos existentes. Esto garantiza la integridad y la fiabilidad de los datos sin necesidad de registros de transacciones ni servicios de limpieza.
  • La provisión de un modo de escritura y adición único (MDB_APPEND) [ 1 ] se implementa permitiendo que el nuevo registro se agregue directamente al final del árbol B+ . Esto reduce la cantidad de operaciones de lectura y escritura de páginas, lo que resulta en un rendimiento mucho mayor, pero requiere que el programador se asegure de que las claves ya estén ordenadas al almacenarlas en la base de datos.
  • La semántica de copia en escritura ayuda a garantizar la integridad de los datos , además de proporcionar garantías transaccionales y acceso simultáneo por parte de los lectores sin necesidad de bloqueo, incluso por parte del escritor actual. Las nuevas páginas de memoria necesarias internamente durante las modificaciones de datos se asignan mediante la semántica de copia en escritura por el sistema operativo subyacente: la propia biblioteca LMDB nunca modifica los datos antiguos a los que acceden los lectores porque simplemente no puede hacerlo: cualquier actualización de memoria compartida crea automáticamente una copia completamente independiente de la página de memoria en la que se está escribiendo.
  • Dado que LMDB utiliza mapeo de memoria, puede devolver punteros directos a las direcciones de memoria de las claves y los valores a través de su API, evitando así copias de memoria innecesarias y costosas. Esto se traduce en un rendimiento mucho mayor (especialmente cuando los valores almacenados son extremadamente grandes) y amplía los posibles casos de uso de LMDB.
  • LMDB también realiza un seguimiento de las páginas de memoria no utilizadas, utilizando un árbol B+ para controlar las páginas liberadas (que ya no son necesarias) durante las transacciones. Al controlar las páginas no utilizadas, se evita por completo la necesidad de recolección de basura (y una fase de recolección de basura que consumiría ciclos de CPU). Las transacciones que necesitan páginas nuevas reciben primero páginas de este árbol de páginas libres no utilizadas; solo después de que estas se agoten, se expandirá a áreas previamente no utilizadas del archivo mapeado en memoria subyacente . En un sistema de archivos moderno con soporte para archivos dispersos , esto ayuda a minimizar el uso real del disco.

El formato de archivo de LMDB, a diferencia del de Berkeley DB , depende de la arquitectura. Esto significa que se debe realizar una conversión antes de mover una base de datos de una máquina de 32 bits a una de 64 bits, [ 8 ] o entre computadoras con diferente orden de bytes . [ 9 ]

Concurrencia

LMDB emplea control de concurrencia multiversión (MVCC) y permite que múltiples hilos dentro de múltiples procesos coordinen el acceso simultáneo a una base de datos. Los lectores escalan linealmente por diseño. [ 10 ] [ 11 ] Mientras que las transacciones de escritura se serializan globalmente a través de un mutex , las transacciones de solo lectura operan en paralelo, incluso en presencia de una transacción de escritura. No requieren espera alguna, excepto la primera transacción de solo lectura en un hilo. Cada hilo que lee de una base de datos obtiene la propiedad de un elemento en una matriz de memoria compartida, que puede actualizar para indicar cuándo está dentro de una transacción. Los escritores escanean la matriz para determinar la versión más antigua de la base de datos que la transacción debe conservar sin requerir sincronización directa con los lectores activos.

Actuación

En 2011, Google publicó un software que permitía a los usuarios generar microbenchmarks comparando el rendimiento de LevelDB con SQLite y Kyoto Cabinet en diferentes escenarios. [ 12 ] En 2012, Symas añadió soporte para LMDB y Berkeley DB y puso a disposición del público el software de benchmarking actualizado. [ 13 ] Los benchmarks resultantes mostraron que LMDB superó a todas las demás bases de datos en operaciones de lectura y escritura por lotes. SQLite con LMDB sobresalió en operaciones de escritura, y particularmente en escrituras síncronas/transaccionales.

Las pruebas de rendimiento mostraron que el sistema de archivos subyacente tiene una gran influencia en el rendimiento. JFS con un registro externo funciona bien, especialmente en comparación con otros sistemas modernos como Btrfs y ZFS . [ 14 ] [ 15 ] Zimbra ha probado el rendimiento de back-mdb frente a back-hdb en OpenLDAP, con LMDB superando claramente al back-hdb basado en BDB. [ 16 ] Muchos otros usuarios de OpenLDAP han observado beneficios similares. [ 17 ]

Desde el trabajo inicial de evaluación comparativa realizado en 2012, se han llevado a cabo múltiples pruebas de seguimiento con motores de bases de datos adicionales para cargas de trabajo tanto en memoria [ 18 ] como en disco [ 19 ], caracterizando el rendimiento en múltiples CPU y tamaños de registro. Estas pruebas muestran que el rendimiento de LMDB es inigualable en todas las cargas de trabajo en memoria y sobresale en todas las cargas de trabajo de lectura y escritura en disco con grandes tamaños de registro. El código del controlador de evaluación comparativa se publicó posteriormente en GitHub [ 20 ] y se amplió aún más su cobertura de bases de datos.

Fiabilidad

LMDB fue diseñado para resistir la pérdida de datos ante fallos del sistema y de las aplicaciones. Su enfoque de copia en escritura nunca sobrescribe los datos que se están utilizando. Evitar las sobrescrituras significa que la estructura en el disco/almacenamiento siempre es válida, por lo que los fallos de la aplicación o del sistema nunca pueden dejar la base de datos en un estado corrupto. En su modo predeterminado, en el peor de los casos, un fallo puede perder datos de la última transacción de escritura aún no confirmada. Incluso con todos los modos asíncronos habilitados, solo un fallo catastrófico del sistema operativo o una pérdida de energía del hardware [ 21 ], y no simplemente un fallo de la aplicación, podría potencialmente resultar en alguna corrupción de datos .

Dos artículos académicos del Simposio USENIX OSDI [ 22 ] cubrieron los modos de falla de los motores de DB (incluido LMDB) bajo una pérdida repentina de energía o caída del sistema. [ 23 ] [ 24 ] El artículo de Pillai et al. no encontró ninguna falla en LMDB que ocurriría en los sistemas de archivos del mundo real considerados; la única falla identificada por el estudio en LMDB solo se relaciona con sistemas de archivos hipotéticos. [ 25 ] El artículo de Mai Zheng et al. afirma señalar fallas en LMDB, pero la conclusión depende de si se utiliza fsync o fdatasync. El uso de fsync mejora el problema. La selección de fsync sobre fdatasync es un cambio en tiempo de compilación que no es el comportamiento predeterminado en las compilaciones actuales de LMDB para Linux, pero sí lo es en macOS, *BSD, Android y Windows. Por lo tanto, las compilaciones predeterminadas de LMDB para Linux son las únicas vulnerables al problema descubierto por los investigadores de Zhengmai; sin embargo, los usuarios de Linux pueden simplemente recompilar LMDB para utilizar fsync en su lugar. [ 26 ]

Cuando se le proporciona una base de datos corrupta, como una producida por fuzzing , LMDB puede fallar. El autor de LMDB considera que este caso no es preocupante, pero ha producido una solución parcial en una rama separada. [ 27 ]

Licencia de código abierto

En junio de 2013, Oracle cambió la licencia de Berkeley DB (un proyecto relacionado) de la licencia Sleepycat a la Licencia Pública General Affero , [ 28 ] restringiendo así su uso en una amplia variedad de aplicaciones. Esto provocó que el proyecto Debian excluyera la biblioteca a partir de la versión 6.0. También se criticó que esta licencia no es amigable con los redistribuidores comerciales. Se generó un debate sobre si el mismo cambio de licencia podría ocurrir con LMDB. El autor Howard Chu aclaró que LMDB es parte del proyecto OpenLDAP, que tenía su licencia de estilo BSD antes de que él se uniera, y seguirá siendo así. No se transfiere ningún derecho de autor a nadie al registrarse, lo que haría imposible una medida similar a la de Oracle. [ 29 ] [ 30 ] [ 31 ] [ 32 ] [ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ]

El problema de la licencia de Berkeley DB ha provocado que las principales distribuciones de Linux, como Debian , eliminen por completo el uso de Berkeley DB, prefiriendo LMDB. [ 38 ]

API y usos

Hay envoltorios para varios lenguajes de programación, como C++, [ 39 ] [ 40 ] Java, [ 41 ] Python, [ 42 ] [ 43 ] Lua, [ 44 ] Rust, [ 45 ] [ 46 ] Go, [ 47 ] Ruby, [ 48 ] Objective C, [ 49 ] Objective CAML, [ 50 ] JavaScript, [ 51 ] C#, [ 52 ] Perl, [ 53 ] PHP, [ 54 ] Tcl [ 55 ] y Common Lisp. [ 56 ] Una lista completa de envoltorios se puede encontrar en el sitio web principal. [ 57 ]

Howard Chu adaptó SQLite 3.7.7.1 para usar LMDB en lugar de su código B-tree original , llamando al resultado SQLightning. [ 58 ] Una prueba de inserción citada de 1000 registros fue 20 veces más rápida (que el SQLite original con su implementación B-Tree). [ 59 ] LMDB está disponible como almacenamiento de respaldo para otros proyectos de código abierto incluidos Cyrus SASL, [ 60 ] Heimdal Kerberos, [ 61 ] y OpenDKIM. [ 62 ] También está disponible en algunos otros proyectos NoSQL como MemcacheDB [ 63 ] y Mapkeeper. [ 64 ] LMDB se usó para hacer que el almacenamiento en memoria Redis persistiera datos en disco. El backend existente en Redis mostró un comportamiento patológico en casos raros, y se buscó un reemplazo. Sin embargo, la API barroca de LMDB fue criticada, obligando a codificar mucho para hacer cosas simples. Sin embargo, su rendimiento y fiabilidad durante las pruebas fueron considerablemente mejores que los de los almacenes de back-end alternativos que se probaron. [ 65 ]

En el sitio web principal se mantiene una lista actualizada de las aplicaciones que utilizan LMDB. [ 66 ]

Soporte de aplicaciones

Muchos proyectos de software libre populares distribuyen o incluyen soporte para LMDB, a menudo como mecanismo de almacenamiento principal o único.

  • Los sistemas operativos Debian , [ 67 ] Ubuntu , [ 68 ] Fedora , [ 69 ] y OpenSuSE [ 70 ] .
  • OpenLDAP para el cual LMDB fue desarrollado originalmente a través de back-mdb . [ 71 ]
  • Postfix a través del adaptador lmdb_table . [ 72 ]
  • PowerDNS , un servidor DNS.
  • CFEngine utiliza LMDB por defecto desde la versión 3.6.0. [ 73 ]
  • Shopify utiliza LMDB en su sistema SkyDB. [ 74 ]
  • Knot DNS es un servidor DNS de alto rendimiento.
  • Monero es una criptomoneda de código abierto creada en abril de 2014 que se centra en la privacidad, la descentralización y la escalabilidad.
  • El middleware Enduro/X utiliza LMDB para el almacenamiento en caché opcional de los microservicios XATMI (SOA). En la primera solicitud, se invoca el servicio; en la siguiente solicitud, el proceso cliente lee el resultado guardado directamente desde LMDB.
  • Controlador de dominio de Active Directory de Samba
  • Nano es una criptomoneda de código abierto, de igual a igual, creada en 2015 que prioriza las transacciones rápidas y sin comisiones.
  • Meilisearch es un motor de búsqueda de código abierto, ultrarrápido, fácil de usar e hiperrelevante. [ 75 ]
  • LMDB-IndexedDB es un envoltorio de JavaScript alrededor de IndexedDB para brindar soporte para LMDB en navegadores web. [ 76 ]

Revisiones técnicas de LMDB

LMDB utiliza de forma novedosa técnicas informáticas bien conocidas, como la semántica de copia en escritura y los árboles B+, para proporcionar garantías de atomicidad y fiabilidad, así como un rendimiento que puede resultar difícil de aceptar, dada la relativa simplicidad de la biblioteca y el hecho de que ninguna otra base de datos de clave-valor similar ofrece las mismas garantías o rendimiento general, a pesar de que los autores afirman explícitamente en sus presentaciones que LMDB está optimizada para lectura, no para escritura. Además, dado que LMDB se desarrolló principalmente para su uso en OpenLDAP , sus desarrolladores se centran principalmente en el desarrollo y mantenimiento de OpenLDAP, no en LMDB en sí. Por lo tanto, el escaso tiempo que los desarrolladores dedicaron a presentar los primeros resultados de la prueba de rendimiento fue criticado por no indicar las limitaciones y por dar una impresión de "solución milagrosa" que no resultaba adecuada para abordar la perspectiva de un ingeniero [ 77 ] (cabe señalar que, sin embargo, las preocupaciones planteadas fueron posteriormente abordadas adecuadamente a satisfacción del revisor por el desarrollador principal de LMDB [ 78 ] ) .

La presentación impulsó a otros desarrolladores de bases de datos a analizar el código en profundidad para comprender cómo y por qué funciona. Las reseñas varían desde breves [ 79 ] hasta exhaustivas. El desarrollador de bases de datos Oren Eini escribió una serie de 12 artículos sobre su análisis de LMDB, que comenzó el 9 de julio de 2013. La conclusión fue del tipo "un código base impresionante... que necesita urgentemente mejoras", principalmente debido a la excesiva longitud de los métodos y la duplicación de código. [ 80 ] Esta reseña, realizada por un desarrollador .NET sin experiencia previa en C , concluyó el 22 de agosto de 2013 con: "Más allá de mis problemas con el código, la implementación es realmente brillante. La forma en que LMDB logra incluir tanta funcionalidad sin hacer nada es bastante impresionante... Aprendí mucho del proyecto, y ha sido una experiencia frustrante, molesta y fascinante". [ 81 ]

Existen otras numerosas reseñas sobre LMDB [ 82 ] [ 83 ] en varios idiomas, incluido el chino. [ 84 ]

Véase también

Referencias

  1. 1 2 Guía de referencia de LMDB. Consultado el 21/03/2023.
  2. back-mdb - futures . Consultado el 19 de octubre de 2014.
  3. MDB: Una base de datos mapeada en memoria y un backend para OpenLDAP . Consultado el 22 de octubre de 2018.
  4. Primera versión pública del código fuente de MDB . Consultado el 16 de marzo de 2020.
  5. MDB pasó a llamarse LMDB . Consultado el 16 de marzo de 2020.
  6. Chu, Howard (2011). MDB: Una base de datos mapeada en memoria y un backend para OpenLDAP (PDF) . LDAPCon ..
  7. Árbol B+#Implementación
  8. "El formato de archivo LMDB" . Separate Concern . Consultado el 27 de febrero de 2020 .
  9. Chu, Howard. "lmdb - ¿Es portable la base de datos de la cadena de bloques de Monero entre arquitecturas de 32 y 64 bits, y arquitecturas little/big endian?" . Monero Stack Exchange .
  10. puntos de referencia de escalado para LMDB
  11. Escalado de referencia en memoria para LMDB
  12. "LevelDB Benchmarks" . Google, Inc. Archivado del original el 20 de agosto de 2011. Consultado el 8 de agosto de 2014 .
  13. Chu, Howard. "Microbenchmarks de bases de datos" . Symas Corp. Archivado del original el 9 de agosto de 2014. Recuperado el 8 de agosto de 2014 .
  14. "MDB Microbenchmarks" . Symas Corp., 2012-09
  15. Microbenchmarks de bases de datos , Symas Corp., julio de 2012.
  16. "Rendimiento de OpenLDAP MDB frente a HDB" . Zimbra, Inc.
  17. "OpenLDAP: Una comparación del rendimiento de back-mdb y back-hdb" . 16 de mayo de 2013. Consultado el 8 de mayo de 2017 .
  18. Chu, Howard. "Microbenchmark en memoria" . Symas Corp. Archivado del original el 9 de diciembre de 2014. Consultado el 6 de diciembre de 2014 .
  19. Chu, Howard. "On-Disk Microbenchmark" . Symas Corp. Archivado del original el 9 de diciembre de 2014. Consultado el 6 de diciembre de 2014 .
  20. "Controladores de referencia" . GitHub .
  21. "Detección de corrupción de LMDB" .
  22. "OSDI 2014" . 8 de febrero de 2013.
  23. Langston, Mark C.; Skelly, Hal (2014). OSDI 2014, No todos los sistemas de archivos son iguales: Sobre la complejidad de crear aplicaciones consistentes ante fallos . págs. 433–448 . ISBN  9781931971164.
  24. Langston, Mark C.; Skelly, Hal (2014). OSDI 2014, Torturando bases de datos por diversión y lucro . págs. 449–464 . ISBN  9781931971164.
  25. "Archivo de discusiones sobre el artículo de Pillai de Usenix 2014" .
  26. "Discusión sobre la consistencia de fallos de LMDB" .
  27. Debroux, Lionel (16 de junio de 2018). "oss-security - Diversión con bases de datos tipo DBM..." openwall.com .
  28. "Anuncio de lanzamiento de Berkeley DB" . Oracle Corporation . 11 de junio de 2013. A partir de las versiones 6.0/12c, todos los productos de Berkeley DB se rigen por la Licencia Pública General Affero de GNU (AGPL), versión 3. Esta licencia es publicada por la Fundación del Software Libre (FSF) (1) y aprobada por la Iniciativa de Código Abierto (2). Revise los términos de la licencia para garantizar su cumplimiento antes de actualizar a la versión 12c. Las versiones anteriores del software Berkeley DB seguirán distribuyéndose bajo la licencia Sleepycat.
  29. Ondřej Surý (2 de julio de 2013). "Cambio de licencia de Berkeley DB 6.0 a AGPLv3" . debian-devel (Lista de correo). Debian .
  30. Simon Phipps (5 de julio de 2013). "Oracle cambia su licencia de Berkeley DB" . InfoWorld .
  31. "Oracle cambia discretamente BerkeleyDB a AGPL" . Slashdot . 5 de julio de 2013.
  32. "Oracle меняет лицензию Berkeley DB" [ Cambios en la licencia de Oracle Berkeley DB ] . Programadores en Ucrania (en ruso). Blogspot . 22 de julio de 2013.
  33. Jean Elyan (8 de julio de 2013). "Oracle passe Berkeley DB sous license GNU AGPL" [ Oracle Berkeley DB se licencia bajo la licencia GNU AGPL ] (en francés). Le Monde Informatique.
  34. Ondřej Surý (2 de julio de 2013). "Berkeley DB 6.0 vydána pod licencí AGPLv3" [ Berkeley DB 6.0 se publica bajo la licencia GPLv3 ] (en checo). Abclinuxu.
  35. Nathan Willis (10 de julio de 2013). "Debian, Berkeley DB y AGPLv3" . LWN.net .
  36. Dan Shearer (2 de julio de 2013). "Cambio de licencia de Berkeley DB 6.0 a AGPLv3" . debian-devel (Lista de correo). Debian .
  37. Howard Chu (2 de julio de 2013). "Cambio de licencia de Berkeley DB 6.0 a AGPLv3" . debian-devel (Lista de correo). Debian .
  38. Ondřej Surý (19 de junio de 2014). "Nuevo objetivo del proyecto: deshacerse de Berkeley DB (después de Jessie)" . debian-devel (Lista de correo). Debian .
  39. Envoltorio LMDB C++11 , 2015-04
  40. Envoltorio C++ de LMDB , noviembre de 2012.
  41. LmdbJava , 2019-04
  42. Envoltorio de Python para LMDB , 2013-02
  43. py-lmdb . Consultado el 20 de octubre de 2014.
  44. Envoltorio Lua de LMDB , 2013-04.
  45. Envoltorio Rust para LMDB tipado , 2023-01
  46. envoltorio de alto nivel para Rust , 2022-12
  47. Envoltorio LMDB para Go , 2013-03
  48. Envoltorio Ruby de LMDB , 2013-02
  49. Envoltorio LMDB para Objective-C , 2013-04
  50. Enlaces de OCaml a lmdb , 2025-08
  51. Envoltorio LMDB para Node.js , 2013-05
  52. Envoltorio LMDB .Net , junio de 2013
  53. Envoltorio Perl para LMDB , 2013-08
  54. Envoltorio PHP de LMDB , 2015-04
  55. tcl-lmdb , 2015-11
  56. Uso de LMDB desde Common Lisp , 2016-04
  57. "Información técnica de Symas LMDB" .
  58. "gitorious.org Git - mdb:sqlightning.git/summary" . gitorious.org . Archivado del original el 9 de agosto de 2013 . Recuperado el 8 de mayo de 2017 .
  59. Pruebas de SQLightning .
  60. "Cyrus IMAP — Documentación de Cyrus IMAP 3.0.1 (estable)" . cyrusimap.web.cmu.edu . Archivado del original el 30 de abril de 2017. Consultado el 8 de mayo de 2017 .
  61. «Heimdal» . h5l.org . Consultado el 8 de mayo de 2017 .
  62. "OpenDKIM" . www.opendkim.org . Consultado el 8 de mayo de 2017 .
  63. "gitorious.org Git - mdb:memcachedb.git/summary" . gitorious.org . Consultado el 8 de mayo de 2017 .
  64. "GitHub - m1ch1/mapkeeper: Almacén de clave-valor basado en Thrift con varios sistemas de almacenamiento, incluidos MySQL, Berkeley DB y LevelDB" . github.com . Archivado del original el 9 de febrero de 2016.
  65. "Segundo impacto con un rayo" . Anchor. 9 de mayo de 2013.
  66. "Lista de proyectos que utilizan LMDB" .
  67. liblmdb0 en Debian . Consultado el 20 de octubre de 2014.
  68. D'Vine, Rhonda. "Ubuntu – Resultados de búsqueda de paquetes -- lmdb-utils" . packages.ubuntu.com . Consultado el 2 de enero de 2018 .
  69. LMDB en Fedora 20. Consultado el 20 de octubre de 2014.
  70. lmdb en OpenSUSE . Consultado el 20 de octubre de 2014.
  71. Base de datos back-mdb de OpenLDAP . Consultado el 20 de octubre de 2014.
  72. Postfix lmdb_table(5) . Consultado el 2014-10-20
  73. "Documentación de CFEngine 3.6 - Novedades en CFEngine" . docs.cfengine.com . Consultado el 8 de mayo de 2017 .
  74. "Grupos de Google" . groups.google.com . Consultado el 8 de mayo de 2017 .
  75. "Almacenamiento | Documentación de Meilisearch v1.0" . Consultado el 21 de marzo de 2023 .
  76. "LMDB-IndexedDB en GitHub" . GitHub . Consultado el 2 de abril de 2023 .
  77. "LMDB: ¿El asesino de Leveldb?" .
  78. "Respuesta a la revisión de LMDB" . symas.com . Archivado del original el 11 de noviembre de 2020.
  79. "Base de datos mapeada en memoria Lightning" . Archivado del original el 14 de marzo de 2016.
  80. "Revisión de la biblioteca de bases de datos mapeadas en memoria Lightning: Parcial" .
  81. "Algunas notas finales sobre la revisión de LMDB" .
  82. "Revisión de diseño: Almacenamiento de clave-valor" . mozilla.github.io . Proponemos la estandarización de una capacidad de almacenamiento de clave-valor simple, basada en LMDB, que sea rápida, compacta, compatible con múltiples procesos e igualmente utilizable desde JS, Java, Rust, Swift y C++.
  83. "LMDB" . Sampath Herga. Archivado del original el 29 de agosto de 2013. Consultado el 30 de agosto de 2013 .
  84. "lmdb简介 - 简书" .