tutorial - curso de cassandra
Modelo de datos de Cassandra con múltiples condiciones (1)
Necesitaría poder consultar por todas las columnas.
Déjame detenerte allí mismo. En Cassandra, usted crea sus tablas basadas en sus patrones de consulta anticipados, y generalmente una tabla admite una sola consulta. En su caso, tiene "bastantes" columnas y tendrá que duplicar esos datos en una tabla diseñada para respaldar cada posible consulta. Eso va a ser grande y desgarbado, muy rápido.
¿Podríamos simplemente agregar el resto como índices secundarios? potencialmente podría haber millones de filas en la tabla eventtype + merchant_id + selección de tiempo.
Los índices secundarios están destinados a ser utilizados en columnas de cardinalidad en el medio de la carretera. Por lo tanto, ambas columnas de cardinalidad extremadamente bajas y extremadamente altas son malas para los índices secundarios. El problema es que Cassandra tendrá que elegir uno de sus nodos como coordinador, escanear el índice en cada nodo (incurriendo en un montón de tiempo de red) y luego crear y devolver el conjunto de resultados. Es una prescripción para un rendimiento deficiente, que va en contra de las mejores prácticas para trabajar con una base de datos distribuida.
En resumen, Cassandra no es una buena solución para casos de uso como este. Parece que desea poder realizar consultas de tipo OLAP, y para eso debe usar una herramienta que sea más adecuada para ese fin.
Soy nuevo en Cassandra, así que leí una docena de artículos al respecto y, por lo tanto, conozco los conceptos básicos. Todos los tutoriales muestran una recuperación eficiente de datos en 1 o 2 columnas y un rango de tiempo. Lo que no pude encontrar fue cómo modelar correctamente sus datos si tiene más condiciones.
Tengo una base de datos normalizada de grandes eventos, con bastantes columnas, por ejemplo:
- Tipo de evento
- hora
- correo electrónico
- User_age
- usuario_país
- user_language
- y así.
Necesitaría poder consultar por todas las columnas. Entonces, en RDBMS consultaría:
SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = ''nl''
etc.
Sé que puedo hacer una tabla separada para cada columna, pero aún así necesitaría combinar los resultados. Tal vez este no sea un mal enfoque, pero lo dudo, ya que no hay subconsultas.
Mi pregunta es, obviamente, ¿cómo puedo modelar este tipo de datos correctamente en Cassandra?
¡Muchas gracias!