Mnesia

Mnesia
DesenvolvedorEricsson
Lançamento estável
Escrito emErlang
Sistema
operacional
multiplataforma
Plataformamultiplataforma
TipoSistema de gerenciamento de banco de dados relacional
LicençaMPL modificada
Websiteerlang.org.

Mnesia é um sistema de gerenciamento de banco de dados distribuído e em tempo real escrito na linguagem Erlang. Mnesia é parte da Open Telecom Plataform e foi desenvolvido para dar suporte ao Erlang fornecendo aos aplicativos uma forma de persistência de forma semelhante a um banco de dados[2].

Características

Por ter surgido em um ambiente voltado para telecomunicações possui características distintas dos demais sistemas de gerenciamento de banco de dados. A primeira é que o sistema executa no mesmo espaço de memória do processo cliente, tornando desnecessários esquemas de serialização dos dados ou conversão para outros formatos tornando a passagem de dados uma simples troca de ponteiros. A própria linguagem Erlang propicia o isolamento necessário para evitar que aplicativos corrompam os dados do sistema em caso de problemas[3][4].

Outra característica é a tolerância a falhas mesmo frente a replicação das informações distribuídas entre os vários nós. Mnesia também possibilita a mudança nos esquemas sem a necessidade de parar as aplicações, bem como realizar atividades de backup e replicação em segundo plano permitindo que os aplicativos continuem acessando e modificando as tabelas. Além disso é possível usar dados complexos que não estejam na primeira forma normal[3][4].

Mnesia suporta transações ACID, mas também oferece recursos para fazer operações exclusiamente na memória caso seja possível abrir mão do requisito de durabilidade. Além disso é possível saltar o gerente de transações e usar travas leves para evitar a sobrecarga em caso de operações críticas pois em sistemas de telecomunicações as tabelas em geral são mais lidas que alteradas, portanto transações podem se tornar um peso desnecessário[4].

As consultas são expressas na forma de list comprehension. Por exemplo, para listar os nomes das pessoas com mais de Num filhos escreve-se a consulta na forma: query [P.nome || P < table(pessoas), length(P.filhos) > Num] end.[3][5].

Uso

O daemon de Extensible Messaging and Presence Protocol ejabberd é implementado em Erlang e utiliza o Mnesia como base de dados interna[6]. A pilha de aplicação web LYME (Linux, Yaws, Mnesia e Erlang) utiliza o Mnesia e se beneficia pelo fato da aplicação e o banco de dados executarem todos sobre a mesma máquina virtual.

Referências

  1. ↑ «Mnesia Reference Manual» (em inglês). Consultado em 14 de janeiro de 2012
  2. ↑ «Introduction». Mnesia Reference Manual. Consultado em 14 de janeiro de 2012
  3. 1 2 3 Gavin Terrel (20 de agosto de 2007). «Erlang's Mnesia - a distributed DBMS for highly scalable apps». InfoQ. Consultado em 14 de janeiro de 2012
  4. 1 2 3 Håkan Mattsson, Hans Nilsson, Claes Wikstrom (1999). «Mnesia - A Distributed Robust DBMS for Telecommunications Applications» (PDF). Consultado em 14 de janeiro de 2012
  5. ↑ «Getting started with Mnesia». 19 de setembro de 2007. Consultado em 14 de janeiro de 2012
  6. ↑ «Migrate database to another host». ejabberd. Consultado em 14 de janeiro de 2012