Hay una característica en Couchbase 4.x que realmente puede ayudar con Índice Secundario Global creación y que muchos desconocen. Es la capacidad de poner en cola las sentencias de creación de índices y luego paralelizar su creación para mayor eficiencia y rendimiento.
Si necesita crear varios índices a la vez, puede aplazar la creación de los índices. Luego, cuando esté listo, le dice al clúster que cree esos índices. Por ejemplo, necesito crear dos índices, pero también quiero Alta Disponibilidad de mis índices, así que necesito una copia de cada índice en cada uno de los clústeres. Servicio de índices (IS) nodos. En otras palabras, cuatro CREAR ÍNDICE declaraciones en total.
|
1 2 3 4 5 6 7 |
CREATE INDEX idx01 ON bucketname(prop1) WHERE prop1 = "value" WITH {"nodes": [ "node1:8091" ], "defer_build":true}; CREATE INDEX idx02 ON bucketname(prop1) WHERE prop1 = "value" WITH {"nodes": [ "node2:8091" ], "defer_build":true}; CREATE INDEX idx03 ON bucketname(prop2) WHERE prop2 = "value" WITH {"nodes": [ "node1:8091" ], "defer_build":true}; CREATE INDEX idx04 ON bucketname(prop2) WHERE prop2 = "value" WITH {"nodes": [ "node2:8091" ], "defer_build":true}; |
Si no hiciera nada más, estos índices permanecerían en estado diferido/creado. La siguiente sentencia que tienes que llamar es ÍNDICE DE CONSTRUCCIÓN ya que le dirá al clúster que inicie realmente la compilación.
|
1 |
BUILD INDEX ON `bucketname`(`idx01`,`idx02`,`idx03`,`idx04`) USING GSI; |
En este punto los nodos IS comenzarán a crear los índices, pero en paralelo y aún mejor es utiliza el mismo Protocolo de cambio de base de datos (DCP) de los nodos del Servicio de Datos para una mejor utilización de la red IO. Si construyeras estos sin el aplazamiento, uno se crearía y esperarías. Bajo las cubiertas, el nodo de servicio de índice crearía ese a partir de un flujo DCP. Cuando ese estuviera completo, pondrías la siguiente sentencia CREATE y esperarías... otro flujo DCP de los mismos datos. Sigue haciendo eso hasta que los cuatro estén completos. Todo en serie.
Con la sentencia defer_build y luego la sentencia BUILD INDEX, pones todas las sentencias create de una vez y luego te vas a tomar un café. No sólo se construirán los índices en paralelo en cada nodo IS y entre los dos nodos IS, sino que cada nodo IS sólo necesitará una vez un flujo DCP de los datos del bucket. Así que todo el proceso se completa mucho más rápido y de forma mucho más eficiente. Especialmente cuando se crea la secuencia de comandos de un lote creación de índicesEntonces puede agruparlos en lotes.
Pruébalo e infórmanos. Para más información, consulte la documentación sobre CREAR ÍNDICE y ÍNDICE DE CONSTRUCCIÓN.