Consistência de alto desempenho
Ao usar o Couchbase como seu sistema de registro, fornecemos a melhor experiência de indexação da categoria usando nosso índices secundários globais e isolamento da carga de trabalho por meio de nós de indexação dedicados. Aprimoramos ainda mais essa experiência no Couchbase 4.5 com dois novos recursos importantes:
- Índices secundários exclusivos na memória usando um novo mecanismo de armazenamento memdb
- Consistência de alto desempenho (código denominado "AT_PLUS") que permite a você, desenvolvedor, um controle de granularidade mais preciso do modelo de consistência para gravações e leituras.
Neste blog, abordaremos em detalhes o que significa consistência de alto desempenho e forneceremos alguns recursos para ajudá-lo a começar.
Alguns antecedentes - Como funcionam os índices secundários globais de consulta
Os índices secundários globais no couchbase têm as seguintes características:
- Eles têm escopo para um único nó de índice e não são particionados automaticamente. A princípio, isso pode parecer uma limitação. Na verdade, é uma escolha intencional de design que fizemos para manter o desempenho alinhado com o que você espera do Couchbase.
- Eles podem ser definidos pelo usuário usando nossa variante sql (N1QL) e são incrivelmente flexíveis. Podemos até mesmo indexar matrizes em documentos json.
- Há dois mecanismos de armazenamento diferentes disponíveis:
- Forestdbnosso mecanismo de armazenamento padrão no couchbase. Por padrão, os índices do forestdb são atualizados ciclicamente, a cada 200 ms.
- Memdb, (Índices otimizados para memória) são nossa opção incrivelmente rápida somente na memória para índices secundários. Por padrão, os índices memdb são atualizados ciclicamente, a cada 20 ms.
Ao emitir uma consulta N1QL, usando o Couchbase 4.5, agora você tem três opções para controlar a consistência da sua consulta:
Padrão
Padrão, ou "ilimitado", são consultas em que a projeção (conjunto de resultados) inclui todos os dados existentes ou referenciados no estado atual do índice. Essa é a experiência de consulta mais rápida. A consistência não está vinculada à sua consulta de forma alguma. Isso é ótimo para a maioria dos casos de uso. Há casos de uso em que você precisa de uma experiência de consistência mais imediata. Digamos que, em um perfil de usuário, você atualize o perfil com uma compra recente. Agora, você precisa consultar imediatamente esse mesmo usuário para obter uma lista completa de compras. Se o indexador não tiver indexado a alteração que você fez no perfil do usuário, o conjunto de resultados da consulta não incluirá essa compra recente.
Solicitar mais
Request plus são consultas em que a projeção inclui todas as atualizações limitadas a partir do momento em que você emitiu a consulta. O indexador precisa garantir que o índice em sua projeção seja limitado para incluir todas as atualizações em todas as partições do cluster no momento em que a "solicitação" da consulta foi feita. Isso se encaixa no cenário acima, em que um perfil de usuário é atualizado para incluir uma compra recente e, em seguida, consulta imediatamente esse documento para ver uma lista consistente de itens comprados. Embora esse tipo de consulta seja muito útil em determinadas situações, é caro exigir que o índice no cluster inclua todas as atualizações no momento em que a consulta foi emitida. Isso é melhor explicado no diagrama abaixo. Observe como o indexador deve garantir que o índice esteja atualizado com todas as partições em cada nó do cluster:

Consistência de alto desempenho
Consistência de alto desempenho ou "AT Plus" são consultas em que a projeção inclui atualizações vinculadas a IDs de sequência de mutação específicos. Cada vez que uma operação de mutação é executada a partir de um de nossos SDKs, uma sequência de id de mutação pode ser obtida especificamente para essa mutação. Quando chegar a hora de consultar esses mesmos dados, essas sequências de mutação poderão ser passadas como parâmetro para o nó de consulta. Embora isso pareça complicado, na verdade não é - nós fornecemos abstrações muito fáceis de usar na forma de tokens de mutação para lidar com o trabalho pesado para você. Para que o AT_PLUS funcione, os tokens de mutação devem ser ativados na instância do Bucket e os MutationTokens reais (encontrados nos documentos retornados como resultado das operações de mutação) são passados para o objeto N1QL Query. Para que o SDK inclua um MutationToken no documento retornado após uma mutação, o recurso deve primeiro ser negociado com o servidor. Ele está disponível desde o Couchbase Server 4.0 e pode ser ativado no CouchbaseEnvironment do SDK. Em java, isso se parece com:
|
1 2 3 4 5 |
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.construtor() .mutationTokensEnabled(verdadeiro) //outros ajustes estão aqui .construir(); Aglomerado agrupamento = CouchbaseCluster.criar(env, "127.0.0.1"); |
Uma vez feito isso, o documento retornado de cada operação de mutação de chave/valor que você executar também conterá um MutationToken. É importante observar que o objeto Document retornado é diferente daquele passado como argumento. Você deve usar esse valor de retorno para obter a consistência AT_PLUS, passando-o para o método consistentWith() do construtor N1qlParams. Os parâmetros podem então ser passados para o próprio construtor N1qlQuery, como neste exemplo java:
|
1 2 3 4 5 6 |
JsonDocument originalDoc = JsonDocument.criar("chave"); JsonDocument docWithToken = balde.upsert(originalDoc); //não use o originalDoc (ele não terá um token), use o docWithToken! N1qlParams atPlus = N1qlParams.construir().consistente com(docWithToken); N1qlQuery consulta = N1qlQuery.simples("SELECT * FROM default WHERE updatedCriteria = 1", atPlus); |
Isso é incrivelmente eficiente. Você pode especificar para o indexador as mutações exatas com as quais deseja que seu índice seja consistente. Vejamos a mesma arquitetura do exemplo "request plus". Se os documentos que procuramos estivessem todos localizados em partições no nó 1 usando "at plus", o cenário seria muito diferente:

Por meio de nosso benchmarking interno de desempenho, o uso do "at plus" pode resultar em uma melhoria de 10 vezes ou mais na latência média, além de reduzir drasticamente o uso da CPU/memória em todo o cluster.
Próximas etapas
Uma ótima maneira de experimentar esse recurso, além de vários outros novos recursos, é experimentar o Couchbase 4.5. Ele pode ser baixado gratuitamente em nosso site página de downloads. Uma visão geral abrangente do que está incluído nesta versão pode ser encontrada em "Whats New in Couchbase 4.5", de Don Pinto blog.