La documentación de Cassandra dice:
No use un índice en estas situaciones:
- En columnas de alta cardinalidad porque luego consulta un gran volumen de registros para obtener una pequeña cantidad de resultados. Consulte Problemas al utilizar un índice de columna de alta cardinalidad a continuación.
Continúa
Si crea un índice en una columna de alta cardinalidad, que tiene muchos valores distintos, una consulta entre los campos generará muchas búsquedas para obtener muy pocos resultados. En la tabla con mil millones de canciones, buscar canciones por escritor (un valor que generalmente es único para cada canción) en lugar de por su artista, es probable que sea muy ineficiente. Probablemente sería más eficiente mantener manualmente la tabla como una forma de índice en lugar de utilizar el índice integrado de Cassandra. Para las columnas que contienen datos únicos, a veces es bueno usar un índice por conveniencia, siempre que el volumen de consulta a la tabla que tiene una columna indexada sea moderado y no bajo carga constante.
Pero nunca responde realmente la pregunta: ¿por qué es ineficiente? No tengo idea de lo que significa "mantener manualmente la tabla como una forma de índice". Pero luego se contradice de alguna manera con "... a veces es bueno usar un índice por conveniencia siempre que el volumen de la consulta sea moderado ..."
¿Esto solo está tratando de decirme que use el PK cuando y donde pueda? ¿Qué es la ineficiencia? Según tengo entendido, una consulta que alcanzaría un índice necesitaría consultar todos los nodos del clúster, y luego cada nodo haría una búsqueda en su índice local y los resultados se agregarían. Esto no es necesariamente costoso (cada búsqueda de índice debería ser bastante barata), excepto que pagamos en latencia de red, ya que debemos esperar al nodo más lento del lote. ¿Me estoy perdiendo algo aquí?
Pero si tengo una colección que tiene miles de millones de artículos que, en raras ocasiones, deben ser buscados por un atributo diferente pero casi único ... este es un uso apropiado, ¿verdad?
VeryTodos? ¿IDK si la replicación significa que esto puede alcanzar 1/3 del clúster para un factor de replicación de 3 o no?