Ratnopam ChakrabartiRatnopam Chakrabarti é um desenvolvedor de software que trabalha atualmente para a Ericsson Inc. Ele tem se concentrado em IoT, tecnologias máquina a máquina, carros conectados e domínios de cidades inteligentes por um bom tempo. Ele adora aprender novas tecnologias e colocá-las em prática. Quando não está trabalhando, gosta de passar o tempo com seu filho de 3 anos.

Inserção de documentos com chaves sequenciais (autonumeração)

Durante o processo de desenvolvimento de software, muitas vezes nos deparamos com uma situação em que precisamos gerar uma chave exclusiva (de uma entidade) de forma sequencial ordenada (ordem crescente ou decrescente). Exemplos comuns incluem:

  1. Armazenamento de entradas de um arquivo de registro com um número de sequência gerado automaticamente atribuído a cada linha de dados

  2. Armazenamento de entidades comerciais em um banco de dados e com uma chave primária gerada a partir de um número de sequência incremental

No mundo dos bancos de dados relacionais, isso é obtido com o uso de algo conhecido como "sequência de banco de dados". A sequência é um recurso fornecido pela maioria dos produtos de banco de dados que simplesmente cria valores numéricos exclusivos de forma ordenada. Ele simplesmente incrementa um valor e o retorna. Sem uma sequência de banco de dados, não é muito fácil gerar números exclusivos em uma ordem específica. É por isso que ela é uma escolha popular quando se trata de preencher uma chave primária (ou qualquer outra chave exclusiva) com valores exclusivos que aumentam automaticamente.

Outras maneiras de gerar chaves aleatoriamente exclusivas incluem o uso de recursos como GUID ou UUID. No entanto, não há garantia quanto à natureza de incremento automático que você obtém ao usar um gerador de sequência de banco de dados.

Nenhuma sequência em bancos de dados NoSQL

Diferentemente do mundo dos bancos de dados relacionais, não há um recurso de geração de sequências incorporado diretamente disponível na maioria dos bancos de dados NoSQL do mercado. Pode-se argumentar que não é comum que um sistema distribuído com dados de forma livre tenha um número exclusivo de incremento automático como chave exclusiva em um documento devido aos números conflitantes gerados no caso de replicação cruzada de dados entre diferentes nós e fragmentos. Em vez disso, a implementação de um UUID parece ser uma opção muito mais viável para garantir a exclusividade. No entanto, se você precisar de um ID exclusivo gerado aleatoriamente em uma sequência, precisará, de alguma forma, ter uma coluna de sequência de incremento automático em um banco de dados NoSQL, pois a solução UUID não preservaria a natureza de sequenciamento dos números gerados. A questão principal: Como você lidaria com isso usando o Couchbase? Bem, o Couchbase tem tudo o que você precisa e é isso que este post descreverá.

Configure um bucket do Couchbase para salvar os dados

Digamos que estejamos armazenando itens de um catálogo de produtos no Couchbase e, ao armazenar os produtos em um bucket do Couchbase, precisamos definir uma sequência gerada em cada JSON de dados do produto para que ela possa ser usada como uma "chave" exclusivamente identificável de um documento.

Para fazer isso, siga as etapas abaixo para criar um bucket chamado "prodcat".

  • Primeiro, faça login no console administrativo do Couchbase.
  • Tipo http://localhost:8091/ui/index.html em seu navegador.
  • Faça login com o nome de usuário e a senha de administrador.
  • Navegue até a guia Data Buckets (Compartimentos de dados) e clique em Create New Data Bucket (Criar novo compartimento de dados).
  • Digite "prodcat" no campo Bucket Name e 512 no campo Per Node RAM Quota.
  • Deixe todos os outros campos como padrão e clique em "Create" (Criar).
  • Depois que o bucket for criado com êxito, ele será listado com 0 itens.

Uso de documentos do contador

O Couchbase lida com a geração de sequências por meio do que é conhecido como um documento "contador". O contador é um documento que pode ser incrementado ou decrementado sequencialmente. Um aspecto importante a ser observado aqui é que a operação de incremento ou decremento do contador é atômica. Quando inserimos uma entidade comercial (como Product, no nosso caso) como um documento JSON, podemos usar o documento contador com um padrão de chave para gerar uma sequência.

O trecho de código a seguir inicializa um documento de contador com um valor inicial de 20.

Nesse ponto, nosso documento de contador é inicializado com um valor de 20.

Executamos o código a seguir em um loop para inserir os dados do produto de forma sequencial:

A seguir, uma explicação do código acima:

O nextId é calculado incrementando o contador em 1.

Usamos o nextId para preencher o campo "id" do documento do produto.

Onde "idGeneratorForProducts" é o documento do contador que contém o valor atual do contador. Cada documento de produto tem o "id" preenchido com a sequência:

Vale a pena mencionar que também podemos implementar a sequência em ordem decrescente. Nesse caso, a única coisa que precisamos fazer é:

  • Inicialize o contador com o valor máximo.
  • Diminui o contador em 1 para gerar o nextId na sequência.
  • Use o nextId para inserir um documento em um bucket.

Conclusão

O código usado neste artigo foi escrito em Java e faz uso do Spring Boot e Spring Data Dependências do Couchbase. Os mesmos conceitos podem ser aplicados a qualquer SDK de cliente do Couchbase.

O código-fonte do aplicativo pode ser encontrado em https://github.com/ratchakr/prodcat.

Autor

Postado por Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase

Laura Czajkowski é a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela é responsável pelo nosso boletim informativo mensal para desenvolvedores.

Um comentário

  1. Essa funcionalidade está disponível na API do Admin (ou só está disponível com o SDK)...?

Deixar uma resposta