Articulo de referencia

Mnesia

LYME (paquete de software) está basado en Erlang e incluye Mnesia . Está compuesto íntegramente por software libre y de código abierto. Mnesia es un sistema de gestión de bases ...

LYME (paquete de software) está basado en Erlang e incluye Mnesia . Está compuesto íntegramente por software libre y de código abierto.

Mnesia es un sistema de gestión de bases de datos distribuido y de tiempo real flexible escrito en el lenguaje de programación Erlang . [ 1 ] Se distribuye como parte de la Plataforma Abierta de Telecomunicaciones .

Descripción

Al igual que Erlang, Mnesia fue desarrollado por Ericsson para trabajos de computación distribuida de alta disponibilidad y en tiempo real flexible relacionados con las telecomunicaciones . No fue concebido como un sistema general de gestión de bases de datos para el procesamiento de datos en oficinas , ni para reemplazar los sistemas basados ​​en SQL . En cambio, Mnesia existe para dar soporte a Erlang, donde se requiere persistencia similar a la de un DBMS . [ 2 ] Tiene más en común con DBMS integrables como Berkeley DB que con cualquier servidor de bases de datos SQL.

Modelo de base de datos

Las "filas" en las tablas se representan como registros que contienen un valor clave y un campo de datos. Este campo de datos puede ser, a su vez, una tupla que contiene una estructura de datos de Erlang de cualquier complejidad.

Tipos de backend

Mnesia tiene tres tipos de tablas integradas: ram_copies, disc_copies y disc_only_copies.

Copias de RAM

Los datos residen en la memoria y el tamaño de la tabla está limitado por la memoria disponible y están respaldados por la tabla ETS (almacenamiento de términos de Erlang).

copias_del_disco

Los datos residen en la memoria, pero también se almacenan en disco mediante disk_log. Las copias en disco se almacenaban mediante tablas Dets hasta el 30 de septiembre de 2001, con el lanzamiento de Erlang R7B-4. [ 3 ]

copias_solo_en_disco

Los datos residen únicamente en el disco y están respaldados por Dets (versión en disco de ETS). [ 4 ] El formato de archivo Dets utiliza enteros con signo de 32 bits para los desplazamientos de archivo y tiene un límite de 2  GB, al igual que disc_only_copies. [ 3 ]

complementos de backend

Debido a las limitaciones impuestas por Dets , Ulf Wiger [ 5 ] sugirió la compatibilidad con otros complementos de backend , los cuales se añadieron a Mnesia. Klarna añadió el complemento de backend LevelDB [ 6 ], mientras que Aeternity añadió el complemento de backend RocksDB [ 7 ] .

Características relacionales

El modelo de base de datos es relacional, pero no es lo que alguien familiarizado con SQL podría esperar. Una base de datos contiene tablas. Las relaciones entre ellas se modelan como otras tablas. [ 8 ]

Una característica clave del enfoque de alta disponibilidad de Mnesia es que las tablas se pueden reconfigurar dentro de un esquema y reubicar entre nodos, no solo mientras la base de datos sigue en funcionamiento, sino incluso mientras se están realizando operaciones de escritura.

Codificación

El lenguaje de consulta de Mnesia es Erlang, en lugar de SQL . [ 9 ] Permite una representación sencilla de las transacciones como una característica natural de Erlang al permitir a los desarrolladores utilizar un único lenguaje en toda la aplicación.

Actas

Erlang es un lenguaje funcional . Mnesia se basa en esto para obtener soporte para transacciones ACID . El bloque funcional que se ejecuta como una transacción es una construcción común de Erlang llamada Objeto Funcional (o Fun ) [ 10 ] y se llama mediante una sola instrucción de Mnesia . Esto puede generar un código fuente más claro que la sintaxis de pares / de SQL, y así evita su problema de transacciones no cerradas dentro de un procedimiento.mnesia:transaction(F)BEGINCOMMIT

Gracias a la naturaleza funcional de Erlang, anidar transacciones es sencillo. También es posible distribuirlas entre varios nodos (es decir, servidores separados). La semántica de usar transacciones de esta manera se mantiene consistente, lo que facilita escribir código de biblioteca que funcione igual de bien en ambos contextos.

El estilo de codificación general para Mnesia siempre utilizará transacciones. Por razones de rendimiento, también admite operaciones deliberadamente "sucias " que evitan las transacciones. Estas comprometen la atomicidad y las propiedades de aislamiento de ACID , pero ofrecen un rendimiento aproximadamente 10 veces mayor. [ 11 ] Además, también existen alternativas en memoria, aunque estas pierden la propiedad de durabilidad de ACID .

Ejecución eficiente

Mnesia forma parte de la pila de aplicaciones web LYME . Es similar a LAMP , pero está basada en Erlang. La implementación en Erlang ofrece una ventaja en eficiencia gracias al uso de una única máquina virtual en toda la aplicación. LYME aprovecha esta característica, ya que el servidor web Yaws también está implementado en Erlang.

El espacio de direcciones se comparte (aunque de forma segura, bajo Erlang) entre el código y los datos, incluidos los datos de la tabla de Mnesia. [ 1 ] [ 12 ]

Orígenes y licencias

Mnesia y Erlang fueron desarrollados por el Laboratorio de Ciencias de la Computación de Ericsson. Se han publicado como software de código abierto . Mnesia se publica bajo una licencia derivada de la Licencia Pública de Mozilla . [ 13 ] Desde OTP 18.0 se publican bajo la Licencia Apache 2.0 de código abierto . Las versiones anteriores a OTP 18.0 se publicaban bajo la Licencia Pública de Erlang de código abierto . [ 14 ]

ejabberd

Mnesia también es una opción integrada en el demonio Jabber basado en Erlang , ejabberd . [ 15 ]

Véase también

Referencias

  1. 1 2 Håkan Mattsson; Hans Nilsson; Claes Wikstrom (1999). "Mnesia - Un DBMS robusto distribuido para aplicaciones de telecomunicaciones" (PDF) . Archivado del original (PDF) el 22 de septiembre de 2021. Recuperado el 25 de septiembre de 2008 .
  2. "Propósito de Mnesia" . Proyecto Erlang de código abierto.
  3. 1 2 "Erlang -- Preguntas sobre la base de datos Mnesia" . www.erlang.org . Consultado el 5 de noviembre de 2021 .
  4. "Erlang -- Manual de referencia de Mnesia" . www.erlang.org . Consultado el 5 de noviembre de 2021 .
  5. mnesia_rocksdb , æternity, 18 de octubre de 2021 , consultado el 5 de noviembre de 2021
  6. ^ mnesia_eleveldb , Klarna AB, 3 de noviembre de 2021 , consultado el 5 de noviembre de 2021
  7. mnesia_rocksdb , æternity, 18 de octubre de 2021 , consultado el 5 de noviembre de 2021
  8. "Guía de inicio rápido de Mnesia" . Proyecto Erlang de código abierto.
  9. "Manual de referencia de Mnesia (v 4.4.5)" . Proyecto Erlang de código abierto.
  10. "6.17 Expresiones divertidas" . Proyecto Erlang de código abierto.
  11. Gavin Terrill (20 de agosto de 2007). "Mnesia de Erlang: un DBMS distribuido para aplicaciones altamente escalables" . InfoQ .
  12. "Conceptos básicos de interpretación de Mnesia" . Consultado el 25 de septiembre de 2008 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  13. "Acerca de Erlang" . Proyecto Erlang de código abierto.
  14. "Licencia pública de Erlang, V 1.1" . Proyecto Erlang de código abierto.
  15. "Página principal del proyecto ejabberd" .