¿Alguna vez has creado una aplicación en la que necesitabas guardar un documento en Couchbase y luego consultar inmediatamente ese documento creado? Me pasa todo el tiempo cuando estoy desarrollando. Tomemos, por ejemplo, la adición de nuevos datos en una lista donde cada elemento de la lista es un nuevo documento. En muchos casos, querrás actualizar la interfaz de usuario que muestra la lista inmediatamente después de añadirla. El problema aquí es que el documento que acabas de crear puede no aparecer en los resultados de la consulta. Esto se debe a que los indexadores de Couchbase pueden no haber procesado las últimas mutaciones contra el Bucket de Couchbase.
Vamos a ver cómo definir nuestra propia consistencia de escaneo dentro de una aplicación Node.js que producirá resultados variables en nuestras consultas N1QL de Couchbase.
La definición de la consistencia del escaneo en una aplicación será similar independientemente de la tecnología de programación utilizada. Para este ejemplo en particular vamos a usando Node.js tanto con N1QL como con Ottoman.js.
Antes de seguir adelante, se supone que tienes Couchbase instalado y configurado para N1QL. Esto significa que tienes al menos un índice listo para funcionar, aunque sea un índice primario.
Definición de la Consistencia de Escaneo con Consultas N1QL
Lo primero de lo que nos vamos a preocupar es de las consultas relacionadas con N1QL. Echa un vistazo al siguiente fragmento de código JavaScript de Node.js:
1 2 3 4 5 6 7 8 9 |
aplicación.consiga("/punto final", función(solicitar, respuesta) { var declaración = N1qlQuery.fromString("SELECT META().id, `" + cubo.Nombre + "`.* FROM `" + cubo.Nombre + "`"); cubo.consulta(declaración, función(error, resultado) { si(error) { devolver respuesta.estado(500).enviar(error); } respuesta.enviar(resultado); }); }); |
Por defecto, el SELECCIONE
es ilimitada. Esto significa que la consulta sólo devolverá los datos que estén indexados en ese momento, con lo que se obtendrá la respuesta más rápida posible. Recuerde, si nuestros nuevos datos no han sido indexados, no serán devueltos en los resultados.
Si quisiéramos esperar hasta que nuestros datos estuvieran indexados, podemos definir nuestra consistencia de escaneo haciendo lo siguiente:
1 2 |
var declaración = N1qlQuery.fromString("SELECT META().id, `" + cubo.Nombre + "`.* FROM `" + cubo.Nombre + "`"); declaración.coherencia(N1qlQuery.Coherencia.SOLICITUD_PLUS); |
Observe que hemos cambiado la coherencia en el fragmento anterior por SOLICITUD_PLUS
en lugar de dejarlo sin límite. Esto significa que la consulta no se ejecutará hasta que se hayan procesado todas las mutaciones del Bucket.
¿Y si no utilizamos N1QL, sino Ottoman.js?
Definición de la coherencia de exploración con Ottoman.js
Ottoman es un poco diferente, pero las reglas se siguen aplicando porque cuando se utiliza el encontrar
operador, N1QL se está utilizando bajo las cubiertas.
Eche un vistazo al siguiente fragmento de JavaScript:
1 2 3 4 5 6 7 8 |
aplicación.consiga("/punto final", función(solicitar, respuesta) { Persona.encontrar({}, función(error, resultado) { si(error) { devolver respuesta.estado(500).enviar(error); } respuesta.enviar(resultado); }); }); |
El objetivo aquí es conseguir lo mismo que habíamos visto anteriormente. En lo anterior, estamos haciendo una consulta no limitada y sólo recibiremos los resultados que fueron procesados por el índice.
Esto se puede cambiar fácilmente de la siguiente manera:
1 2 3 4 5 6 7 8 |
aplicación.consiga("/punto final", función(solicitar, respuesta) { Persona.encontrar({}, { coherencia: Otomano.Coherencia.LOCAL }, función(error, resultado) { si(error) { devolver respuesta.estado(500).enviar(error); } respuesta.enviar(resultado); }); }); |
En el código anterior, LOCAL
coherencia es lo mismo que decir SOLICITUD_PLUS
.
No está tan mal, ¿verdad?
Conclusión
Acabas de ver cómo definir tu propia consistencia de escaneo en Couchbase usando Node.js y N1QL u Ottoman. Por defecto las consultas son performance first, pero si necesitas hacer ajustes, al menos está disponible como opción.
Si desea obtener más información sobre la coherencia del escaneado y las opciones disponibles, consulte la página Documentación de Couchbase sobre el tema.