La adición del subdocumento API a Couchbase 4.5 ha allanado el camino para un soporte eficiente de estructuras de datos en Couchbase.

En esta entrada de blog, voy a mostrar una demostración de tres tipos de estructuras de datos que puedes utilizar con el SDK .NET de Couchbase:

  • List - una lista de objetos, básicamente una lista respaldada por Couchbase
  • Queue - una cola de objetos, básicamente una cola respaldada por Couchbase
  • Dictionary - un diccionario de objetos, básicamente un Dictionary respaldado por Couchbase

También hablaré un poco de cómo funciona entre bastidores.

Si quieres, puedes seguir el juego en casa. El código fuente de este blog es disponible en GitHuby La descarga de Couchbase Server es gratuita (actualmente hay versiones preliminares para desarrolladores de la versión 5 disponibles mensualmente).

Lista

Una Lista es una estructura de datos .NET que se guarda en memoria. Con las estructuras de datos proporcionadas por el SDK .NET de Couchbase, puedes almacenarla en un documento de Couchbase.

Para crear una lista respaldada por Couchbase:

La cadena "miLista" corresponde a la clave del documento que contendrá la lista. Cuando utilice CouchbaseListse creará un único documento con esa clave (si no existe ya). Si ya existe un documento con esa clave, CouchbaseList lo utilizará.

Ahora puede añadir/eliminar elementos de la lista y todo se guardará en el documento. También puede realizar otras operaciones como obtener un recuento de los elementos de la lista.

El código anterior daría como resultado un documento con una clave "miLista" con el siguiente aspecto. Note que el ítem con num de 5 no está listado, porque fue removido.

Hay algo sutil en el ejemplo anterior que conviene señalar. Fíjese en que he utilizado var item = lista[5]; y luego item.foo y item.num en el WriteLine. Si utilizara lista[5].foo y lista[5].num directamente, eso resultaría en dos llamadas diferentes de subdocumento a Couchbase. Esto no sólo es menos que una eficiencia óptima, sino que es posible que los valores cambien entre las dos llamadas.

Cola

Muy similar a List, puedes crear una cola respaldada por Couchbase:

Una cola se almacena igual que una lista. La diferencia es que el orden es significativo, y esto se refleja en las operaciones que se realizan en una cola: Encolar y Descolarizar.

El código anterior daría como resultado un documento con una clave "myQueue" (ver JSON más abajo). Observe que no hay ningún objeto en la matriz con el número "0" porque se ha retirado de la cola.

Diccionario

Espero que ahora veas un patrón. Para crear un diccionario:

De nuevo, se creará un documento con la clave dada. Las operaciones que se pueden realizar incluyen Añadir, Eliminar, y el indexador [] operación.

Un documento de diccionario tiene este aspecto:

Una nota sobre la dinámica C#: he utilizado dinámico para que los ejemplos de código sean breves y sencillos. En tu aplicación, probablemente sea mejor que utilices un tipo C# real definido. Todo se serializa a JSON en Couchbase, por supuesto.

Entre bastidores

Antes de que se lanzara la API de subdocumentos en Couchbase Server 4.5, estas estructuras de datos eran posiblePor supuesto. El problema era que se cargaba todo el documento, se ponía en una lista, se hacían cambios en la lista y luego se guardaba todo el documento. Si tienes grandes estructuras de datos, pero sólo estás leyendo o haciendo cambios en un solo elemento, esto a menudo resulta en una pérdida de tiempo y ancho de banda y, posiblemente, un aumento de la contención.

El subdocumento-API (que puede utilizar directamente; lo cubrí en la sección API de subdocumentos en Couchbase Server 4.5 con el SDK .NET (revisado) blog post) se utiliza entre bastidores en CouchbaseList, CouchbaseQueuey CouchbaseDictionary. Así, cuando se añade un elemento a un CouchbaseListpor ejemplo, sólo se envía por cable ese elemento, no toda la lista.

Algunas operaciones necesitarán obtener el documento completo. Por ejemplo, iterar a través de una colección utilizando una función foreach recuperará el documento completo. Al eliminar un elemento de la lista, se escaneará el documento completo. Pero si en el futuro surgen operaciones con subdocumentos que admitan esas acciones, las implementaciones del SDK se actualizarán en consecuencia.

Resumen

Estas estructuras de datos son otra herramienta para ayudarle a gestionar sus datos. Dado que utilizan la API de subdocumentos, suelen ser más eficaces que un enfoque basado en documentos completos. Para obtener más información, consulte la página Documentación sobre estructuras de datos.

¿Tiene preguntas? ¿Algún comentario? ¿Necesita ayuda? Visite nuestros forosenvíame un mensaje a Twitter @mgroveso deja un comentario.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

2 Comentarios

  1. [...] muchos más bonitos ejemplos de Estructuras de Datos Couchbase .NET en el blog de Matthew Grove [...]

  2. [...] En febrero, escribí un blog sobre el uso de estructuras de datos con .NET (y .NET Core): Lista, Cola y Diccionario. [...]

Dejar una respuesta