Mnesia

Origem: Wikipédia, a enciclopédia livre.
Mnesia
Desenvolvedor Ericsson
Plataforma multiplataforma
Versão estável 4.6 (14 de dezembro de 2011[1])
Escrito em Erlang
Sistema operativo multiplataforma
Gênero(s) Sistema de gerenciamento de banco de dados relacional
Licença MPL modificada
Página oficial erlang.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[editar | editar código-fonte]

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[editar | editar código-fonte]

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. a b c 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. a b c 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 
Ícone de esboço Este artigo sobre banco de dados é um esboço. Você pode ajudar a Wikipédia expandindo-o.