Como probablemente ya sabes, puedes consultar documentos NoSQL de Couchbase usando un dialecto SQL llamado N1QL. Esto es posible gracias a los índices que creas en los documentos de tus buckets de Couchbase. Sin embargo, ¿qué pasaría si te dijera que no todas las consultas N1QL requieren que exista primero un índice? Después de hablar con mi colega Justin Michaelsme enseñó un truco impresionante para realizar operaciones masivas en N1QL sin índices. Esto era nuevo para mí porque siempre pensé que se necesitaba al menos un índice para existir, pero bueno, se aprende algo nuevo todos los días.

Vamos a ver cómo ejecutar algunas consultas N1QL en un archivo Couchbase Bucket que no tiene índices y que no incluye ningún índice primario.

Antes de pasar a algunos escenarios de ejemplo, puede que te preguntes cómo es posible ejecutar consultas sin un índice. Esto es posible utilizando la función UTILIZAR TECLAS para localizar documentos concretos a partir de su clave en la metainformación.

Tomemos como ejemplo el siguiente documento:

Arriba tenemos un documento simple que representa a una persona en particular. Digamos que el documento anterior tiene nraboy como valor de id. Para hacer las cosas interesantes, vamos a crear otro documento.

Supongamos que mraboy como valor de id:

Por lo tanto, si quisiéramos consultar cualquiera de estos dos documentos con el método UTILIZAR TECLAS en N1QL, podríamos componer una consulta parecida a la siguiente:

Si nos fijamos en el EXPLICAR de la consulta anterior notarás que no se utilizó ningún índice en la consulta. El tipo de consulta anterior sería útil si conocieras las claves que quieres obtener y quisieras un rendimiento increíblemente rápido similar a como se hizo en un artículo anterior que escribí titulado, Obtención de varios documentos por clave en una sola operación con Node.js.

Vamos a complicar un poco más las cosas. ¿Y si quisiéramos hacer una consulta con una relación sobre una o varias propiedades del documento?

Creemos otro documento con couchbase como identificador del documento:

El documento anterior representa una empresa. Como probablemente habrás adivinado, vamos a consultar la información de la empresa de cada persona. Para que esto sea posible, cambiemos la directiva nraboy para que tenga el siguiente aspecto:

Observa que hemos añadido una propiedad con la clave de nuestro otro documento. No añadiremos ninguna información de la empresa al documento mraboy documento.

Tomemos la siguiente consulta que tiene una relación de múltiples documentos, pero sin índices creados:

Observe que la consulta anterior tiene una subconsulta que también utiliza la función UTILIZAR TECLAS operador. No está mal, ¿verdad? Prueba a utilizar otros operadores como UNNEST para aplanar los datos de la matriz que se encuentran en el medios_sociales propiedad.

Conclusión

Acabas de ver cómo escribir consultas N1QL en Couchbase que no usan índice. Usando la función UTILIZAR TECLAS operador podemos hacer operaciones masivas basadas en clave, como he demostrado en los artículos, Obtención de varios documentos por clave en una sola operación con Node.jsUso de Golang para obtener múltiples documentos Couchbase por clave en una única operación. Muchas gracias a Justin Michaels de Couchbase por ayudarme con esto.

Para obtener más información sobre N1QL y Couchbase, consulte la página Portal para desarrolladores de Couchbase para más información.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

3 Comentarios

  1. Hola, necesito realizar una consulta sobre múltiples documentos para buckets de datos sin índice.
    He entendido que puedo utilizar el operador USE KEYS con una lista de valores id
    e.g USE KEYS ['a', 'b']
    En mi caso de uso tengo una lista de varios id de documentos.
    ¿Es posible escribir una consulta como USE KEYS ['*all document id'] en lugar de especificar todos los valores de id en la matriz USE KEYS ['a', 'b', ....., 'n'] ?
    Si no, ¿podría sugerir otra forma de escribir este tipo de consulta?
    Gracias

    1. Si no quieres utilizar un índice, tendrás que especificar todas las claves. El índice mantiene un registro de los documentos, lo que permite realizar consultas en todos los identificadores de documento. Sin índice significa que no hay nada que mantenga el rastro de los documentos, dejándole con operaciones de clave-valor solamente.

      ¿Tal vez mantener un documento maestro que es sólo una matriz de identificadores de documento? Luego, cuando necesite realizar una consulta, busque el documento y utilice las claves de la matriz en la sentencia USE KEYS.

  2. Vale, podría ser una solución.
    Gracias por su respuesta

Dejar una respuesta