Lo que estoy aprendiendo Couchbase es que, aunque su objetivo es proporcionar valores predeterminados razonables, también ofrece opciones para hacer concesiones. La compensación en la que me voy a centrar en esta entrada de blog es Scan Consistency para consultas N1QL.

N1QL is SQL for JSON Documents

Couchbase 4.5 introduce un nuevo Opción de coherencia de exploración: AtPlus. Esto se une a las opciones existentes para hacer un total de tres:

  • NotBounded (por defecto)

  • AtPlus (nuevo en Couchbase Server 4.5)

  • SolicitarPlus

Esta entrada del blog va a revisar NotBounded y RequestPlus, así como introducir AtPlus. También voy a proporcionar un ejemplo de código que se puede utilizar para probar los tres a ti mismo.

No limitado

Este es el comportamiento por defecto.

Una consulta N1QL que utiliza Consistencia de Escaneo "No Limitada" significa que no esperará a que ningún índice termine de actualizarse antes de ejecutar la consulta y devolver los resultados. Supongamos que tiene los documentos A,B,C en un bucket. En el momento de la consulta, sólo A y B están indexados. Con Not Bounded, sólo se devolverán los documentos A y B.

Dado que la consulta no espera a ser indexada, ésta es la mejor opción en cuanto a rendimiento. El documento C aparecerá una vez indexado. Esto no debería llevar mucho tiempo, pero si acaba de crear C, por ejemplo, e inmediatamente después realiza una consulta para obtener una lista completa de documentos, es posible que C no aparezca. Para hacer una demostración con el viaje-muestra cubo:

Lo que yo esperaría ver al ejecutar este código es:

  1. Recuento inicial: N

  2. Recuento después de la inserción: N (todavía)

  3. En espera

  4. Cuenta después de esperar: N+1

He fijado el tiempo de espera en 5 segundos, lo que probablemente sea excesivo. Utilizo Thread.Sleep sólo con fines demostrativos, pero obviamente es una táctica torpe para una aplicación real. Esto nos lleva a RequestPlus.

SolicitarPlus

Esta opción de consistencia de escaneo proporciona casi lo contrario de No limitado. Esperará hasta que se procesen todos los cambios de documentos y actualizaciones de índices (hasta que se ejecute la consulta) antes de ejecutar la consulta.

He aquí un ejemplo simplificado de secuencia de eventos al utilizar RequestPlus

  1. Se crea el documento C

  2. Se ejecuta la consulta N1QL para obtener todos los documentos (A,B,C existen todos en el bucket)

  3. La consulta N1QL se pone en espera porque al menos un documento necesita ser indexado (documento C).

  4. El proceso de indexación ha finalizado. El documento C ya está indexado.

  5. La consulta N1QL se ejecuta y devuelve A,B,C.

Esto nos proporciona exhaustividad en los resultados de la consulta, a costa del rendimiento. En algunos casos, no tiene sentido esperar a que todo a indexar. Y eso nos lleva a AtPlus.

AtPlus (nuevo en Couchbase 4.5)

Esta opción de coherencia de escaneado ofrece un término medio entre RequestPlus y Not Bounded. También es una opción nueva opción de escaneo de coherencia para Couchbase 4.5.

Con AtPlus, tendrás que hacer un poco más de trabajo en tu código, pero a cambio obtendrás un mejor rendimiento que usando RequestPlus. En lugar de esperar a que se complete un índice completo (que podría ser de múltiples documentos), sólo esperará a que se indexen los documentos que especifiques antes de ejecutar la consulta. Esto se conoce a veces como "read your own write" o RYOW.

Con este ejemplo, la consulta N1QL esperará únicamente a que se indexe el nuevo documento. No esperará nada más. En un sistema de gran volumen, esto podría proporcionar un buen equilibrio entre un mayor rendimiento y la exhaustividad de los resultados.

Tenga en cuenta que en el momento de escribir este post, tendrá que asegurarse de que establece explícitamente UseEnhancedDurability a verdadero al configurar su ClientConfiguration:

Conclusión

Con N1QL, hay un espectro de velocidad e integridad. Con Couchbase Server 4.5, ahora tienes tres opciones. NotBounded para la velocidad bruta, RequestPlus para la exhaustividad actual, y AtPlus se sitúa en medio.

Por favor, deje un comentario, ping me on Twittero envíeme un correo electrónico (matthew.groves AT couchbase DOT com).

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.

Dejar una respuesta