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.bat

Infelizmente eu descobri isso na prática!

Agora acesse o painel de controle do Membase no endereço:

http://localhost:8091

Membase01

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.

Membase02

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. 🙂

Membase03

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.

Membase04

Esse é o painel administrativo do Membase.

Membase05

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.

About Author

You may also like

3 Response Comments

  • Peterson Ferreira  27/04/2011 at 11:50

    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!

    • Igor Musardo  27/04/2011 at 18:02

      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…

  • fagner moura  16/07/2011 at 20:16

    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.