Crear y colocar ÍNDICE en Cassandra

⚡ Resumen inteligente

Crear y eliminar índice en Cassandra Permite filtrar columnas que no forman parte de la clave principal. Esta página describe los comandos CREATE INDEX y DROP INDEX, las reglas de nomenclatura, los tipos de índice disponibles y los casos en los que un índice no es la solución adecuada.

  • 🔎 ¿Por qué Index? Sin un índice, una cláusula WHERE solo puede hacer referencia a columnas de clave primaria.
  • 🏷️ Regla de nomenclatura: Se crea un índice sin nombre con el formato TableName_ColumnName_idx y debe eliminarse con ese mismo nombre.
  • 🔁 Mantenimiento automático: Las filas existentes se indexan al crearse, y las filas nuevas se indexan al escribirlas sin necesidad de realizar ninguna otra acción.
  • 🚫 Restricciones: Las columnas de clave primaria ya están indexadas, por lo que se rechaza la creación de un índice secundario sobre ellas.
  • 📉 La cardinalidad importa: Las columnas con una cardinalidad muy alta o muy baja hacen que un índice sea lento o inútil.
  • 🧱 Mejor alternativa: Una tabla de consulta diseñada específicamente para este fin suele ofrecer un mejor rendimiento que un índice secundario a gran escala.

Crear y eliminar índice en Cassandra

Cassandra Crear índice

El comando 'Crear índice' crea un índice en la columna especificada por el usuario. Si los datos ya existen para la columna que desea indexar, Cassandra crea índices en los datos durante la ejecución de la instrucción 'crear índice'.

  • Después de crear un índice, Cassandra indexa nuevos datos automáticamente cuando se insertan datos.
  • El índice no se puede crear en la clave principal porque una clave principal ya está indexada.
  • Se admiten índices en las columnas de la colección, utilizando el formato CLAVE, VALORES o ENTRADAS, según lo que se necesite buscar.
  • Sin indexar en la columna, Cassandra No se puede filtrar esa columna a menos que sea una clave primaria.

Por eso, para filtrar columnas en CassandraEs necesario crear índices.

Sintaxis

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Ejemplo

Aquí está la instantánea donde se intentó filtrar la columna "departamento" sin crear el índice. En respuesta, se devolvió el error.

Cassandra Crear índice

Aquí está la instantánea donde se crea el índice en la columna del departamento.

Cassandra Crear índice

CREATE INDEX DeptIndex ON University.Student (dept);

Aquí está la instantánea donde se filtrará con éxito la columna "departamento".

Cassandra Crear índice

SELECT * FROM University.Student WHERE dept = 'CS';

El nombre del índice es opcional. Si se omite, se permite Cassandra Generar uno automáticamente, lo cual es importante cuando posteriormente hay que eliminar el índice.

CREATE INDEX IF NOT EXISTS ON University.Student (dept);

Cassandra Índice de caída

El comando "Eliminar índice" elimina el índice especificado. Si no se proporcionó el nombre del índice durante la creación del índice, entonces el nombre del índice es NombreTabla_NombreColumna_idx.

  • Si el índice no existe, devolverá un error a menos que se utilice IF EXISTS, que devolverá no operativo.
  • Debes especificar el nombre del espacio de claves junto con el nombre del índice; de ​​lo contrario, el índice se buscará en el espacio de claves actual.

Sintaxis

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Ejemplo

Aquí está la instantánea del comando ejecutado "Eliminar índice" que elimina el índice DeptIndex.

Cassandra Índice de caída

DROP INDEX IF EXISTS University.DeptIndex;

Después de la ejecución exitosa del comando, DeptIndex se eliminará del espacio de claves. Ahora los datos no se pueden filtrar por el departamento de columna.

Para confirmar qué índices existen antes de la caídaping Primero, describa la tabla y lea las definiciones de índice que aparecen al final del resultado.

DESCRIBE TABLE University.Student;

Tipos de índice en Cassandra

El comando anterior crea un índice secundario estándar, pero existen tres mecanismos distintos y se comportan de manera muy diferente.

Tipo Cómo funciona Mejores para
Índice secundario Cada nodo indexa únicamente sus propios datos locales, por lo que una consulta sin clave de partición debe contactar con todos los nodos. Columnas de cardinalidad moderada consultadas junto con una clave de partición.
Índice SASI Un índice adjunto que admite la coincidencia de prefijos y sufijos LIKE, además de rangos numéricos. Patrones de búsqueda de texto. Aún se considera experimental, por lo que se recomienda probarlo antes de usarlo en producción.
Índice adjunto de almacenamiento (SAI) El neumático VXNUMX se presentó el Cassandra 5.0, compartiendo una estructura de índice entre columnas con menor sobrecarga de escritura. El reemplazo moderno para ambos de los anteriores en Cassandra 5 grupos.

La indexación de una columna de colección utiliza un modificador que indica qué parte se debe indexar.

CREATE INDEX ON University.Teacher (VALUES(Email));
CREATE INDEX ON University.Course (KEYS(prereq));
CREATE INDEX ON University.Course (ENTRIES(prereq));

VALUES busca los elementos de un conjunto o lista, KEYS busca las claves de un mapa y ENTRIES compara un par clave-valor. La indexación de colecciones se trata con más detalle en el Cassandra colecciones tutorial.

Cuándo no usar un índice en Cassandra

Un índice secundario es práctico, pero no es un índice relacional, y usarlo en el lugar equivocado suele ser causa de lentitud en la agrupación de clústeres. Cuatro situaciones requieren un enfoque diferente.

  • Cardinalidad muy alta. Indexar algo casi único, como una dirección de correo electrónico, significa que casi cada partición contiene una fila coincidente, por lo que la consulta se extiende por todo el clúster para devolver un único registro.
  • Cardinalidad muy baja. La indexación de un indicador de dos valores, como activo o inactivo, produce particiones de índice enormes, y la lectura de una de ellas devuelve la mitad de la tabla.
  • Columnas actualizadas con frecuencia. Cada cambio escribe una entrada en el índice y una marca de eliminación para la anterior, por lo que la acumulación de marcas de eliminación degrada la velocidad de lectura con el tiempo.
  • Consultas sin clave de partición. Sin él, el coordinador debe contactar con cada nodo y fusionar los resultados, lo cual no resulta escalable a medida que se añaden nodos.

La alternativa duradera es una segunda tabla indexada por la columna que necesita ser buscada, escrita al mismo tiempo que la primera. Esto sigue el principio de consulta primero descrito en el Cassandra reglas del modelo de datosy mantiene cada lectura en una única partición en un único nodo.

Como regla general, un índice es adecuado para una columna de cardinalidad moderada que se consulta junto con una clave de partición conocida. Para cualquier otro caso, es mejor utilizar una tabla diseñada específicamente para ello.

Preguntas Frecuentes

No existe un límite estricto, pero cada índice aumenta el costo de escritura y el consumo de memoria. Dos o tres por tabla constituyen un límite práctico; si se supera este límite, conviene reconsiderar el modelo de datos.

No. Las filas existentes se indexan en segundo plano y la tabla permanece disponible. Las tablas grandes requieren tiempo, y el progreso se puede consultar con nodetool compactionstats.

Un índice apunta a filas de la tabla base. Una vista materializada es una tabla independiente que se mantiene automáticamente con su propia clave de partición, por lo que sus lecturas acceden a una única partición.

Dada la lista de consultas y la cardinalidad de las columnas, la IA puede clasificar los candidatos de forma razonable. No puede ver la frecuencia de actualización, que a menudo determina si el índice acumulará marcadores de eliminación.

A menudo, esto se debe a que ejecuta una consulta rechazada. Considere esta sugerencia como una señal de que realmente se necesita un índice o una nueva tabla de consulta.

Resumir este post con: