Con la reciente versión para desarrolladores de marzo de 2017 de Couchbase se han corregido muchos errores, pero también se han mejorado características de tecnologías básicas como N1QL. Por ejemplo, ahora se pueden crear índices en varios metadatos como el cas del documento y los valores de expiración. Otro ejemplo incluye una sintaxis simplificada al crear índices de array.
Vamos a echar un vistazo a algunas de estas mejoras y a cómo podrías utilizarlas en tu propia aplicación.
Indexación simplificada de matrices en Couchbase 5.0
Con Couchbase Server 4.5 llegó la indexación de arrays. Tomemos como ejemplo el siguiente documento de muestra:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "tipo": "persona", "nombre": "Nic", "apellido": "Raboy", "social-media": [ { "tipo": "twitter", "url": "https://www.twitter.com/nraboy" }, { "tipo": "sitio web", "url": "https://www.thepolyglotdeveloper.com" } ] } |
Nueva sintaxis de índice de matriz
Antes de Couchbase 5.0, para indexar los elementos de la matriz que se encuentran en redes sociales
tenías que escribir un índice parecido al siguiente:
1 2 3 |
CREAR ÍNDICE ism ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END ) WHERE tipo = 'persona'; |
En el ejemplo anterior, el PARA
era necesario para la indexación de arrays. En Couchbase Server 5.0 hay una sintaxis mucho más simplificada. El mismo índice se puede crear mediante lo siguiente:
1 2 3 |
CREAR ÍNDICE ism ON `default` ( DISTINCT `social-media` ) WHERE tipo = "persona"; |
Para asegurarte de que tu índice funciona, puedes ejecutar la siguiente consulta N1QL:
1 2 3 |
EXPLICAR SELECT * POR DEFECTO WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END; |
Al examinar los resultados de la EXPLICAR
debería ver que está utilizando el ismo
creado anteriormente.
Ahora bien, que exista la sintaxis simplificada no significa que no se pueda utilizar la sintaxis anterior al indexar arrays. El siguiente sería un ejemplo perfecto de por qué la sintaxis anterior seguiría siendo válida:
1 2 3 |
CREAR ÍNDICE ism_website ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` WHEN media.type = 'website' END ) WHERE tipo = 'persona'; |
Obsérvese que a CUANDO
al crear el ism_website
índice superior.
Más información sobre la indexación de matrices aquíjunto con otra documentación útil sobre la creación de índices en Couchbase.
Requisito relajado de coincidencia de variables para índices de matrices
En las versiones 4.x, la indexación de matrices requería el uso de exactamente los mismos nombres de variables en el archivo SELECCIONE
que se utilizaron en la CREAR ÍNDICE
declaración. Más información aquí.
Por ejemplo, en referencia a las consultas anteriores, observe que la variable medios de comunicación
que se utiliza para iterar a través de la matriz redes sociales
es muy importante. La indexación de matrices en 4.x exige el nombre exacto de la variable medios de comunicación
que se utilizará en el SELECCIONE
consulta.
La versión 5.0 de Couchbase relaja este requisito, y la siguiente consulta funcionaría perfectamente:
1 2 3 4 |
EXPLICAR SELECT * POR DEFECTO UTILIZAR ÍNDICE (ism) WHERE type = 'person' AND ANY m IN `social-media` SATISFIES m.type = 'website' END; |
Tenga en cuenta que, el índice ismo
utiliza el nombre de la variable medios de comunicación
pero la consulta anterior utiliza m
. Aun así, la consulta anterior puede utilizar el índice ismo
con éxito.
Requisito relajado de clave de índice de matriz completa para índices de matriz
Recuerde también que, en las versiones 4.x, la indexación de matrices cubierta requiere el atributo de matriz completa como clave de índice obligatoria en la definición del índice de matriz. Por ejemplo, tome la siguiente consulta de nuevo:
1 2 3 |
EXPLICAR SELECT * POR DEFECTO WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END; |
El índice de matriz cubierta correspondiente a la consulta anterior sería:
1 2 3 |
CREAR ÍNDICE ism_covered ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END, `social-media`) WHERE tipo = 'persona'; |
Tenga en cuenta que, la segunda clave de índice redes sociales
es obligatorio, por ejemplo para cubrir la siguiente consulta:
1 2 3 |
EXPLAIN SELECT medio POR DEFECTO WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media IS NOT NULL END; |
En Couchbase 5.0, esta misma consulta estará cubierta por el índice ismo
al principio de este artículo.
Es importante notar que, esta característica trae mucho poder a los Índices de Arreglos. Porque, ahora cada entrada en el índice de matriz consume menos espacio de almacenamiento y memoria. Permite los siguientes beneficios:
- Uso de índices de matrices cubiertas para matrices más grandes
- Aumenta la eficacia y el rendimiento de las consultas que utilizan índices de matrices cubiertas.
Indexación de la metainformación del documento
Demos un giro aquí y hablemos de la nueva metainformación que se puede indexar. Antes se podían crear índices sobre la meta().id
pero ahora tanto la propiedad meta().cas
y meta().expiración
son compatibles.
Entonces, ¿cómo creamos un índice que utilice las meta propiedades como claves? No es muy distinto de lo que ya sabes. Tomemos como ejemplo los siguientes índices de cobertura:
1 2 3 4 5 |
CREAR ÍNDICE idx_cas ON `default` ( META().cas, META().expiration ) CREAR ÍNDICE idx_exp ON `default` ( META().expiration ) |
Ahora bien, si quisiera utilizar el idx_cas
y idx_exp
índices en una consulta N1QL, podría hacer algo como lo siguiente:
1 2 3 4 5 6 7 |
SELECT META().id, META().cas POR DEFECTO WHERE META().cas > 1489531586248179712; SELECT META().id, META().expiration POR DEFECTO WHERE META().caducidad > NOW_MILLIS(); |
¿Por qué indexar estas propiedades? ¿Y si quisieras consultar todos los documentos que han caducado hoy o todos los documentos que se han modificado hoy?
Para más información sobre las propiedades CAS y de caducidad, visite aquí. Para obtener más información sobre la indexación o el uso de N1QL con Couchbase, consulte la página Portal para desarrolladores de Couchbase.
[...] Mejoras en las características de N1QL en Couchbase Server 5.0 March Developer Build [...]