Como defensor do desenvolvedor na CouchbaseEm meu trabalho com o Couchbase, participo de muitos eventos e interajo com um grande número de desenvolvedores. Quando falo sobre o Couchbase, recebo muitas perguntas sobre a durabilidade dos dados que estão sendo criados. Por exemplo, o Couchbase é um tipo de banco de dados que prioriza a memória e persiste no disco posteriormente, em que cada interação ocorre na camada de memória antes de atingir o disco de forma assíncrona, mantendo as coisas incrivelmente rápidas. A pergunta que sempre surge é: como você pode ter certeza de que os dados serão salvos em caso de falha de um nó?
Essa é uma ótima pergunta e vamos analisar como superar esses problemas, caso eles ocorram.
Veremos alguns exemplos, todos muito semelhantes, sobre diferentes cenários de durabilidade de dados. Esses exemplos serão em Node.js, mas os comandos serão semelhantes, independentemente do SDK do Couchbase que você deseja usar.
Vamos começar com o primeiro cenário. Temos um jogo de RPG on-line para vários jogadores (MMORPG), como World of Warcraft ou similar, e precisamos salvar periodicamente o estado do jogo de um determinado jogador para que, quando ele entrar novamente em um momento posterior, sua posição, estatísticas e itens sejam mantidos alinhados. Nesse cenário, como os salvamentos ocorrem com frequência e a latência é tudo, salvar no cache provavelmente é o suficiente. Podemos escrever um código como o seguinte:
|
1 2 3 4 5 6 |
balde.inserir(id, dados, (erro, resultado) => { se(erro) { lançar erro; } console.registro(resultado); }); |
O estado do jogador é salvo e o jogo recebe uma resposta dizendo que está tudo bem para continuar. Se o nó falhar e o salvamento não tiver atingido o disco ou tiver sido replicado, isso provavelmente não será um grande problema devido aos salvamentos frequentes.
Agora vamos pensar em outro cenário. Digamos que estejamos criando contas de usuário para o nosso aplicativo. Embora pudéssemos confiar na camada de memória, queremos ter um pouco mais de confiança de que nossos dados chegarão ao disco. Afinal, se o nó falhar, não poderemos recuperar o que estava na memória, mas poderemos recuperar o que estava no disco. Portanto, em vez disso, ajustamos um pouco nossa operação:
|
1 2 3 4 5 6 |
balde.inserir(id, dados, { "persist_to": 1 }, (erro, resultado) => { se(erro) { lançar erro; } console.registro(resultado); }); |
Adicionamos persist_to que nos permite especificar em quantos nós os dados devem persistir no disco antes de dar uma resposta. No nosso caso, só queremos saber se os dados estão no disco em um único nó, e está tudo bem.
Agora vamos apresentar nosso terceiro e último cenário. Digamos que tenhamos criado um aplicativo bancário. É fundamental que nossas transações existam no disco e é fundamental que esses dados sejam replicados em caso de falha do nó e do disco. A perda de qualquer informação para um cliente em relação a dados bancários pode resultar em penalidades enormes.
Dito isso, nossa operação de criação muda um pouco:
|
1 2 3 4 5 6 |
balde.inserir(id, dados, { "persist_to": 1, "replicate_to": 2 }, (erro, resultado) => { se(erro) { lançar erro; } console.registro(resultado); }); |
No código acima, estamos dizendo que, após criarmos um documento, queremos que ele seja mantido em pelo menos um disco e replicado em pelo menos dois outros nós antes de recebermos uma resposta. Podemos ajustar esses números conforme necessário, mas lembre-se de que quanto maior o requisito de durabilidade, mais lenta será a resposta da operação.
Conclusão
Há muitas coisas que você pode fazer com Couchbase. Embora muitas situações não precisem que você defina seus próprios requisitos de durabilidade, é bom poder decidir se seus dados devem atingir o cache, o disco ou a réplica por meio do SDK. Lembre-se de que, quanto mais fortes forem seus requisitos, mais lentas as coisas se tornarão, não porque o Couchbase seja lento para fazer essas coisas, mas porque mais coisas estão acontecendo.
Se você quiser saber mais sobre como usar o SDK do Couchbase Node.js, consulte o Documentação do SDK. Se você quiser saber mais sobre a durabilidade dos dados, confira o Portal do desenvolvedor do Couchbase.