O Membase é um sistema de gerenciamento de banco de dados chave-valor distribuído, otimizado para aplicações web interativas.
O Membase é utilizado em produção em milhares de aplicativos no mundo, entre as grandes empresas que utilizam temos Zynga e NHN. E já também disponível no host compartilhado Heroku.
Infelizmente hoje os hosts brasileiros nos planos compartilhados é dificil encontrar suporte à tecnologias noSQL como o Membase, CouchDb, MongoDb, etc, e com isso forçam os desenvolvedores fazerem software utilizando bancos de dados relacionais que não são aderentes à programação orientada a objetos.
Banco de dados relacional é muito recomendado para persistência de dados que não são utilizados com muita frequência e também para aplicações cujo objetivo é gerar relatórios. Então uma ótima sacada é utilizar as duas tecnologia juntas. Para os dados que são constantemente utilizados por sua aplicação utilize o Membase, para os dados utilizados com menos frequencia use banco de dados relacional.
Porém adotar o modelo chave-valor traz consigo uma pequena “dor”, pois você será forçado a mudar a forma como os dados serão gravados e buscados em sua aplicação, pois o Membase é uma estrutura de dicionário, ou seja, as operações de busca e remoção dependem diretamente de você saber de ante-mão a chave de onde está o registro.
Download
Escolha a versão que mais se adequa a sua necessidade: Enterprise Edition ou Community Edition, eu recomendo a versão Enterprise.
Disponível para Windows, Red Hat e Ubuntu.
O arquivo de instalação tem em média 80MB.
http://www.couchbase.com/downloads
Instalação
A instalação é bem simples seguindo o modelo AVANÇAR, AVANÇAR, …, CONCLUIR.
Após a conclusão da instalação o browser é aberto com a página de SETUP do Servidor Membase.
O Membase possui uma característica que em sua instalação vincula o ip da máquina à sua instância, e caso você mude o ip da sua máquina infelizmente você não conseguirá mais acessar os dados, embora tudo aparentemente esteja funcionando normalmente.
Mas há uma forma de você vincular a instância do Membase ao IP: 127.0.0.1, que até que se prove o contrário nunca muda e sempre estará disponível.
Abra o prompt de comando e execute os seguintes passos:
service_stop.bat
service_unregister.bat
service_register.bat ns_1@127.0.0.1
service_start.batInfelizmente eu descobri isso na prática!
Agora acesse o painel de controle do Membase no endereço:
http://localhost:8091
A primeira etapa da configuração do servidor é definir o local onde serão persistidos os dados, escolher se essa instância será um novo cluster ou se juntará a um cluster existente.
Caso for criar um novo cluster, defina a quantidade máxima de memória você deixará disponível para o Membase utilizar. Ele só alocará a memória quando necessário.
Agora é hora de criar o Bucket Default, container isolado de dados, a área onde ficarão os dados.
Você pode escolher entre os tipos Memcached e Membase as diferenças entre os dois são muitas, mas as mais importantes são: Membase persiste no disco e Memcached não, o Memcached possui o limite de 1MB por valor em cada registro, no Membase o limite são 20MB.
Uma dica, como você pode criar vários Buckets, sugiro você separar os assuntos de dados do seu sistema em Buckets distintos, isso facilitará sua vida quando precisar definir qual o modelo de chave utilizar para guardar os dados, acredite em mim. 🙂
Defina um usuário e senha para acessar o serviço, esses dados também serão utilizados para acessar o painel administrativo do Membase.
Esse é o painel administrativo do Membase.
Assim concluimos a etapa de instalação e configuração do Membase. Simples né?!
Cliente
Agora vamos trabalhar com a integração entre o .NET e o Membase, para isso antes de mais nada é necessário utilizar um client para a linguagem que a sua aplicação foi ou será escrita, no nosso caso .NET.
Hoje as linguagens que já possuem cliente são:
Para fazer o download do cliente acesse: http://techzone.couchbase.com/downloads
Como configurar sua aplicação para usar o Membase
Primeiro copie as DLL’s Enyim.Caching.dll e Membase.dll para a pasta BIN do seu projeto e adicione a referência dessas DLL’s no projeto.
No web.config ou app.config da sua aplicação acrescente as seguintes configurações:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="enyim.com"> <section name="memcached" type="Membase.Configuration.MembaseClientSection, Membase" /> </sectionGroup> </configSections> <enyim.com> <memcached protocol="Binary"> <servers bucket="default" bucketPassword="senha_bucket"> <add uri="http://localhost:8091/pools/default" /> </servers> <socketPool minPoolSize="10" maxPoolSize="20" connectionTimeout="00:00:10" deadTimeout="00:00:10" /> <locator type="FILL" factory="FILL" /> <transcoder type="FILL" factory="FILL" /> <keyTransformer type="FILL" factory="FILL" /> <performanceMonitor type="FILL" factory="FILL" /> </memcached> </enyim.com> </configuration>
Código de exemplo
Client
Para utilizar o Membase você precisa criar uma instância do MembaseClient passando como prâmetros o nome e senha do bucket:
var membaseClient = new MembaseClient("default", "senha_bucket");
Set
Para armazenar os dados no Membase utilize o método SET:
membaseClient.Set(StoreMode.Set, “key01”, “value01”);
Para o valor o membase aceita qualquer tipo de objeto. O método SET adiciona uma chave inexistente ou substitui uma chave existente.
Get
Para resgatar um valor amazenado utilize o método GET:
var valor = membaseClient.Get(“key01”); // Retorna “value01”
Agora que você foi apresentado ao Membase pode já começar a brincar a fazer testes para aumentar o throughput e a escalabilidade da sua aplicação.
Até o próximo post.
Divita-se.
3 Response Comments
Artigo de ótima qualidade! Só preciso discordar de uma coisa, quando você fala que banco de dados relacionais não se adaptam a orientação a objetos e que só servem para fazer relatórios. Hoje temos padrões com ORM que mapeiam todo nosso banco para OO, como o Hibernate, Nhibernate, LINQ e o próprio ActiveRecord do Rails…
Acho que é isso, hehe ! Parabéns pelo artigo!
Concordo contigo, mas concorda comigo que invariavelmente você terá um custo bem alto para fazer o parse da sua linha do banco para objeto, certo?! Imagine milhares de linhas…
Ola Igor.
Estou usando o Membase, também para jogos (como o Zynga) e queria levantar dois pontos:
1 – Você não fica dependete do IP. Você pode usar o Moxxy, que serve como proxy para o cluster de Membase. E só acrescentando, ele replica e distribui os dados muito bem.
2 – Sobre usar ORM, imagine que você pode guardar JSON ao invés de instâncias serializadas (e ainda pode versioná-los!). Como você falou, concordo plenamente. Evoluir um sistema com bancos relacionais é deveras trabalhoso.