2011-06-20 11 views
10

¿Cómo funciona un índice secundario de Cassandra internamente? Los documentos afirman que es una especie de índice hash:Cassandra y Secondary-Indexes, ¿cómo funcionan internamente?

Dado que tengo la colum username="foobar" (nombre de usuario Columna será Índice scondary) en un CF User con RandomOrderingPartitioner

  1. Es mi la Asunción correcta, que Cassandra utiliza una "Índice Hash Distribuido" (= ¿Entonces el índice no está en un solo nodo = el índice está dividido)?
  2. ¿En cuántos nodos se encuentran las partes del índice (la misma cantidad que el factor de replicación)?
  3. En qué nodos se encuentran las partes de índice (¿Cassandra divide el índice por la misma lógica que la clave con RandomOrderingPartitioner)?

  4. En caso de que el índice se mantenga en sólo un nodo (y por supuesto replicado), ¿cómo cassandra en "determinar" el nodo que es responsable para el índice (Por hashing la columname y luego usando el logik randompartitioner para determinar el nodo)?

  5. ¿Es realmente cierto que este índice está optimizado para una cardinalidad baja? En caso afirmativo, ¿cuál es una estimación aproximada ( hay una cifra concreta que puedo usar para juzgar), que no debería usar un índice secundario (y más bien use una CF separada para el índice)? O dijo de manera diferente cómo calcular la cardinalidad y tomar la decisión correcta?

Estoy tratando de entender esto.

+0

¿Cuál es el "por qué?" detrás de esta pregunta? ¿Hay algún problema específico que intentas resolver o simplemente intentas llenar algunos vacíos en tu comprensión? –

+1

La pregunta subyacente es con respecto al "rendimiento". Gestionar los índices "Manualmente" como nuevos CF es muy tedioso. Los índices secundarios son fáciles de mantener, pero (como indica el problema de cardinalidad) parecen no ajustarse a las necesidades importantes. Además, pude "descargar" algunas de las cosas de indexación a otras capas en mi aplicación. Y, por lo tanto, quiero entender un poco cómo funcionan internamente los índices secundarios, cuáles son sus PRO y CON y cómo se relacionan con el rendimiento. – Markus

Respuesta

11

Los índices secundarios son básicamente otra familia de columnas. Ellos no son directamente accesibles a los usuarios, pero se puede ver a través de las estadísticas del grano JMX: org.apache.cassandra.db.IndexedColumnFamilies

Puede consultar las estadísticas para medir la efectividad de su índice como si fuera un normales familia de columnas

Para más detalles ver estos mensajes anteriores:

How are Cassandra's 0.7 Secondary Indexes stored?

How scalable are automatic secondary indexes in Cassandra 0.7?

Y ya que usted tiene una etiqueta hector, aquí hay un enlace a la prueba para IndexedSlicesQuery: https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model/IndexedSlicesQueryTest.java

+0

he seguido este ejemplo muy de cerca y sigo teniendo el temido: Causado por: InvalidRequestException (por qué: No hay columnas indexadas en la cláusula de índice con el operador EQ) –

Cuestiones relacionadas