Consistencia de consultas NOSQL de alto rendimiento con Couchbase 4.5

Consistencia de alto rendimiento

Cuando se utiliza Couchbase como sistema de registro, proporcionamos la mejor experiencia de indexación de su clase utilizando nuestro índices secundarios globales y aislamiento de la carga de trabajo mediante nodos de indexación dedicados. Hemos mejorado aún más esa experiencia en Couchbase 4.5 con dos importantes novedades:

  • Índices secundarios exclusivos en memoria mediante un nuevo motor de almacenamiento memdb
  • Consistencia de alto rendimiento (código denominado "AT_PLUS") que le permite a usted, el desarrollador, un control más preciso del modelo de consistencia para escrituras y lecturas.

En este blog profundizaremos en lo que implica la coherencia de alto rendimiento y proporcionaremos algunos recursos para ayudarle a empezar.

Algunos antecedentes - Cómo funcionan los índices secundarios globales de consulta

Los índices secundarios globales en couchbase tienen las siguientes características:

  • Se limitan a un único nodo de índice y no se particionan automáticamente. Al principio esto puede parecer una limitación. En realidad, es una elección de diseño intencionada que hemos hecho para mantener el rendimiento en línea con lo que esperas de Couchbase.
  • Son definibles por el usuario mediante nuestra variante sql (N1QL) e increíblemente flexibles. Incluso podemos indexar matrices dentro de documentos json.
  • Existen dos motores de almacenamiento diferentes:
    • Forestdbnuestro motor de almacenamiento por defecto en couchbase. Por defecto los índices de forestdb se actualizan cíclicamente, cada 200ms.
    • Memdb, (Índices optimizados para memoria) son nuestra opción increíblemente rápida de índices secundarios sólo en memoria. Por defecto, los índices de memdb se actualizan cíclicamente, cada 20 ms.

Cuando emites una consulta N1QL, usando Couchbase 4.5 ahora tienes tres opciones para controlar la consistencia de tu consulta:

Por defecto

Por defecto, o "no limitadas", son las consultas en las que la proyección (conjunto de resultados) incluye cualquier dato que se encuentre, o al que se haga referencia, en el estado actual del índice. Esta es la experiencia de consulta más rápida. La coherencia no está vinculada a la consulta en modo alguno. Es ideal para la mayoría de los casos. Hay casos en los que se necesita una experiencia de consistencia más inmediata. Digamos que en el perfil de un usuario, actualizas el perfil con una compra reciente. Ahora, necesita consultar inmediatamente a ese mismo usuario para obtener una lista completa de compras. Si el indexador no ha indexado el cambio que ha realizado en el perfil de usuario, el conjunto de resultados de la consulta no incluirá esa compra reciente.

Solicitar más

Request plus son consultas en las que la proyección incluye todas las actualizaciones acotadas desde el momento en que se realizó la consulta. El indizador debe asegurarse de que el índice dentro de su proyección está delimitado para incluir todas las actualizaciones en todas las particiones del clúster en el momento en que se realizó la "solicitud" de consulta. Esto se ajusta a nuestro escenario anterior, en el que un perfil de usuario se actualiza para incluir una compra reciente y, a continuación, consulta inmediatamente ese documento para ver una lista coherente de los artículos comprados. Aunque este tipo de consulta es muy útil en determinadas situaciones, resulta caro exigir que el índice del clúster incluya todas las actualizaciones en el momento en que se emitió la consulta. Esto se explica mejor en el diagrama siguiente. Observe cómo el indexador debe asegurarse de que el índice está actualizado con todas las parciones en cada nodo del clúster:

Request Plus

Consistencia de alto rendimiento

La consistencia de alto rendimiento o "AT Plus" son consultas en las que la proyección incluye actualizaciones vinculadas a identificadores de secuencia de mutación específicos. Cada vez que se realiza una operación de mutación desde uno de nuestros SDK, se puede obtener una secuencia de id de mutación específica para esa mutación. Cuando llegue el momento de consultar esos mismos datos, estas secuencias de mutación pueden pasarse como parámetro al nodo de consulta. Aunque parezca complicado, en realidad no lo es: proporcionamos abstracciones muy fáciles de usar en forma de fichas de mutación que se encargan del trabajo pesado. Para que AT_PLUS funcione, los tokens de mutación deben estar habilitados en la instancia Bucket y los MutationTokens reales (que se encuentran en los documentos devueltos como resultado de las operaciones de mutación) se pasan al objeto N1QL Query. Para que el SDK incluya un MutationToken en el Documento devuelto después de una mutación, la característica debe ser negociada primero con el servidor. Está disponible desde Couchbase Server 4.0, y puede activarse en el CouchbaseEnvironment del SDK. En java, esto se ve así:

Una vez hecho esto, el Documento devuelto por cada operación de mutación clave/valor que realice contendrá también un MutationToken. Es importante tener en cuenta que el objeto Documento devuelto es diferente del que se pasa como argumento. Debe utilizar este valor de retorno para obtener la consistencia AT_PLUS, pasándolo al método consistentWith() del constructor N1qlParams. Los params pueden pasarse entonces al propio constructor N1qlQuery, como en este ejemplo java:

Esto es increíblemente eficiente. Puedes especificar al indexador las mutaciones exactas con las que quieres que tu índice sea consistente. Veamos la misma arquitectura del ejemplo "request plus". Si los documentos que buscamos estuvieran todos ubicados en particiones del nodo 1 utilizando "at plus", el panorama sería muy distinto:

En nuestras pruebas de rendimiento internas, el uso de "at plus" puede suponer una mejora de 10 veces o más en la latencia media, así como una reducción drástica del uso de cpu/memoria en todo el clúster.

Próximos pasos

Una gran manera de experimentar esta característica, junto con varias otras nuevas características es probar Couchbase 4.5 por ti mismo. Se puede descargar gratuitamente desde nuestra página web página de descargas. En el artículo de Don Pinto "Whats New in Couchbase 4.5" ("Novedades de Couchbase 4.5") encontrará una descripción completa de las novedades de esta versión. blog.

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

Autor

Publicado por Todd Greenstein

Todd Greenstein es Arquitecto de Soluciones en Couchbase. Todd está especializado en diseño de APIs, arquitectura, modelado de datos y desarrollo en nodejs y golang.

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.