Couchbase .NET SDK 2.0 Developer Preview 1

Por fin presentamos la Developer Preview 1 (DP1) oficial del SDK .NET 2.0 de Couchbase. Anteriormente publicado sobre algunas de las motivaciones detrás de la reescritura del SDK .NET de Couchbase y también algunos de los objetivos y características que deberías esperar encontrar en él. Este DP1 representa el subconjunto mínimo de características y debería darte una idea de la dirección que estamos tomando la API desde la perspectiva de un desarrollador. En este post, te mostraré cómo poner en marcha una vista previa del nuevo cliente y mostrar algunas de estas características.

Advertencia: ¡No utilice el DP1 en producción!

A menos, claro, que te guste correr con tijeras y pasarte noches en vela depurando problemas de producción.

En serio amigos, esto debería considerarse un prelanzamiento muy temprano y de aquí a la AG final se esperan muchos cambios internos y externos. Dicho esto, es probable que las interfaces públicas no cambien demasiado, salvo que se añadan métodos y funciones adicionales.

Requisitos previos

Para empezar a trabajar con la DP1 se necesitan un par de requisitos previos:

Vale, ¿lo tienes todo instalado? Genial, ¡escribamos algo de código*!

*Si desea seguir el tutorial, inicie VS2013 y cree una aplicación de consola llamada Couchbase.NetDP1 y añada referencias a los binarios del punto anterior. La solución/proyecto final también está disponible aquí.

Objeto de clúster

El objeto Cluster representa el lado del cliente de un Cluster del Servidor Couchbase y proporciona interfaces para interactuar con los Buckets de Couchbase y las API's de Gestión. Internamente gestiona la conectividad entre el cliente y el servidor y asegura que los recursos son asignados y desasignados correctamente.

La clase Cluster es un GOF Singleton con comportamiento lazy-loaded; es que una única instancia debe ser utilizada a través de todos los hilos dentro de un proceso. Este es un gran cambio con respecto al cliente 1.X anterior que, aunque no era un singleton, por razones de rendimiento, necesitaba ser tratado como un singleton.

dp1-cluster-1

Para poder utilizar el objeto Cluster, primero hay que inicializarlo. Por defecto, la configuración está establecida para utilizar localhost (127.0.0.1) y crear un pool de conexiones con un MaxSize de 2 y un MinSize de 1 conexión TCP por objeto Cluster. Puede anular estos valores predeterminados creando su propio objeto ClientConfiguration y pasándolo al método Cluster.Initialize(...) antes de llamar a Cluster.Get().

dp1-cluster-2

La clase ClientConfiguration también le permite anular la configuración a nivel de Bucket, lo que le permite crear una configuración independiente para cada Bucket que desee utilizar.

El objeto CouchbaseBucket

Además del objeto Cluster, otra clase importante es la clase CouchbaseBucket, que proporciona una API para consultar Views, realizar consultas N1QL y hacer operaciones CRUD generales sobre claves. También realiza cualquier serialización/deserialización necesaria de Tipos y gestiona el hash de claves a través del cluster para un conjunto de claves. La clase CouchbaseBucket, implementa la interfaz IBucket y tiene un primo para trabajar con Memcached Buckets en memoria: MemachedBucket. Ambas son soportadas en esta DP.

Para usar la clase CouchbaseBucket, necesitas un objeto Cluster inicializado (ver arriba) y también necesitas que el Bucket ya exista dentro de la instancia de Couchbase Server o cluster. Aquí tienes un ejemplo de cómo abrir el Bucket "por defecto" que viene con cada instalación de Couchbase:

 dp1-cluster-3

Una vez que tenga una instancia de Bucket, puede empezar a realizar operaciones CRUD sobre los documentos y el Bucket. Tenga en cuenta que en DP1 sólo se pueden insertar y leer documentos. He aquí un ejemplo del nuevo método Insert:

dp1-cluster-4

Y he aquí un ejemplo de uso de Get(key) para recuperar los documentos insertados en el bucket por defecto utilizando el código anterior:

dp1-cluster-5

Una vez que haya terminado de utilizar un Cubo, simplemente suelte de nuevo al objeto Cluster:

dp1-cluster-8

El propio objeto Cluster implementa IDisposable, por lo que cuando el proceso que lo está utilizando finaliza, el método Dispose debe ser llamado. Si no se llama explícitamente, el GC invocará al finalizador en algún momento posterior, llamando implícitamente a Dispose y limpiando los recursos internos.

El objeto IOperationResult

La mayoría de los métodos devuelven un objeto IOperationResult que proporciona información adicional sobre los resultados de la operación. Lo más notable es que tiene las siguientes propiedades:

  • Valor - el objeto o valor que se inserta o devuelve desde Couchbase - este es el Tipo T
  • Éxito - un valor booleano que indica si la operación ha tenido éxito o no
  • Mensaje - un valor de cadena con información adicional sobre por qué falló la operación (si falló), de lo contrario está vacío.
  • ResponseStatus - el valor devuelto por el servidor que indica el estado de la operación.
  • Cas - un unsigned long que es el valor "Check and Set" para la operación. Esto se utiliza como un medio de concurrencia optimista.

Un patrón bastante típico es comprobar la propiedad Éxito y alterar el flujo del programa en consecuencia si se detecta un error.

Soporte N1QL

Esta vista previa para desarrolladores también proporciona soporte básico para consultas N1QL ad-hoc. Si no sabes lo que es N1QL, es un lenguaje similar a SQL para consultar documentos en Couchbase Buckets. Aquí tienes un ejemplo:

dp1-cluster-6

Por favor, ten en cuenta que debes tener la Developer Preview 3 para N1QL instalada y funcionando para que esto funcione. Puedes conseguirla aquí: http://www.couchbase.com/communities/n1ql

Ver soporte

La consulta de vistas también está soportada en la vista previa para desarrolladores 1. Asumiendo que tienes beer-sample instalado (puedes instalarlo desde la Consola de Administración del Servidor Couchbase bajo las pestañas Settings->Samples), la siguiente consulta debería funcionar:

dp1-cluster-7

El método CreateQuery crea una interfaz IViewQuery, que permite generar una URI REST de Couchbase View. Es una "estilo fluido" de modo que pueda encadenar una serie de llamadas para crear la consulta adecuada a su caso de uso.

Siguiente

Esperamos tener al menos una vista previa más para desarrolladores antes de lanzar la versión beta, y la versión de prueba se espera para mediados o finales del verano de 2014 (no hay fecha fijada, así que esto puede cambiar). Desde una perspectiva de cara al público, es probable que las interfaces públicas que se discuten aquí cambien un poco, principalmente para hacerlas más consistentes y fáciles de usar. Dicho esto, están bastante listas, a la espera de los comentarios de la comunidad de desarrolladores (¡os escuchamos!).

Lo que probablemente verá en la próxima vista previa para desarrolladores es soporte para todas o la mayoría de las operaciones CRUD de Couchbase (Incrementar/Decrementar, observar, etc) y soporte para TAP (await/async) Después se hará más hincapié en el rendimiento y la estabilidad interna. Más adelante, verá LINQ apoyo a N1QL consultas y soporte SSL

Necesitamos su opinión

Sí, ¡tú! Adelante, juega con los bits y dinos lo que piensas. Si encuentras un error o tienes una petición de funcionalidad, puedes crear un ticket Jira aquí: http://www.couchbase.com/issues/browse/NCBC

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Jeff Morris, Ingeniero Superior de Software, Couchbase

Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pasó seis años en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de cómo integrarse con N1QL (lenguaje de consulta).

6 Comentarios

  1. He intentado utilizar este DP1. Se lanza \ "JSON entero 15456010240 es demasiado grande o pequeño para un Int32. Ruta \'[0].quota.ram\', línea 1, posición 12344\" en la línea cluster.OpenBucket(bucketName); ¿No debería ser Int64 variable para mantener el tamaño de la RAM?

    ¿Es de código abierto? Sería genial tener acceso para que podamos contribuir también. Además de esto, estoy tratando de construir LINQ envoltura para las consultas N1QL con Snapshot basado en el seguimiento de cambios de apoyo y los resultados JSON. Nuestra implementación se basa en CqlSharp de Ruezel\. Si esto sale adelante, entonces podríamos abandonar Cassandra y BigFox para adoptar Couchbase y N1ql en la nueva versión de http://thulya.com . Gracias.

    1. thulyaportal -

      Efectivamente, es un error. Lo arreglaremos para la próxima versión beta en un futuro próximo. Aquí está el ticket de jira para el seguimiento: http://www.couchbase.com/issue

      Sí, esto será liberado bajo licencia Apache 2.0 en breve y agradeceremos cualquier contribución de la comunidad. ¡Es muy bueno saber que estás trabajando en una envoltura Linq para N1QL! También estamos planeando hacer un proveedor Linq para N1Ql, que será otra capa sobre el cliente.

      \¿"Snapshot based Change Tracking suppor\", así que más como un ORM? Es una idea genial.

      Gracias,

      Jeff

  2. [...] Soporte de consultas ad-hoc para consultas N1QL. ¿Qué es N1QL? Es el nuevo lenguaje para consultar documentos JSON en Couchbase. [...]

  3. [...] incluye todas las funciones añadidas en las versiones preliminares para desarrolladores 1, 2 y 3 y en las versiones beta 1 y [...].

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.