Finalmente, apresentamos o Developer Preview 1 (DP1) oficial do SDK do Couchbase .NET 2.0! Anteriormente, eu publicado sobre algumas das motivações por trás da reescrita do SDK do Couchbase .NET e também sobre alguns dos objetivos e recursos que você deve esperar encontrar nele. Este DP1 representa o subconjunto mínimo de recursos prometido e deve lhe dar uma ideia da direção que estamos tomando para a API do ponto de vista do desenvolvedor. Nesta publicação, mostrarei como começar a trabalhar com uma prévia do novo cliente e mostrarei alguns desses recursos.
Aviso: Não use a DP1 na produção!
A não ser, é claro, que você goste de trabalhar com tesouras e que noites sem dormir depurando problemas de produção sejam o seu forte!
Sério pessoal, isso deve ser considerado um pré-lançamento muito precoce e, entre agora e o GA final, são esperadas muitas mudanças internas e externas. Dito isso, as interfaces públicas provavelmente não mudarão muito, com exceção de métodos e funcionalidades adicionais que serão acrescentados.
Pré-requisitos
São necessários alguns pré-requisitos para começar a usar a DP1:
- Você tem uma instância local do Couchbase Server 2.5 ou superior instalada e em execução. Caso contrário, faça isso agora: http://www.couchbase.com/download
- Você tem o N1QL Developer Preview 3 instalado e em execução. Caso contrário, obtenha-o também: http://www.couchbase.com/communities/n1ql
- Visual Studio 2013 instalado. O VS2012 provavelmente também servirá, ou uma das versões Express: http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspxmas eu não os testei, então você está por sua conta ;)
- Agora, faça o download dos bits em aqui.
Ok, tem tudo instalado? Legal, vamos escrever algum código*!
*Se quiser acompanhar como um tutorial, inicie o VS2013 e crie um aplicativo de console chamado Couchbase.NetDP1 e adicione referências aos binários do último item acima. A solução/projeto final também está disponível aqui.
Objeto de cluster
O objeto Cluster representa o lado do cliente de um cluster do Couchbase Server e fornece interfaces para interagir com os Buckets do Couchbase e as APIs de gerenciamento. Internamente, ele gerencia a conectividade entre o cliente e o servidor e garante que os recursos sejam alocados e desalocados corretamente.
A classe Cluster é um GOF Singleton com comportamento de carregamento lento; é que uma única instância deve ser usada em todos os threads de um processo. Essa é uma grande mudança em relação ao cliente 1.X anterior que, embora não fosse um singleton, por motivos de desempenho, precisava ser tratado como um singleton.
Para usar o objeto Cluster, primeiro você precisa inicializá-lo. Por padrão, a configuração é definida para usar o localhost (127.0.0.1) e criar um pool de conexões com um MaxSize de 2 e um MinSize de 1 conexão TCP por objeto do Cluster. Você pode substituir esses padrões criando seu próprio objeto ClientConfiguration e passando-o para o método Cluster.Initialize(...) antes de chamar Cluster.Get().
A classe ClientConfiguration também permite substituir a configuração no nível do Bucket, o que permite criar uma configuração separada para cada Bucket que você deseja usar.
O objeto CouchbaseBucket
Além do objeto Cluster, outra classe importante é a classe CouchbaseBucket, que fornece uma API para consultar visualizações, realizar consultas N1QL e fazer operações CRUD gerais nas chaves. Ela também executa qualquer serialização/desserialização necessária de Types e gerencia o hashing de chaves em todo o cluster para um conjunto de chaves. A classe CouchbaseBucket implementa a interface IBucket e tem um primo para trabalhar com Buckets Memcached na memória: MemachedBucket. Ambas são compatíveis com este DP.
Para usar a classe CouchbaseBucket, você precisa de um objeto Cluster inicializado (veja acima) e também precisa que o Bucket já exista na instância ou no cluster do Couchbase Server. Aqui está um exemplo de abertura do Bucket "padrão" que vem com cada instalação do Couchbase:
Depois de ter uma instância do Bucket, você pode começar a executar operações CRUD em documentos e no Bucket. Observe que, no DP1, só há suporte para a inserção e a leitura de documentos. Aqui está um exemplo do novo método Insert:
E aqui está um exemplo de uso de Get(key) para recuperar os documentos inseridos no bucket padrão usando o código acima:
Quando terminar de usar um Bucket, basta liberar de volta para o objeto Cluster:
O próprio objeto Cluster implementa IDisposable, portanto, quando o processo que o está usando termina, o método Dispose deve ser chamado. Se ele não for chamado explicitamente, o GC invocará o finalizador em algum momento posterior, chamando implicitamente o Dispose e limpando os recursos internos.
O objeto IOperationResult
A maioria dos métodos retorna um objeto IOperationResult que fornece informações adicionais sobre os resultados da operação. O mais notável é que ele tem as seguintes propriedades:
- Valor - o objeto ou valor que está sendo inserido ou retornado do Couchbase - este é o Tipo T
- Sucesso - um valor booleano que indica se a operação foi bem-sucedida ou não
- Mensagem - um valor de cadeia de caracteres com informações adicionais sobre o motivo da falha da operação (se tiver ocorrido); caso contrário, estará vazio.
- Status da resposta - o valor retornado do servidor que indica o status da operação.
- Cas - um longo sem sinal que é o valor "Check and Set" para a operação. Isso é usado como um meio de concorrência otimista.
Um padrão bastante típico é verificar a propriedade Success e alterar o fluxo do programa de acordo com a detecção de um erro.
Suporte N1QL!
Essa visualização para desenvolvedores também oferece suporte básico para consultas N1QL ad-hoc! Se você não sabe o que é N1QL, trata-se de uma linguagem semelhante ao SQL para consultar documentos nos Buckets do Couchbase. Aqui está um exemplo:
Observe que você deve ter o Developer Preview 3 do N1QL instalado e em execução para que isso funcione! Você pode obtê-lo aqui: http://www.couchbase.com/communities/n1ql
Exibir suporte
A consulta de visualização também é compatível com a visualização do desenvolvedor 1. Supondo que você tenha o beer-sample instalado (você pode instalá-lo no Console de gerenciamento do Couchbase Server nas guias Configurações->Amostra), a consulta a seguir deve funcionar:
O método CreateQuery cria uma interface IViewQuery que permite a geração de um URI REST do Couchbase View. Trata-se de um "estilo fluente" para que você possa encadear uma série de chamadas para criar a consulta certa para o seu caso de uso.
Próximo
Esperamos ter pelo menos mais uma prévia para desenvolvedores antes de lançarmos a versão beta e uma versão geral pode ser esperada para meados ou final do verão de 2014 (nenhuma data está definida, portanto, isso pode mudar!). Do ponto de vista do público, as interfaces públicas discutidas aqui provavelmente mudarão um pouco, principalmente para torná-las mais consistentes e fáceis de usar. Dito isso, elas ainda estão prontas, aguardando o feedback da comunidade de desenvolvedores (estamos ouvindo vocês!).
O que você provavelmente verá na próxima visualização para desenvolvedores é o suporte para todas ou a maioria das operações CRUD do Couchbase (Incrementar/Decrementar, observar, etc.) e o suporte para TAP (aguardar/async) Depois disso, você dará mais ênfase ao desempenho e à estabilidade interna. Mais adiante, você verá LINQ suporte para N1QL consultas e suporte a SSL
Precisamos de seu feedback!
Sim, você! Vá em frente e brinque com os bits e diga-nos o que achou. Se encontrar um bug ou tiver uma solicitação de recurso, você pode criar um tíquete do Jira aqui: http://www.couchbase.com/issues/browse/NCBC
Estou tentando usar esse DP1. Ele lança \"JSON integer 15456010240 é muito grande ou pequeno para um Int32. Path \'[0].quota.ram\', linha 1, posição 12344\" na linha cluster.OpenBucket(bucketName); Não deveria ser uma variável Int64 para manter o tamanho da RAM?
Esse código-fonte é aberto? Seria ótimo ter acesso a ele para podermos contribuir também. Além disso, estou tentando criar um wrapper LINQ para consultas N1QL com suporte a rastreamento de alterações com base em snapshot e resultados JSON. Nossa implementação é baseada no CqlSharp de Ruezel. Se isso for bem-sucedido, poderemos abandonar o Cassandra e o BigFox para adotar o Couchbase e o N1ql na nova versão do http://thulya.com . Obrigado.
thulyaportal -
De fato, isso é um erro! Vamos corrigir isso para a próxima versão beta em um futuro próximo. Aqui está o tíquete do Jira para controle: http://www.couchbase.com/issue…
Sim, ele será lançado sob a licença Apache 2.0 em breve e agradeceremos todas as contribuições da comunidade. É muito legal saber que você está trabalhando em um wrapper Linq para o N1QL! Também estamos planejando criar um provedor Linq para o N1Ql, que será outra camada sobre o cliente.
\"Snapshot based Change Tracking suppor\", então mais como um ORM? Essa é uma ideia legal.
Obrigado,
Jeff
[...] Suporte a consultas ad-hoc para consultas N1QL. O que é N1QL, você pode se perguntar? É a nova linguagem para consulta de documentos JSON no Couchbase! [...]
[...] Blog do .NET SDK 2.0 Developer Preview 1 [...]
[...] DP1: http://www.couchbase.com/couchbase-net-sdk-20-developer-preview-1 […]
A versão [...] inclui todos os recursos adicionados nos Developer Previews 1, 2 e 3 e nas versões beta 1 e [...]