Mnesia
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].
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. |
Características
editarPor 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
editarO 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
- ↑ «Mnesia Reference Manual» (em inglês). Consultado em 14 de janeiro de 2012
- ↑ «Introduction». Mnesia Reference Manual. Consultado em 14 de janeiro de 2012
- ↑ 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
- ↑ 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
- ↑ «Getting started with Mnesia». 19 de setembro de 2007. Consultado em 14 de janeiro de 2012
- ↑ «Migrate database to another host». ejabberd. Consultado em 14 de janeiro de 2012