En nuestra serie de formación continua, cada vez surgen una serie de preguntas, que enumero a continuación con sus respectivas respuestas.
Couchbase 104 - Vistas e indexación
P: ¿Se admiten comodines como * y % en las consultas de vista?
R: No exactamente, pero en muchos casos el uso de una consulta de rango con texto parcial en la clave inicial puede sustituir a muchos comodines necesarios, pero no a todos. Por ejemplo, para obtener todas las claves que empiecen por "user::" puede hacer startkey="user" y endkey="useruefff". No puedes hacer cosas como startkey="u%er", que coincidiría con claves indexadas de "user" y "uzer".
P: ¿Cómo se puede modelar un gráfico con vistas?
R: La respuesta a esta pregunta es un poco complicada, ya que se trata de una cuestión muy abierta en cuanto a la definición de lo que es realmente tu "gráfico" y cómo vas a consultarlo. Si lo haces al "estilo Twitter", en realidad no es un gráfico, sino una lista de seguidores y personas a las que sigues. Aunque técnicamente es un gráfico de profundidad limitada, se trata más bien de dos listas. Si estás consultando el grafo basándote en los atributos de relación entre nodos, esto puede volverse muy complejo rápidamente. Si además se consultan muchos niveles de profundidad (o grados de separación), también puede resultar bastante complicado. Las bases de datos de grafos están diseñadas específicamente en sus estructuras de datos para recorrer y consultar estructuras de grafos. Sin embargo, no son tan buenos como los almacenes de datos de propósito general, por lo que es una buena idea hacer una combinación políglota de Couchbase y ellos (he utilizado Couchbase y Neo4J juntos muy bien).
P: ¿Existen opciones para cambiar el orden predeterminado de intercalación?
R: No fuera de la caja, estoy seguro de que hay una manera de modificar y construir que a partir de la fuente. Eres bienvenido a publicar en el grupo de google de Couchbase si esto es importante para ti. La intercalación Unicode es mucho más favorable que el orden de bytes.
P: Utilizando dateToArray(timestamp) como clave indexada para la emisión, ¿cómo se agruparía sólo por meses?
R: Los árboles B+ siguen ordenando las claves compuestas como cadenas, por lo que no habría forma de agrupar sólo por mes (múltiples años) sin cambiar la clave indexada en la sentencia emit. Usted podría, ya sea, sacar el año haciendo emit(dateToArray(timestamp).splice(1), output_val) o hacer una Vista diferente sólo para eso si necesita ambas cosas. Pero si está utilizando la salida estándar de dateToArray() que tiene primero el aaaa, no puede agrupar sólo por MM e ignorar el aaaa.
P: ¿Qué ocurre si se emiten varias claves en una misma función map()?
R: Se añadirán a un único índice y se ordenarán como cadenas dentro de él. Puedes usar esto para hacer uniones "simuladas" como mostré en el video y que viene con las Vistas de la base de datos de la muestra de cerveza. Cada vista es un índice único, por lo que cada función Map es el procesamiento para crear ese índice y cada sentencia emit dentro de la función map emite claves indexadas como nodos y valor de salida asociado y meta.id adjunto. También almacenamos el valor de reducción de ese nodo y todos los nodos debajo de él (hijos) en el árbol B+ para acelerar las consultas de reducción y no tener que recorrer todos los nodos en reducciones.
P: ¿Es posible realizar búsquedas de texto completo con Views?
R: No, eso no es posible con Views como índices, pero puedes usar la integración de Elastic Search para esto. También hay un Developer Preview de N1QL Couchbase Query Language para consultas ad-hoc de Couchbase. Es un software que es independiente de Couchbase y se ejecuta en paralelo en este momento, también hay un tutorial en línea: http://www.couchbase.com/communities/n1ql
[...] Blog de la Semana #2: Couchbase 104 Q&A [...]