Introducción

Couchbase Server 4.5 acaba de ser lanzado, ¡así que vamos a probarlo! Una visión completa de todas las nuevas características se puede encontrar aquí. En este artículo se destaca la nueva función API de subdocumentos. ¿Qué es un subdocumento? El siguiente documento contiene un subdocumento accesible a través del campo "etiquetas":

Hasta ahora

Con versiones anteriores de Couchbase (<4.5) la actualización de un documento tenía que seguir el siguiente patrón:

  • Obtener todo el documento que debe actualizarse
  • Actualizar los documentos en el lado del cliente (por ejemplo, actualizando sólo algunas propiedades).
  • Volver a escribir todo el documento

Un ejemplo sencillo de código Java sería

Ahora con 4,5

El nuevo sub-documento API es una característica del lado del servidor que le permite (sorpresa, sorpresa ...) sólo obtener o modificar un sub-documento de un documento existente en Couchbase. Las ventajas son:

  •  Mayor facilidad de uso para el cliente
    • Las operaciones CRUD pueden realizarse basándose en rutas
    • En los casos en que la modificación no dependa del valor anterior, puede actualizar un documento sin necesidad de recuperarlo previamente.
    • Puede mantener más fácilmente las referencias clave entre documentos
  •  Mejora del rendimiento
    • Ahorra ancho de banda y mejora la latencia, ya que no es necesario transferir todo el documento por cable.

La API de subdocumentos también permite obtener o modificar valores internos o matrices de un (sub)documento.

  • Operaciones de búsqueda: Consulta el documento para una ruta específica, por ejemplo GET, EXISTS
  • Operaciones de mutación: Modificar una o varias rutas de un documento, por ejemplo UPSERT, ARRAY_APPEND, COUNTER

Puede encontrar una descripción más detallada de la API en la documentación de Couchbase: http://developer.couchbase.com/documentation/server/4.5/sdk/subdocument-operations.html.

La actualización de un documento puede seguir ahora el siguiente patrón:

  • Actualizar directamente una propiedad o un subdocumento especificando la ruta en la que se encuentra

Nuestro ejemplo Java se simplificaría ahora a:

Optimista "bloqueo"

Couchbase Server no tiene un gestor de transacciones incorporado, pero si hablamos de comportamiento transaccional, los requisitos son a menudo menores de lo que un gestor de transacciones ACID proporcionaría (por ejemplo, manejar sólo el acceso concurrente en lugar de ser totalmente compatible con ACID). En Couchbase un documento tiene un valor llamado C(ompare) A(nd) S(wap). Este valor cambia tan pronto como un documento es modificado en el lado del servidor.

  • Obtener un documento con un valor CAS específico
  • Cambiar las propiedades en el lado del cliente
  • Intente reemplazar el documento pasando el valor CAS antiguo. Si el valor CAS ha cambiado en el servidor, sabrá que alguien ha modificado el documento y podrá volver a intentar aplicar los cambios.

Así que CAS se utiliza para un enfoque de bloqueo optimista. Es optimista porque esperas poder aplicar tus cambios y manejas el caso de que esto no fuera posible porque alguien más lo cambió antes. Un enfoque pesimista sería bloquear el documento por adelantado y que nadie más pueda escribirlo hasta que este bloqueo se libere de nuevo.

Ahora podría plantearse la siguiente pregunta:

  • ¿Qué ocurre si modifico un subdocumento y otra persona actualiza el mismo u otro subdocumento del mismo documento?

Las operaciones con subdocumentos son atómicas. Atomicidad significa todo o nada. Por lo tanto, si actualiza un subdocumento sin obtener un mensaje de error, puede estar seguro de que la actualización se ha realizado en el servidor. Esto significa que si 5 clientes están añadiendo un elemento a un array incrustado, entonces puedes estar seguro de que los 5 valores fueron añadidos. Sin embargo, la atomicidad no significa consistencia con respecto al estado. Así que no te dice nada sobre conflictos. Así, si dos clientes actualizan el mismo subdocumento, ambas actualizaciones se llevarán a cabo, pero para averiguar si existe un conflicto con respecto a estas actualizaciones, aún se necesitará el valor CAS (o utilizar el método cierre pesimista en su lugar). Sin embargo, si está seguro de que los clientes actúan sobre distintos subdocumentos, sabrá que no habrá conflicto y entonces el valor CAS no será necesario.

Resumen

La nueva API Sub-Document es una de las nuevas grandes características de Couchbase 4.5. Te permite evitar tener que buscar todo el documento para leer/modificar sólo una parte de él. Esto significa una mejor usabilidad desde el punto de vista del cliente. Una de las principales ventajas es que mejora el rendimiento, especialmente si se trabaja con documentos más grandes.

Autor

Publicado por David Maier, Ingeniero Principal de Soluciones, Couchbase

David Maier es Ingeniero Principal de Soluciones en Couchbase. David es la persona de contacto técnico principal para la región DACH para temas relacionados con Couchbase, preventa, análisis de requisitos, revisiones de arquitectura, presentaciones a clientes, PoC-s, desarrollo de aplicaciones de demostración, etc.

1 Comentarios

  1. Gracias por el artículo. Soy nuevo en couchbase, así que disculpe mi uso de la terminología.

    El artículo dice "subdocumento", pero los ejemplos muestran la actualización de atributos (y no del subdocumento). ¿Significa esto que, aunque exista un documento simple con algunos atributos (pares KV), uno de esos atributos puede actualizarse utilizando esta API de subdocumento?

    Gracias

Dejar una respuesta