GoLang

A API de subdocumento do Couchbase para Go

A API de subdocumento - go

Você provavelmente já ouviu falar sobre o subdocumento (subdoc) API disponível no couchbase 4.5. Mark Nunberg, um dos arquitetos da nova API, tem um ótimo blog sobre a motivação e o ímpeto por trás da extensão da API do Memcached (valor-chave) para oferecer suporte a operações de subdocumento. Matthew Revell também elaborou um ótimo amostra usando Java e Python. Se você for como eu, vai querer ver qualquer novo recurso expresso em sua(s) linguagem(ns) preferida(s). Para mim, isso significa go ou nodejs. Vamos dar uma olhada em um exemplo e ver como a API funciona em go.

Editar: Esta postagem do blog foi editada com atualizações da versão 4.5 Beta

Para conhecer outros recursos do Couchbase 4.5, consulte as postagens do blog de Don Pinto sobre o Visualização do desenvolvedor e o Beta.

Vamos começar com uma estrutura json simples, com três campos

Crie um documento usando a estrutura que definimos e "insira-o" no couchbase

Agora, vamos adicionar uma matriz ao documento que criamos em um novo campo e, em seguida, executar algumas operações adicionais na matriz. Com a mágica da API de subdoc, podemos fazer tudo isso sem precisar recuperar ou atualizar o documento inteiro. Isso economiza tempo e largura de banda, além de melhorar consideravelmente o desempenho.

O que acabou de acontecer? Preciso de um construtor!

A API go para operações de subdocumento adiciona dois novos métodos ao tipo Bucket: LookupIn() e MutateIn(). Essas operações em nível de bucket são consistentes em todos os SDKs do couchbase. Se você estiver usando go, nodejs, Java, .NET, C ou Python, todas elas funcionam da mesma maneira. Essa é uma boa conveniência para a portabilidade do código, pois raramente vemos um ambiente de produção com apenas uma linguagem em toda a pilha. Vamos dar uma olhada no que esses dois novos métodos do tipo Bucket fazem nos bastidores:

Mutação

Vejamos o MutateInBuilder, usado para combinar uma ou mais operações de mutação com escopo em um único documento: func (b *Bucket) MutateIn(key string, cas Cas, expiry uint32) *MutateInBuilder. Essa função inclui um método receptor para o tipo Bucket e retorna uma referência ao MutateInBuilder

O MutateInBuilder tem dez métodos:

  • AddUnique(): func (set *MutateInBuilder) AddUnique(path string, value interface{}, createParents bool) *MutateInBuilder  Esse método adiciona um valor exclusivo a um campo de matriz existente. Ele verifica se o valor existe primeiro e o atualiza. Ele retorna uma referência a um MutateInBuilder
  • ArrayInsert(): func (set *MutateInBuilder) ArrayInsert(path string, value interface{}) *MutateInBuilder  Esse método insere um valor de matriz em um campo de matriz de um documento. ObservaçãoEm nosso exemplo acima, passamos uma string que representa a matriz e o índice: "fourthItem[2]". Ele retorna uma referência a um MutateInBuilder
  • Counter(): func (set *MutateInBuilder) Counter(path string, delta int64, createParents bool) *MutateInBuilder  Esse método executa uma operação de contador atômico em um campo de um documento. Ele retorna uma referência a um MutateInBuilder
  • Insert(): func (set *MutateInBuilder) Insert(path string, value interface{}, createParents bool) *MutateInBuilder  Esse método insere um novo valor em um local específico de um documento. Ele retorna uma referência a um MutateInBuilder
  • PushBack(): func (set *MutateInBuilder) PushBack(path string, value interface{}, createParents bool) *MutateInBuilder  Esse método adiciona um novo valor ao final de um campo de matriz em um documento. Ele retorna uma referência a um MutateInBuilder
  • PushFront(): func (set *MutateInBuilder) PushFront(path string, value interface{}, createParents bool) *MutateInBuilder  Esse método adiciona um novo valor ao início de um campo de matriz em um documento. Ele retorna uma referência a um MutateInBuilder
  • Remove(): func (set *MutateInBuilder) Remove(path string) *MutateInBuilder  Esse método remove um valor de um campo específico de um documento. Ele retorna uma referência a um MutateInBuilder
  • Replace(): func (set *MutateInBuilder) Replace(path string, value interface{}) *MutateInBuilder  Esse método substitui um valor em um campo de um documento. Ele retorna uma referência a um MutateInBuilder
  • Upsert(): func (set *MutateInBuilder) Upsert(path string, value interface{}, createParents bool) *MutateInBuilder  Esse método adiciona ou substitui um campo em um documento. Ele retorna uma referência a um MutateInBuilder
  • Execute(): func (set *MutateInBuilder) Execute() (*DocumentFragment, error)  Esse método envia as operações encadeadas ao servidor e retorna um Fragmento de documento contendo seus resultados.

O fluxo lógico para MutateIn() tem o seguinte aspecto

Pesquisa

Vamos dar uma olhada no LookupInBuilder, que nos permite declarar uma ou mais operações de recuperação com escopo de um único documento: func (b *Bucket) LookupIn(key string) *LookupInBuilder. Essa função inclui um método receptor para o tipo Bucket e retorna uma referência ao LookupInBuilder.

O LookupInBuilder tem três métodos:

  • Get(): func (set *LookupInBuilder) Get(path string) *LookupInBuilder  Esse método solicita que o conteúdo do caminho seja recuperado. Retorna uma referência a um LookupInBuilder
  • Exists(): func (set *LookupInBuilder) Exists(path string) *LookupInBuilder   Verifica se o caminho fornecido existe. Retorna uma referência a um LookupInBuilder
  • Execute(): func (set *LookupInBuilder) Execute() (*DocumentFragment, error)  Esse método envia os comandos encadeados ao servidor e retorna uma referência a um Fragmento de documento (contendo os resultados) e um tipo erro se for encontrado um.

O fluxo lógico para LookupIn()tem o seguinte aspecto

Próximas etapas

Por que não tentar você mesmo? O exemplo acima, juntamente com vários outros exemplos de go, pode ser encontrado em nosso repositório de guias do desenvolvedor em github Uma ótima maneira de começar e experimentar o couchbase 4.5 (em versão beta no momento da publicação) é com o docker. A imagem do docker do couchbase 4.5 pode ser carregada se você tiver o docker instalado com o seguinte comando:

docker run -d --name=CB45DP1 -p 8091-8093:8091-8094 -p 11207-11210:11207-11210 -p 18091-18092:18091-18092 couchbase/server:enterprise-4.5.0-Beta

Nós gostamos de receber feedback - experimente e diga-nos o que você achou.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Author

Posted by Todd Greenstein

Todd Greenstein é arquiteto de soluções na Couchbase. Todd é especializado em design de API, arquitetura, modelagem de dados, desenvolvimento em nodejs e golang.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.