Hoy lanzamos el nuevo SDK .NET de Couchbase para Disponibilidad General. Se trata de una reescritura completa del SDK y se basa en la especificación de Couchbase SDK 2.0, lo que significa que mantiene una interfaz coherente con todos los demás SDK 2.0 de Couchbase y comparte la transcodificación y los indicadores comunes para interactuar con los demás SDK. Por ejemplo, los SDK de .NET y Java pueden trabajar con los mismos datos dentro del mismo bucket sin causar problemas de transcodificación.
¿Qué contiene esta versión?
Esta versión incluye todas las funciones añadidas en las versiones preliminares para desarrolladores 1, 2 y 3 y Beta 1 y 2:
- Vistas asíncronas
- Vista previa de las consultas ad hoc N1QL
- Banderas comunes - Tipos de datos coherentes en todos los SDK
- Todos los nuevos API de documentos
- Métodos Bulk Insert y Get
- API de gestión totalmente nueva
- Compatibilidad con capas de sockets seguros (SSL/TLS)
- "Gestión optimizada de las conexiones"
- Autenticación CRAM-MD5
- Y otros...
Además de todo eso, añade las siguientes funciones:
- Soporte de lectura de réplicas
- Soporte para GetL, Unlock y GetWithLock
- Sobrecargas para Prepend/Append que aceptan matrices de bytes
- Mejoras en la API de visualización que facilitan la serialización hacia y desde POCO.
Y lo que es más importante, incluye una larga lista de correcciones de errores y mejoras destinadas a estabilizar el núcleo y prepararlo para su uso en producción.
Réplicas de lectura
Las Lecturas de Réplica permiten lecturas contra una o más réplicas si su cubo está configurado para soportar réplicas. Esto resulta útil en situaciones en las que el clúster se encuentra en un estado poco saludable, por ejemplo, cuando un nodo está caído y aún no se ha producido la conmutación por error.
utilizando (var grupo = nuevo Grupo(config))
{
utilizando (var cubo = grupo.OpenBucket())
{
const cadena clave = "ReplicaKey";
var resultado = cubo.GetFromReplica<cadena>(clave);
Afirme.IsTrue(resultado.Éxito);
}
}
En el código anterior, simplemente estamos reemplazando el método habitual Get(key), que recupera la clave directamente del primario, por el método GetFromReplica(key), que intentará recuperar la clave de una o más réplicas. Ten en cuenta que Couchbase Server soporta hasta tres réplicas y el número de nodos en tu cluster debe coincidir con el número de réplicas (o copias) que deseas almacenar.
GetL, Unlock y GetWithLock
GetL es el comando de memcached para bloquear una clave para uso exclusivo. Por defecto, el servidor bloqueará una clave durante 15 segundos y hasta un máximo de 30 segundos. En el SDK, proporcionamos un método llamado GetWithLock que encapsula este comportamiento. El método UnLock permite eliminar explícitamente el bloqueo de una clave, antes de que expire o cuando el servidor desbloquea la clave una vez que se ha alcanzado la expiración máxima de los 30 segundos.
utilizando (var cubo = _cluster.OpenBucket())
{
var clave = "Cuando_la_clave_está_bloqueada_Mutar_Sucede_Si_se_desbloquea";
Afirme.IsTrue(cubo.Upsert(llave, "{'nombre':'valor'}").Éxito);
var getl = cubo.GetWithLock<cadena>(llave, 15);
Afirme.IsTrue(getl.Éxito); //tendrá éxito
var desbloquear = cubo.Desbloquear(clave, getl.Cas);
Afirme.IsTrue(desbloquear.Éxito);
var upsert = cubo.Upsert(llave, "{'nombre':'valor2′}");
Afirme.IsTrue(upsert.Éxito);
}
En el ejemplo anterior, insertamos o actualizamos una clave utilizando el método Upsert, luego bloqueamos la clave durante 15 segundos, antes de desbloquearla y finalmente realizar otra mutación sobre ella. Si no hubiéramos utilizado el método Unlock, el método Upsert final habría fallado con un estado "KeyExists".
Ver mejoras
Se ha mejorado la API de vistas para facilitar el uso de objetos POCO (plain ole' csharp objects) como destino de una solicitud de vista.
utilizando (var cubo = _cluster.OpenBucket("muestra de cerveza"))
{
var consulta = cubo.CrearQuery("cerveza", "todas_las_cervezas").Límite(10);
var resultado = cubo.Consulta<Cerveza>(consulta);
foreach (var cerveza en resultado.Valores)
{
Consola.WriteLine("{0} tiene {1} abv."cerveza.Nombrecerveza.Abv);
}
}
Y la salida:
——————–
21A IPA tiene 7.2 abv.
563 Stout tiene 5 abv.
Enmienda Pale Ale tiene 5.2 abv.
Amargo American ha 3.6 abv.
Doble Problemas IPA tiene 9.8 abv.
General PippoPorter tiene 5,5 abv.
North Star Red tiene 5,8 abv.
La Oyster Point Oyster Stout tiene 5,9 abv.
Potrero ESB tiene 5,2 abv.
South Park Blonde tiene 5 de alcohol.
La gran diferencia es que los resultados de la vista, la parte del valor, se serializará en una lista con el valor hidratando el POCO. Tenga en cuenta que el campo id y la clave se ignoran en esta lista, sin embargo, todavía hay una propiedad Rows disponible que le permite obtener esta información.
¿Qué ha cambiado?
Aunque hemos intentado no romper ninguna de las interfaces ya publicadas en la versión beta anterior, hay un par de cambios que se han realizado porque mejoran la API final:
- La interfaz y las implementaciones de IDocumentResult han cambiado: la propiedad Value ha pasado a llamarse Content. Esto se ha hecho para que sea más coherente con el SDK de Java. Tenga en cuenta que el valor de retorno de los métodos que no son documentos sigue siendo Value.
- La interfaz ICluster se ha hecho pública (de interna) para que sea más fácil simularla y probarla.
¿Qué no incluye esta versión?
La principal característica que falta es el soporte para operaciones asíncronas utilizando las palabras clave async y await del TAP (Task Asynchrony Pattern). Esta característica está en progreso, pero simplemente no está lista para el prime time. Espere algo a finales de este año o principios del próximo.
¿Cómo conseguirlo?
Como todas las versiones, el GA está disponible desde NuGet como paquete, como descarga directa de los binarios desde S3, y el código fuente, como siempre, está disponible en GitHub:
¡Bien!