Hoje estamos lançando a versão 2.0.1 do Couchbase .NET SDK 2.0. Esta é uma versão de acompanhamento da versão 2.0.0 do GA no início de dezembro do ano passado e inclui, em grande parte, correções de bugs e melhorias de desempenho com base na versão 2.0.0.
O que há nesta versão?
Mais uma vez, esta é, em grande parte, uma versão para correção de bugs e melhoria de desempenho. A maior mudança está na camada de transporte ou de E/S, que foi reescrita para usar SocketAsyncEventArgs em vez da API de soquete assíncrona mais antiga, baseada na APM (Begin/End), que exige a criação de um objeto IAsyncResult para cada operação assíncrona, resultando em uma coleta de lixo mais frequente. Cada instância de SocketAsyncEventArgs é agrupada e reutilizada, eliminando grande parte dos problemas com GCs. Além disso, um único buffer fixo contíguo é usado entre todas as instâncias de SocketAsyncEventArgs e dura o tempo de vida do cliente. Aguarde melhorias adicionais em versões posteriores.
Outra melhoria feita foi a adição de métodos em massa para remover um conjunto de chaves em paralelo, por exemplo:
usando (var cluster = new Cluster(config))
{
usando (var bucket = cluster.OpenBucket())
{
var multiUpsert = bucket.Upsert(items);
Assert.AreEqual(items.Count, multiUpsert.Count);
foreach (var pair in multiUpsert)
{
Assert.IsTrue(pair.Value.Success);
}
var multiRemove = bucket.Remove(multiUpsert.Keys.ToList());
foreach (var pair in multiRemove)
{
Assert.IsTrue(pair.Value.Success);
}
var multiGet = bucket.Get(multiUpsert.Keys.ToList());
foreach (var pair in multiGet)
{
Assert.IsFalse(pair.Value.Success);
}
}
}
No código acima, primeiro adicionamos um conjunto de chaves usando o método Upsert em massa, depois usamos a nova sobrecarga Remove, que recebe uma lista de chaves para remover os documentos ou valores associados a eles do Bucket do Couchbase e, por fim, verificamos se eles existem. Um pouco artificial, mas você pode imaginar como isso poderia ser usado em um cenário do mundo real.
Além das alterações na camada de E/S, as seguintes correções de bugs importantes estão incluídas nesta versão:
- NCBC-777: Observe retorna ObserveResponse.DurabilitySatisfied quando o CAS foi alterado
- NCBC-748: Garantir que PoolConfiguration seja usado em App.Config
- NCBC-750: Garantir que as alterações no servidor sejam propagadas para o BucketConfig
- NCBC-540: Garantir TTL seguem regras quando um TimeSpan
- NCBC-625: Remover o uso de quebra de compilação mono
As notas de versão completas podem ser encontradas aqui.
Contribuições
Houve várias contribuições da comunidade na forma de Pull Requests do GitHub, preenchendo tíquetes do Jira e por meio de discussões em nossos fóruns. Gostaríamos de agradecer a todos que contribuíram de alguma forma para esta versão, mesmo que não tenha sido diretamente por meio de código; feedback e comentários são sempre bem-vindos.
Como faço para obtê-lo?
Os pacotes estão disponíveis no NuGet, S3 ou você pode obter a fonte diretamente do mestre usando a tag "2.0.1":