GoLang

Visualização para desenvolvedores do SDK do Couchbase Go!

Tenho o prazer de anunciar o primeiro Developer Preview do nosso SDK oficial do Go (gocb) hoje.

 

Embora no passado tenhamos tido o projeto go-couchbase, que fornece acesso a muitos dos recursos do Couchbase, ele foi projetado principalmente para ser usado internamente em nossa empresa. O gocb marca a primeira prévia de uma versão futura projetada e desenvolvida especificamente para atender às metas dos desenvolvedores Go que usam o Couchbase.

 

O projeto gocb é implementado como um conjunto de métodos de bloqueio que podem ser usados simultaneamente em quantas goroutines forem desejadas. Sugerimos que você distribua sua carga de trabalho entre o maior número de goroutines que se encaixem no projeto do seu aplicativo para maximizar o paralelismo da biblioteca.

 

Você pode encontrar uma referência de API para o projeto gocb em: https://godoc.org/github.com/couchbaselabs/gocb/.

 

Execução de operações básicas

 

Realização de consultas de visualização

 

Registro em log

Embora o registro em log disponível no gocb ainda esteja em sua infância, ele pode fornecer muitas informações úteis para a depuração. Configurar o gocbcore para registrar no console é bastante trivial usando um objeto de registro incorporado. No entanto, certifique-se de chamar esse objeto apenas uma vez no início do aplicativo, pois se presume que o registrador seja imutável quando qualquer outro método for chamado.

 

Arquitetura do Go SDK

A biblioteca gocb

A biblioteca gocb é a nossa biblioteca orientada para o desenvolvedor, destinada a fornecer uma interface simples e fácil de usar para os usuários. Essa biblioteca implementa uma API de bloqueio que expõe a você toda a nossa funcionalidade voltada para o desenvolvedor.

 

A biblioteca gocbcore

A biblioteca gocbcore é nossa biblioteca interna que fornece toda a funcionalidade de gerenciamento inteligente e de rede do cliente. Essa biblioteca é usada internamente pelo gocb.

O gocbcore implementa um método quase sem bloqueio de operações de despacho, dando ao seu aplicativo a capacidade de distribuir facilmente a carga entre tantos núcleos quanto servidores em seu cluster. Isso significa melhor desempenho e a capacidade de usar o cliente com segurança em quantas goroutines desejar, sem incorrer em nenhuma penalidade de desempenho.

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

Autor

Postado por Brett Lawson

Brett Lawson é engenheiro de software principal da Couchbase. Brett é responsável pelo projeto e desenvolvimento dos clientes Node.js e PHP do Couchbase, além de desempenhar um papel no projeto e desenvolvimento da biblioteca C, libcouchbase.

23 Comentários

  1. Isso deve usar gocb.NewViewQuery?

    vq := gocouchbase.NewViewQuery(\"dev_all\", \"by-id\").Limit(4)
    linhas := bucket.ExecuteViewQuery(vq)

  2. Outra pergunta: o SDK da Golang consegue se conectar ao Sync Gateway?

    1. Não. Atualmente, no golang, você se conectaria ao SG por meio da API REST do it.

  3. Não parece haver uma função Disconnect. Estou correto em dizer que devo me conectar apenas uma vez, manter essa conexão durante todo o tempo de vida do aplicativo e que a conexão será liberada no encerramento do aplicativo?

    1. Isso está correto. Embora a capacidade de desconexão seja útil em alguns casos extremos, a maneira adequada de lidar com as conexões do Bucket é criá-las durante a inicialização do aplicativo e usar a mesma instância em todo o aplicativo (os métodos do Bucket são seguros e eficientes em quantas goroutines você considerar necessário).

      1. Existe um meio recomendado de encerrar o aplicativo para garantir que a conexão do Bucket subjacente seja fechada ou ela será fechada independentemente do meio de encerramento? Por exemplo, falha do sistema, etc.

      2. Mas e se eu definir as conexões do bucket em um pool com tamanho inicial e máximo do pool?
        e precisa fechar as conexões que excederam o tamanho inicial !!!

        1. Por que você colocaria as conexões em um pool? A biblioteca gocb é totalmente thread-safe e pode ser usada com segurança em qualquer número de goroutines sem nenhum problema de desempenho.

          1. Obrigado,
            mas preciso do pool para evitar o uso excessivo dos recursos do servidor,
            De qualquer forma, acho que fechar a conexão pode ser útil para ser exportado como um método.

          2. Ei, você poderia explicar melhor como o agrupamento das instâncias do Bucket reduziria o uso de recursos de atendimento? Na verdade, suspeito que o resultado possa ser o oposto, já que as conexões do Bucket são bastante caras em termos de recursos usados e são altamente otimizadas para ter um bom desempenho em vários threads.

          3. Obrigado pela resposta,
            Mas quero dizer que isso reduzirá o uso de recursos para meu aplicativo de servidor, não para o servidor de banco de dados
            De qualquer forma, é um bom ponto para apoiar o método de fechamento

      3. Podemos usar o método \"bucket.IoRouter().CloseTest()\" para fechar a conexão corretamente?

        1. Esse é um método de teste que não foi planejado para aparecer no repositório. Ele pode fechar as conexões corretamente, mas também pode fazer com que todo o seu aplicativo exploda. Por favor, não o utilize.

  4. Essa biblioteca oferece suporte a estratégias de repetição plugáveis e
    modo fail-fast?

    1. Olá, Paulo,

      O Go SDK não oferece suporte a nenhum desses recursos no momento. No entanto, se você puder explicar como veria esses recursos funcionando, ficarei feliz em considerar a possibilidade de adicioná-los em um futuro próximo.

      Abraços, Brett

  5. Se uma operação que persiste dados em um nó por meio de um
    a conexão falhar no caso de falha do nó, o SDK tentará automaticamente
    para estabelecer uma conexão com o próximo nó que for promovido? Ou, meu
    lógica do aplicativo, em vez disso, capturar erros de conexão específicos e responder
    de acordo, tentando explicitamente se reconectar?

    1. O aplicativo tenta tentar novamente as operações de armazenamento somente enquanto for seguro fazê-lo. No caso de uma falha de nó, uma vez que a operação já tenha sido despachada na rede, o erro será propagado para o usuário para ser tratado, pois o status real das operações é desconhecido nesse ponto e a repetição automática pode ser problemática.

      1. Obrigado. Você pode oferecer um exemplo de como lidar com esse erro?

  6. Percebo que se eu adicionar um documento da seguinte forma:

    bucket.Upsert(id, &myStruct, 0)

    E, em seguida, invoco uma exibição conforme seu exemplo, a variável de linha contém um ID que não é relevante. Não tenho certeza de onde ele vem, mas não é igual ao ID que defini durante o upsert.

    Se eu me reconectar e chamar a exibição novamente, tudo funcionará como esperado.

    Tentei definir um período de espera antes de chamar a exibição, sem sucesso. Estou executando um único nó em uma máquina DEV.

    1. Na verdade, tenho certeza de que isso se deve ao fato de a visualização não ser tão consistente quanto outras operações. A ID irrelevante parece ser a ID de um documento excluído anteriormente.

  7. Olá, Brett, a biblioteca oferece suporte a multi-get? Em vez de percorrer os resultados de uma exibição individualmente, seria útil oferecer uma lista de IDs a um único recurso para recuperar valores em uma única chamada, conforme o Java SDK.

  8. Oi Brett,

    Qual é a melhor estratégia a ser adotada quando um aplicativo precisa de várias conexões do Bucket?

  9. Alexey Poimtsev outubro 26, 2015 em 6:54 am

    Algo errado com a biblioteca :(

    $ go get gopkg.in/couchbaselabs/gocb.v0

    # gopkg.in/couchbaselabs/gocb.v0

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.UnlockCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.TouchCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.RemoveCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.StoreCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.StoreCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.StoreCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.StoreCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCasCallback) para o tipo gocbcore.StoreCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCtrCallback) para o tipo gocbcore.CounterCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... não é possível converter cb (tipo ioCtrCallback) para o tipo gocbcore.CounterCallback

    /Usuários/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... muitos erros

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.