Hoy lanzamos la versión 2.0.1 del SDK .NET 2.0 de Couchbase. Se trata de una versión posterior a la versión GA 2.0.0 de principios de diciembre del año pasado e incluye principalmente correcciones de errores y mejoras de rendimiento basadas en la versión 2.0.0.
¿Qué contiene esta versión?
Una vez más, se trata en gran medida de una corrección de errores y mejora del rendimiento. El mayor cambio está en la capa de transporte o IO, que ha sido reescrita para utilizar SocketAsyncEventArgs en lugar de la antigua API de Socket asíncrono basada en el APM (Begin/End), que requiere la creación de un objeto IAsyncResult para cada operación asíncrona, lo que resulta en una recolección de basura más frecuente. Cada instancia de SocketAsyncEventArgs es agrupada y reutilizada, eliminando muchos de los problemas con las GCs. Además, se utiliza un único búfer fijo contiguo para todas las instancias de SocketAsyncEventArgs y dura todo el tiempo de vida del cliente. Se esperan mejoras adicionales en versiones posteriores.
Otra mejora que se introdujo fue la adición de métodos masivos para eliminar un conjunto de claves en paralelo, por ejemplo:
using (var cluster = new Cluster(config))
{
using (var bucket = cluster.OpenBucket())
{
var multiUpsert = bucket.Upsert(items);
Assert.AreEqual(items.Count, multiUpsert.Count);
foreach (var pair in multiUpsert)
{
Assert.IsTrue(par.Valor.Éxito);
}
var multiRemove = bucket.Remove(multiUpsert.Keys.ToList());
foreach (var pair in multiRemove)
{
Assert.IsTrue(par.Valor.Éxito);
}
var multiGet = bucket.Get(multiUpsert.Keys.ToList());
foreach (var pair in multiGet)
{
Assert.IsFalse(par.Valor.Éxito);
}
}
}
En el código anterior, primero estamos añadiendo un conjunto de claves utilizando el método bulk Upsert, luego estamos utilizando la nueva sobrecarga Remove que toma una lista de claves para eliminar los documentos o valores asociados a ellas del Bucket de Couchbase, finalmente estamos comprobando si existen. Un poco artificioso, pero puedes imaginar cómo se podría utilizar esto en un escenario del mundo real.
Además de los cambios en la capa IO, en esta versión se incluyen las siguientes correcciones de errores importantes:
- NCBC-777: Observe devuelve ObserveResponse.DurabilitySatisfied cuando CAS ha cambiado.
- NCBC-748: Asegúrese de que PoolConfiguration se utiliza desde App.Config
- NCBC-750: Garantizar que los cambios en el servidor se propagan a BucketConfig
- NCBC-540: Garantizar TTL seguir las reglas cuando un TimeSpan
- NCBC-625: Eliminar el uso de romper la compilación mono
Las notas de publicación completas pueden consultarse aquí.
Contribuciones
Hubo varias contribuciones de la comunidad en forma de Pull Requests de GitHub, rellenando tickets de Jira, y a través de discusiones en nuestros foros. Nos gustaría dar las gracias a todos los que han contribuido de alguna manera a esta versión, aunque no haya sido directamente a través del código.
¿Cómo lo consigo?
Los paquetes están disponibles en NuGet, S3, o puedes extraer el código fuente directamente de master usando la etiqueta "2.0.1":