Você já criou um aplicativo em que precisou salvar um documento em Couchbase e depois consultar imediatamente o documento criado? Isso acontece comigo o tempo todo quando estou desenvolvendo. Por exemplo, adicionar novos dados a uma lista em que cada item da lista é um novo documento. Em muitos cenários, você desejará atualizar a interface do usuário que renderiza a lista imediatamente após a adição. O problema aqui é que o documento que você acabou de criar pode não aparecer nos resultados da consulta. Isso ocorre porque os indexadores do Couchbase podem não ter processado as mutações mais recentes no Bucket do Couchbase.
Veremos como definir nossa própria consistência de varredura em um aplicativo Node.js que produzirá resultados variáveis em nossas consultas N1QL do Couchbase.
A definição da consistência da varredura em um aplicativo será semelhante, independentemente da tecnologia de programação usada. Para este exemplo em particular, estaremos usando Node.js com N1QL e Ottoman.js.
Antes de prosseguir, pressupõe-se que você tenha o Couchbase instalado e configurado para N1QL. Isso significa que você tem pelo menos um índice pronto para ser usado, mesmo que seja um índice primário.
Definição da consistência de varredura com consultas N1QL
A primeira coisa com que vamos nos preocupar são as consultas relacionadas ao N1QL. Dê uma olhada no seguinte trecho de código JavaScript do Node.js:
1 2 3 4 5 6 7 8 9 |
aplicativo.obter("/endpoint", função(solicitação, resposta) { var declaração = N1qlQuery.fromString("SELECT META().id, `" + balde._nome + "`.* FROM `" + balde._nome + "`"); balde.consulta(declaração, função(erro, resultado) { se(erro) { retorno resposta.status(500).enviar(erro); } resposta.enviar(resultado); }); }); |
Por padrão, o SELECIONAR
é ilimitada. Isso significa que a consulta retornará somente os dados que estão indexados no momento, produzindo a resposta mais rápida possível. Lembre-se de que, se nossos novos dados não tiverem sido indexados, eles não serão retornados nos resultados.
Se quisermos esperar até que nossos dados sejam indexados, poderemos definir a consistência da varredura da seguinte forma:
1 2 |
var declaração = N1qlQuery.fromString("SELECT META().id, `" + balde._nome + "`.* FROM `" + balde._nome + "`"); declaração.consistência(N1qlQuery.Consistência.REQUEST_PLUS); |
Observe que alteramos a consistência no snippet acima para REQUEST_PLUS
em vez de deixá-lo ilimitado. Isso significa que a consulta não será executada até que todas as mutações no Bucket tenham sido processadas.
E se não estivermos usando o N1QL, mas sim o Ottoman.js?
Definição da consistência de varredura com Ottoman.js
O Ottoman é um pouco diferente, mas as regras ainda se aplicam porque, ao usar o encontrar
operador, o N1QL está sendo usado por baixo dos panos.
Dê uma olhada no seguinte trecho de JavaScript:
1 2 3 4 5 6 7 8 |
aplicativo.obter("/endpoint", função(solicitação, resposta) { Pessoa.encontrar({}, função(erro, resultado) { se(erro) { retorno resposta.status(500).enviar(erro); } resposta.enviar(resultado); }); }); |
O objetivo aqui é realizar a mesma coisa que vimos anteriormente. No exemplo acima, estamos fazendo uma consulta ilimitada e receberemos apenas os resultados que foram processados pelo índice.
Isso pode ser facilmente alterado da seguinte forma:
1 2 3 4 5 6 7 8 |
aplicativo.obter("/endpoint", função(solicitação, resposta) { Pessoa.encontrar({}, { consistência: Otomana.Consistência.LOCAL }, função(erro, resultado) { se(erro) { retorno resposta.status(500).enviar(erro); } resposta.enviar(resultado); }); }); |
No código acima, LOCAL
consistência é o mesmo que dizer REQUEST_PLUS
.
Não é tão ruim, certo?
Conclusão
Você acabou de ver como definir sua própria consistência de varredura no Couchbase usando o Node.js e o N1QL ou o Ottoman. Por padrão, as consultas têm o desempenho em primeiro lugar, mas se você precisar fazer ajustes, pelo menos isso está disponível como opção.
Se você quiser saber mais sobre a consistência do escaneamento e as opções disponíveis, consulte a Documentação do Couchbase sobre o assunto.