Sobre o que estou aprendendo Couchbase é que, embora seu objetivo seja fornecer padrões sensatos, ele também oferece opções para fazer concessões. A compensação na qual vou me concentrar nesta postagem do blog é a consistência de varredura para consultas N1QL.

N1QL is SQL for JSON Documents

O Couchbase 4.5 apresenta um novo Opção de consistência de varredura: AtPlus. Isso se junta às opções existentes para formar um total de três:

  • NotBounded (padrão)

  • AtPlus (novo no Couchbase Server 4.5)

  • RequestPlus

Esta postagem do blog analisará o NotBounded e o RequestPlus, além de apresentar o AtPlus. Também fornecerei um exemplo de código que você pode usar para experimentar os três.

Não limitado

Esse é o comportamento padrão.

Uma consulta N1QL que esteja usando a consistência de varredura "Not Bounded" significa que ela não esperará que nenhum índice termine de ser atualizado antes de executar a consulta e retornar os resultados. Digamos que você tenha os documentos A, B e C em um bucket. No momento da consulta, apenas A e B estão indexados. Com Not Bounded, somente os documentos A e B serão retornados.

Como a consulta não está esperando por nenhuma indexação, essa é a melhor opção de desempenho. O documento C aparecerá assim que for indexado. Isso não deve demorar muito, mas se você tiver acabado de criar C, por exemplo, e depois consultar imediatamente uma lista completa de documentos, C poderá não aparecer. Para demonstrar com o amostra de viagem balde:

O que eu esperaria ver ao executar esse código é:

  1. Contagem inicial: N

  2. Contagem após a inserção: N (ainda)

  3. Em espera

  4. Contagem após a espera: N+1

Defino o tempo de espera em 5 segundos, o que provavelmente é um exagero. Uso o Thread.Sleep apenas para fins de demonstração, mas é óbvio que essa é uma tática complicada para um aplicativo real. Isso nos leva ao RequestPlus.

RequestPlus

Essa opção de consistência de varredura fornece quase o oposto de Not Bounded. Ela aguardará até que todas as alterações de documentos e atualizações de índices (até o momento em que a consulta foi executada) sejam processadas antes de executar a consulta.

Veja a seguir um exemplo simplificado da sequência de eventos ao usar o RequestPlus

  1. O documento C é criado

  2. A consulta N1QL para obter todos os documentos é executada (A, B, C existem todos no bucket)

  3. A consulta N1QL é colocada em espera porque pelo menos um documento precisa ser indexado (documento C).

  4. O processo de indexação foi concluído. O documento C agora está indexado.

  5. A consulta N1QL é executada, retornando A,B,C.

Isso nos dá integridade nos resultados da consulta, às custas do desempenho. Em alguns casos, não faz sentido esperar pelo tudo para ser indexado. E isso nos leva ao AtPlus.

AtPlus (novo no Couchbase 4.5)

Essa opção de consistência de varredura oferece um meio-termo entre RequestPlus e Not Bounded. Ela também é uma nova opção de consistência de varredura para o Couchbase 4.5.

Com o AtPlus, você terá que trabalhar um pouco mais em seu código, mas, em troca, terá um desempenho melhor do que com o RequestPlus. Em vez de aguardar a conclusão de um índice inteiro (que pode ser de vários documentos), ele aguardará apenas que os documentos que você especificar sejam indexados antes de executar a consulta. Isso às vezes é conhecido como "read your own write" (leia sua própria gravação) ou RYOW.

Com esse exemplo, a consulta N1QL aguardará apenas que o novo documento seja indexado. Ela não esperará por mais nada. Em um sistema de grande volume, isso pode proporcionar um bom equilíbrio entre maior desempenho e integridade dos resultados.

Observe que, no momento em que escrevemos esta postagem, você precisa se certificar de que definiu explicitamente UseEnhancedDurability como true ao configurar seu Configuração de cliente:

Conclusão

Com o N1QL, há um espectro de velocidade e integridade. Com o Couchbase Server 4.5, agora você tem três opções. O NotBounded para velocidade bruta, o RequestPlus para integridade atualizada e o AtPlus fica no meio.

Por favor, deixe um comentário, me envie uma mensagem no Twitterou envie um e-mail para mim (matthew.groves AT couchbase DOT com).

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta