c = Couchbase.novo("http://localhost:8091/pools/default/buckets/my-bucket")

Acredito que seja seguro dizer que estamos quase todos familiarizados com o código Ruby acima. Ele estabelece uma conexão do Ruby SDK com um bucket de nossa escolha dentro do nosso cluster do Couchbase. É claro que há várias maneiras de escrever essa linha, como especificar o URI e a porta como símbolos Ruby (:pool => "default", :bucket => "my-bucket")etc. O que quero dizer aqui é que escrevemos esses comandos simples de uma linha e obtemos uma conexão simples com o bucket escolhido. Mas e se o nosso aplicativo usar vários buckets? Neste artigo, voltarei ao básico e o orientarei na configuração e na conexão com Vários baldes.

Por que eu usaria vários buckets no Couchbase?

O uso de vários buckets no Couchbase é um conceito interessante. (Para mim, pelo menos).

Por um lado, há benefícios em usar vários buckets, MAS é importante lembrar que, por causa do Couchbase' Esquema flexívelSe o documento JSON fosse um documento JSON, poderíamos armazenar documentos JSON de qualquer estrutura no mesmo bucket, mesmo que o esquema de cada documento fosse diferente.

No entanto, muitos consumidores do Couchbase estão agora vendo os benefícios de usar vários Buckets em seus aplicativos. Por exemplo, se você for um provedor de hospedagem e quiser que diferentes usuários usem o mesmo servidor de banco de dados, os Buckets poderão ser protegidos por senha e evitarão que um usuário acesse os dados de outro usuário.

Algumas pessoas criam vários buckets para fins organizacionais: por exemplo, você pode estar executando dois aplicativos diferentes e querer que os dados fiquem separados ou talvez queira apenas dividir os dados por categoria. Todos esses são casos de uso muito razoáveis e, sem dúvida, muito possíveis. Agora que sabemos por que podemos usar vários buckets, vamos dar uma olhada em Como podemos nos conectar e utilizar esses buckets.

Conexão a vários buckets no Couchbase:

Vamos mergulhar de cabeça. Abra seu Console do administrador. Clique na guia "Buckets" e vamos criar dois novos Buckets: bucket1 e bucket2.

 2-buckets-blog

Então, agora que temos nossos Data Buckets, vamos escrever um pouco de Ruby para criar nossas conexões de cliente com eles!

Em primeiro lugar, verifique se você tem a Libcouchbase instalada. Em seguida, verifique se você tem o Couchbase Ruby Gem mais recente instalado. Em seguida, vá em frente e crie um arquivo Ruby chamado cb_connect.rb -  Estou usando o Ruby 2.0, mas você só precisa usar o 1.9+

exigir 'rubygems'
exigir 'couchbase'

CONFIG = {
:node_list => ["localhost:8091"],
:key_prefix => "pool_",
:pool_size => 3
}

Aqui, estamos definindo alguns parâmetros de configuração de conexão. Nossa lista de nós é a padrão. Estamos definindo um prefixo de chave para prefixar nossos documentos com "pool_" após a configuração. Também estamos definindo nosso pool_size como 3.

Agora vamos escrever um objeto de pool thread-safe, que fará proxy de todos os métodos para o Couchbase::Bucket instância:

def conexão(balde)
@servidores ||= {}
@servidores[balde] ||= começar
tamanho = CONFIG[:pool_size]
params = CONFIG.mesclar(:bucket => balde)
Couchbase::ConnectionPool.novo(tamanho, parâmetros)
final
final

Aqui você notará que há uma nítida falta de especificidade em relação aos Buckets. Na configuração acima, definimos os parâmetros para receber o já especificado :pool_size,  e o :bucket  que especificamos no momento da operação. Ao escrever esse pequeno método de conexão, estamos nos permitindo especificar vários buckets em nosso código Ruby.

Vamos testar nosso método de conexão escrevendo algumas operações para o Couchbase:

conexão("bucket1").definir("foo", "bar")
conexão("bucket2").definir("bar", "foo")

tópicos = []
5.horários fazer
fios << Tópico.novo fazer
conexão("bucket1").obter("foo")
conexão("bucket2").obter("bar")
final
final

fios.mapa fazer |t|
coloca [t.object_id, t.valor].unir-se(t)
final

Aqui, estamos definindo alguns dados de amostra, mas especificando nossa conexão de bucket dentro do comando Set. Em seguida, estamos usando o threading interno do Ruby para executar operações Get em nosso conjunto de objetos de amostra. Aqui, também estamos especificando nossa conexão dentro do comando Get.

Depois de escrever esse código, você verá uma boa visualização de dados na interface do usuário do Admin. O último bloco que escrevemos juntará as chaves dos dados de amostra com o valor e os imprimirá em nosso Terminal.

Em seu terminal, execute:

rubi cb_connect.rb

Você verá a visualização e o resultado mencionados acima:

connect-rb-running
Portanto, configuramos nossa conexão usando a propriedade ConnectionPool no Couchbase (disponível somente no Ruby 1.9+) e especificamos nossos Buckets no momento da operação. E é assim que podemos configurar várias conexões de bucket por meio de pooling no cliente Ruby do Couchbase.

Para ver o código completo deste blog, Veja a essência.

Para os rubistas que gostam de usar Rails, estou atualmente escrevendo um aplicativo de amostra em Rails baseado em um Leaderboard social gamificado. Estou usando o Modelo Couchbase que permite a modelagem de dados semelhante ao Active_Record. Esse aplicativo e o código-fonte aberto serão publicados, juntamente com outro blog How-To, na próxima semana.
- Robin Johnson
Representante de desenvolvedores, Europa

Autor

Postado por A equipe do Couchbase

Jennifer Garcia é gerente sênior de Web na Couchbase Inc. Como gerente do site, Jennifer tem a responsabilidade geral pelas propriedades do site, incluindo design, implementação, conteúdo e desempenho.

4 Comentários

  1. [...] Postagem do blog da semana: Várias conexões de bucket no Couchbase e no Ruby [...]

  2. Olá,
    Se eu quiser usar o modelo do Couchbase com vários buckets, o que devo fazer para conectá-lo?
    Eu uso o modelo couchbase em Ruby, por favor, me oriente.

    Obrigado.

    1. Sergey Avseyev, engenheiro de SDK, Couchbase junho 22, 2017 em 9:01 am

      Atualmente, essa biblioteca não oferece suporte à conexão com vários buckets. Você poderia descrever um pouco mais seu caso de uso?

      1. Olá, Sergey Avseyev,
        Obrigado por sua ajuda
        Quero mapear todos os atributos do modelo para o Couchbase. Quando leio seu guia, não sei como enviar e obter um objeto json para cada Bucket no CB.
        Então, você pode me dizer, eu quero saber mais do que o CB.
        Obrigado, Sergey.

        Tenha um bom dia!
        HungCao

Deixar uma resposta