Como desenvolvedor, estou usando o Couchbase Server há alguns meses e estou adorando. Depois de escrever vários aplicativos, aprendi muitos (mas não todos) dos detalhes do Couchbase. Para ser um bom desenvolvedor do Couchbase, não basta apenas saber como usar as APIs - é preciso um pouco mais.
Para lhe dar uma visão geral rápida do que os desenvolvedores podem obter do Couchbase, elaboramos este 10 principais lista de coisas que você deve saber. Elas não estão em uma ordem específica, mas é uma boa coleção de informações que você deve saber se estiver criando seu aplicativo com o Couchbase.
Aqui vamos nós...
#10. O acesso a documentos no Couchbase é fortemente consistente, o acesso a consultas é eventualmente consistente
O Couchbase garante uma consistência forte ao assegurar que todas as leituras e gravações de um determinado documento sejam feitas em um único nó em um cluster. Isso é para acesso ao documento (chave/valor). As visualizações são eventualmente consistentes em comparação com os documentos armazenados subjacentes.
#9. As gravações são assíncronas por padrão, mas podem ser controladas
Por padrão, as gravações no Couchbase são assíncronas - a replicação e a persistência ocorrem em segundo plano, e o cliente é notificado sobre o sucesso ou a falha. As atualizações são armazenadas na memória e são transferidas para o disco e replicadas para outros nós do Couchbase de forma assíncrona.
Usando as APIs com restrições de durabilidade dentro do aplicativo, você pode optar por replicar a atualização para outros nós ou persistir no disco antes que o cliente responda de volta ao aplicativo.
#8. O Couchbase tem operações atômicas para contar e anexar
O Couchbase oferece suporte a operações atômicas de acréscimo/decréscimo e acréscimo para blobs.
Por exemplo:
cb.set("mykey", 1)
x = cb.incr("mykey")
coloca x #=> 2
incr está escrevendo e retornando o valor resultante.
A operação de atualização ocorre no servidor e é fornecida no nível do protocolo. Isso significa que ela é atômica no cluster e executada pelo servidor. Em vez de uma operação de dois estágios, é uma única operação atômica.
#7. Comece com tudo em um único balde
Um bucket é equivalente a um banco de dados. Você armazena objetos de diferentes características ou atributos no mesmo compartimento. Portanto, se você estiver migrando de um RDBMS, deverá armazenar registros de várias tabelas em um único bucket.
Lembre-se de criar um atributo "type" que o ajudará a diferenciar os vários objetos armazenados no bucket e a criar índices sobre eles. Recomenda-se começar com um bucket e aumentar para mais buckets quando necessário.
#6. Tente usar 5 ou menos buckets no Couchbase. Nunca mais de 10.
Os documentos não têm um esquema fixo, vários documentos com esquemas diferentes podem estar no mesmo bucket. A maioria das implantações tem um número baixo de compartimentos (geralmente 2 ou 3) e apenas alguns chegam a 5. Embora não haja um limite rígido no software, o máximo de 10 compartimentos decorre de uma sobrecarga conhecida de CPU e IO de disco do mecanismo de persistência e do fato de alocarmos uma quantidade específica de memória para cada compartimento. Certamente planejamos reduzir essa sobrecarga em versões futuras, mas isso ainda não mudaria nossa recomendação de ter apenas alguns buckets.
#5. Usar CAS em vez de GetL quase sempre
Bloqueio otimista ou pessimista, qual deles você deve escolher? Se o seu aplicativo precisar de bloqueio, considere primeiro o uso do CAS(bloqueio otimista) antes de usar o GetL (bloqueio pessimista).
Mas lembre-se de que o bloqueio pode não ser bom para todos os casos - seu aplicativo pode ter um problema se houver uma contenção de bloqueio. Um thread pode manter um bloqueio e ter o agendamento cancelado pelo sistema operacional. Então, todos os threads que quiserem adquirir esse bloqueio serão bloqueados. Uma opção é evitar totalmente o bloqueio sempre que possível, usando operações atômicas. Essas APIs podem ser muito úteis em dados muito contestados.
#4. Usar operações multi-get
Quando o aplicativo cliente tiver uma lista de IDs de documentos, a abordagem de melhor desempenho é recuperar itens em massa usando uma solicitação multi-GET. Isso tem um desempenho melhor do que um loop serial que tenta obter cada item individual e sequencialmente.
#3. Mantenha suas bibliotecas de clientes atualizadas
Certifique-se de que esteja usando a biblioteca de cliente mais recente. As bibliotecas de cliente do Couchbase estão disponíveis em Java, .NET, C/C++, Ruby, Python e PHP.
#2. Modele seus dados usando documentos JSON
O Couchbase Server é compatível com o formato de documento JSON e binário. Primeiro, tente modelar seus dados usando JSON. Os documentos JSON podem ser indexados e consultados. Você pode armazenar blobs binários e fazer consultas de intervalo com base nos nomes das chaves. Comece criando documentos a partir de objetos no nível do aplicativo. Os documentos que crescem continuamente ou com alta contenção de gravação devem ser divididos.
#1. Use os índices de forma eficaz
Use o acesso à chave primária o máximo possível. O Couchbase tem chaves e metadados na memória - os acessos aos dados são rápidos. Use índices secundários para caminhos menos sensíveis ao desempenho ou para análises. Comece com 4 documentos de design e menos de 10 visualizações por documento de design. Crie alguns índices "longos" que possam ser usados para várias consultas e use filtragem criativa. Construa índices para "emitir" a menor quantidade de dados possível: use "null" como valor se você não tiver nenhuma função de redução.
Apenas 10 coisas? Não, é claro que não! O Couchbase é um sistema de banco de dados NoSQL e, depois de experimentá-lo, você descobrirá que há muito mais a aprender. Se você acha que deixei passar algo importante que deveria ser incluído na lista dos 10 melhores, fique à vontade para acrescentar nos comentários abaixo.
Aproveite!
Links relacionados
- Guia do desenvolvedor do Couchbase
- Documentação do Couchbase
- Página do desenvolvedor do Couchbase
Não tenho certeza de onde escrever essa solicitação de recurso... mas seria útil ter visualizações que suportassem parâmetros de usuário. Por exemplo, posso chamar a visualização para emitir todas as cervejas que tenham uma faixa de álcool de [4,8 a 5,4]... no momento, para conseguir isso, preciso criar uma nova visualização para cada permutação de filtro...
Você pode conseguir isso usando o que chamamos de Range Query. Ela terá a seguinte aparência
Mapa :
function (doc, meta) {
se (doc.abv) {
emit(doc.abv);
}
}
Isso criará um índice em que o ABV é a chave.
Em seguida, você pode consultar essa exibição usando os seguintes parâmetros:
?startkey=4.8&endkey=5.4
Estou usando aqui parâmetros de URL, mas em seu aplicativo você usará a API do SDK do cliente.
Ótimo artigo para alguém como eu, que está começando a usar o Couchbase. Tenho uma pergunta: o Couchbase pode ser usado para esse cenário?
O usuário tem um formulário para preencher off-line e depois sincronizar novamente quando conectado. Quero mostrar a ele o status da sincronização de todo o registro, se está sincronizado ou não.