Hoje estamos lançando o novo Couchbase .NET SDK para disponibilidade geral! Trata-se de uma reescrita completa do SDK e baseia-se na especificação do Couchbase SDK 2.0, o que significa que ele mantém uma interface consistente com todos os outros SDKs do Couchbase 2.0 e compartilha transcodificação e sinalizadores comuns para interagir com os outros SDKs. Por exemplo, os SDKs .NET e Java podem trabalhar com os mesmos dados no mesmo bucket sem causar problemas de transcodificação.

O que há nesta versão?

Esta versão inclui todos os recursos adicionados no Developer Previews 1, 2 e 3 e do Beta 1 e 2:

Além de tudo isso, ele adiciona os seguintes recursos:

  • Suporte à leitura de réplicas
  • Suporte para GetL, Unlock e GetWithLock
  • Sobrecargas para Prepend/Append que aceitam matrizes de bytes
  • Aprimoramentos na API de visualização que facilitam a serialização de e para POCOs

O mais importante é que ele inclui uma longa lista de correções de bugs e melhorias destinadas a estabilizar o núcleo e prepará-lo para o uso em produção.

Leituras de réplicas

As leituras de réplicas permitem leituras em uma ou mais réplicas se o seu bucket estiver configurado para suportar réplicas. Isso é útil para cenários em que o cluster está em um estado insalubre - por exemplo, um nó está inoperante e ainda não passou por uma falha.

usando (var cluster = novo Aglomerado(configuração))
{
usando (var bucket = agrupamento.OpenBucket())
{
const string chave = "ReplicaKey";

var result = balde.GetFromReplica<string>(chave);
Afirmar.IsTrue(resultado.Sucesso);
}
}

No código acima, estamos simplesmente substituindo o método usual Get(key), que recupera a chave diretamente do primário, pelo método GetFromReplica(key), que tentará recuperar a chave de uma ou mais réplicas. Observe que o Couchbase Server suporta até três réplicas e o número de nós em seu cluster deve corresponder ao número de réplicas (ou cópias) que você deseja armazenar.

GetL, Unlock e GetWithLock

GetL é o comando do memcached para bloquear uma chave para uso exclusivo. Por padrão, o servidor bloqueará uma chave por 15 segundos e até um máximo de 30 segundos. No SDK, fornecemos um método chamado GetWithLock que encapsula esse comportamento. O método UnLock permite a remoção explícita de um bloqueio em uma chave, antes que a expiração expire ou quando o servidor desbloqueia a chave depois que a expiração máxima de 30 segundos é atingida.

usando (var bucket = _cluster.OpenBucket())
{
var chave = "When_Key_Is_Locked_Mutate_Succeeds_If_Unlocked";
Afirmar.IsTrue(balde.Upsert(chave, "{'name':'value'}").Sucesso);

var getl = balde.GetWithLock<string>(chave, 15);
Afirmar.IsTrue(getl.Sucesso); //terá sucesso

var unlock = balde.Desbloqueio(chave, getl.Cas);
Afirmar.IsTrue(desbloqueio.Sucesso);

var upsert = balde.Upsert(chave, "{'name':'value2′}");
Afirmar.IsTrue(upsert.Sucesso);
}

No exemplo acima, inserimos ou atualizamos uma chave usando o método Upsert e, em seguida, bloqueamos a chave por 15 segundos, antes de desbloqueá-la e, finalmente, executar outra mutação nela. Se não tivéssemos usado o método Unlock, o método Upsert final teria falhado com o status "KeyExists".

Ver melhorias

A API de visualização foi aprimorada para facilitar o uso de POCO (plain ole' csharp objects) como destino de uma solicitação de visualização.

usando (var bucket = _cluster.OpenBucket("amostra de cerveja"))
{
var query = balde.Criar Consulta("cerveja", "all_beers").Limite(10);
var result = balde.Consulta<Cerveja>(consulta);

antes de (var cerveja em resultado.Valores)
{
Console.WriteLine("{0} tem {1} abv.", cerveja.Nome, cerveja.Abv);
}
}

E a saída:
——————–
21A IPA tem 7.2 abv.
563 Stout tem 5 abv.
Emenda A Pale Ale tem 5.2 abv.
Amargo A American tem 3.6 abv.
Duplo O Trouble IPA tem 9.8 abv.
Geral Pippo's Porter tem 5,5 abv.
A North Star Red tem 5,8 abv.
A Oyster Point Oyster Stout tem 5,9 abv.
A Potrero ESB tem 5,2 abv.
A South Park Blonde tem 5 abv.

A grande diferença é que os resultados da exibição, a parte do valor, serão serializados em uma lista com o valor que hidrata o POCO. Observe que os campos id e key são ignorados nessa lista, mas ainda há uma propriedade Rows disponível que permite que você obtenha essas informações.

O que mudou?

Embora tenhamos tentado evitar a quebra de qualquer interface já publicada na versão beta anterior, há algumas alterações que foram feitas porque contribuem para uma API final melhor:

  • A interface e as implementações do IDocumentResult foram alteradas: a propriedade Value foi renomeada para Content. Isso foi feito para torná-lo mais consistente com o Java SDK. Observe que o valor de retorno dos métodos que não são de documento continua sendo Value.
  • A interface do ICluster foi tornada pública (de interna) para facilitar a simulação e o teste

O que não está incluído nesta versão?

O principal recurso que falta é o suporte a operações assíncronas usando as palavras-chave TAP (Task Asynchrony Pattern) async e await. Esse recurso está em andamento, mas simplesmente não está pronto para o horário nobre. Espere algo ainda este ano ou no início do próximo.

Como obtê-lo?

Como em todas as versões, o GA está disponível no NuGet como um pacote, como um download direto dos binários do S3, e o código-fonte, como sempre, está disponível no GitHub:

  • Os binários são aqui.
  • O repositório é aqui.
  • Os pacotes NuGet são aqui.

Autor

Postado por Jeff Morris, engenheiro de software sênior, Couchbase

Jeff Morris é engenheiro de software sênior da Couchbase. Antes de ingressar na Couchbase, Jeff passou seis anos na Source Interlink como arquiteto da Web corporativa. Jeff é responsável pelo desenvolvimento dos SDKs do Couchbase e pela integração com o N1QL (linguagem de consulta).

Um comentário

Deixar uma resposta