2012-10-03 26 views
18

Estoy tratando de entender a Cassandra y cómo estructurar mis familias de columnas (CF), pero es bastante difícil porque estoy acostumbrado a las bases de datos relacionales.Incremento automático de la clave de la columna Cassandra

Por ejemplo, si creo simple users CF y trato de insertar una nueva fila, ¿cómo puedo hacer una clave incremental como en MySQL?

Vi muchos ejemplos en los que simplemente pondría el nombre de usuario en lugar de una ID única y eso tendría un poco de sentido, pero ¿qué ocurre si quiero que los usuarios tengan nombres de usuario duplicados?

También cómo puedo hacer búsquedas cuando, por lo que entiendo, cassandra no soporta los operadores >, por lo que algo como select * from users where something > something2 no funcionaría.

Y probablemente la pregunta más importante ¿qué pasa con la agrupación? ¿Tendría que recuperar todos los datos y luego filtrarlos con el idioma que estoy usando? Creo que eso ralentizaría mucho mi sistema.

Así que, básicamente, necesito una breve explicación de cómo empezar a usar Cassanda.

Respuesta

16

Sus preguntas son bastante generales, pero permítanme echarle una ojeada. Primero, necesita modelar sus datos en términos de sus consultas. Con un RDBMS, usted modela sus datos en una forma normalizada, luego optimiza más tarde para sus consultas específicas. No puedes hacer esto con Cassandra; debe escribir sus datos de la manera en que desea leerlos. A menudo esto significa escribirlo de más de una manera. En general, ayuda a eliminar completamente su pensamiento RDBMS si desea trabajar efectivamente con Cassandra.

teclas: En cuanto a

  • Se utilizan en Cassandra como unidad de distribución a través del anillo. Por lo tanto, su clave se convertirá en hash y se le asignará un "propietario" en el anillo. Utilice RandomPartitioner para garantizar una distribución uniforme

  • Suponiendo que utilice RandomPartitioner (debe), las claves no están ordenadas. Esto significa que no puede solicitar una gama de claves. Sin embargo, puede solicitar una lista de claves en una sola consulta.

  • Las claves son relevantes en algunos modelos y no en otros. Si su modelo requiere consulta por clave, puede usar cualquier valor exclusivo que su aplicación conozca (como un UUID). A veces las claves son valores centinelas, como una época Unix que representa el comienzo del día. Esto le permite entregar a Cassandra un conjunto de claves conocidas, luego obtener un rango de datos ordenados por columna (ver a continuación).

En cuanto a predicados de consulta:

  • Usted puede obtener rangos de datos suponiendo que modelar correctamente para responder a sus consultas.

  • Dado que las columnas se escriben en orden, puede consultar un rango de la columna A a la columna n con una consulta de sector (que es muy rápida). También puede usar columnas compuestas para abstraer un poco este mecanismo.

  • Puede usar índices secundarios en columnas donde tiene baja cardinalidad, esto le da funcionalidad de consulta por valor.

  • Puede crear sus propios índices donde los datos se ordenan de la manera que lo necesita.

En cuanto a la agrupación:

supongo que te refieres a la creación de agregados. Si necesita sus datos en tiempo real, querrá utilizar algún mecanismo externo (como Storm) para rastrear datos y actualizar constantemente sus agregados relevantes en un CF. Si está creando agregados como parte de un proceso por lotes, Cassandra tiene una excelente integración con Hadoop, lo que le permite escribir trabajos de mapeo/reducción en Pig, Hive o directamente en el idioma de su elección.

1

Es posible que desee retirar PlayOrm. Aunque estoy de acuerdo en que necesitas salir de RDBMS, pensar que tener tu clave principal como usuario es simplemente la opción incorrecta. A veces es la elección correcta (depende de sus requisitos).

PlayOrm es una mezcla de noSQL y conceptos relacionales, ya que necesita ambos y usted puede hacer Scalable-SQL con combinaciones y todo. Solo necesita dividir las tablas que cree que crecerán en billones/billones de filas y puede consultar esas particiones. Incluso con CQL, necesita particionar sus tablas. ¿Qué puedes dividir? el tiempo es bueno para algunos casos de uso. Otros pueden ser particionados por clientes ya que cada cliente es realmente una mini base de datos en su clúster noSQL.

En cuanto a las teclas, PlayOrm genera claves únicas de "clúster" que son hostname-uniqueidinThatHost, básicamente como TimeUUID excepto un poco más cortas y más legibles ya que usamos nombres de host en nuestro clúster de a1, a2, a3, etc. . etc.

7

a su primera pregunta:

¿Puedo hacer llave incrementales como en MySQL

no, en realidad - no es nativo de Cassandra. How to create auto increment IDs in Cassandra - Puede consultar aquí para obtener más información: http://srinathsview.blogspot.ch/2012/04/generating-distributed-sequence-number.html

Su segunda pregunta es más acerca de cómo almacena y modela sus datos de Cassandra.

Consulte la opción de búsqueda de stackoverflow. ¡Muchas preguntas interesantes!

  1. Switching from MySQL to Cassandra - Pros/Cons?
  2. Cassandra Data Model
  3. Cassandra/NoSQL newbie: the right way to model?
  4. Apache Cassandra schema design
  5. Knowledge sources for Apache Cassandra

más importante, When NOT to use Cassandra?

+0

Cassandra sup Contadores de puertos (https://cassandra.apache.org/doc/cql3/CQL.html#counters), aunque hay algunas limitaciones. –

Cuestiones relacionadas