Para tener un poco de contexto: esta pregunta se refiere a un proyecto que se ejecuta en una única instancia pequeña de EC2 y está a punto de migrar a una versión mediana. Los componentes principales son Django, MySQL y una gran cantidad de herramientas de análisis personalizadas escritas en python y java, que realizan el pesado proceso de elevación . La misma máquina ejecuta Apache también.Cambiar de MySQL a Cassandra - Pros/Contras?
El modelo de datos tiene el siguiente aspecto: una gran cantidad de datos en tiempo real se transmiten desde diversos sensores de red, y idealmente, me gustaría establecer un enfoque de larga duración en lugar de la encuesta actual cada 15 minutos (una limitación de las estadísticas informáticas y la escritura en la base de datos en sí). Una vez que entran los datos, almaceno la versión en bruto en MySQL, dejo que las herramientas de análisis se pierdan en estos datos y almacene las estadísticas en otras pocas tablas. Todo esto se representa con Django.
características relacionales que necesitaría -
- Ordenar por [SliceRange en la API de Cassandra parece satisy esto]
- Grupo de
- las relaciones de muchos a muchos entre varias tablas [Cassandra SuperColumns parecen hacer bien para uno a muchos]
- Sphinx en esto me da un buen motor de texto completo, por lo que es una necesidad también. [En Cassandra, el proyecto Lucandra parece satisfacer esta necesidad]
Mi principal problema es que las lecturas de datos son extremadamente lento (y escrituras no son tan caliente tampoco). No quiero arrojar mucho dinero y hardware en este momento, y preferiría algo que pueda escalar fácilmente con el tiempo. Escalar verticalmente MySQL no es trivial en ese sentido (o es barato).
Así que, esencialmente, después de haber leído mucho sobre NoSQL y experimentado con cosas como MongoDB, Cassandra y Voldemort, mis preguntas son,
En una instancia EC2 medio, qué gano ningún beneficio en lee/escribe al cambiar a algo como Cassandra? This article (pdf) definitivamente parece sugerir eso. Actualmente, diría que unos cientos de escrituras por minuto serían la norma. Para lecturas: dado que los datos cambian cada 5 minutos aproximadamente, la invalidación de la caché debe ocurrir bastante rápido. En algún momento, debería ser capaz de manejar una gran cantidad de usuarios concurrentes también. El rendimiento de la aplicación actualmente se elimina en MySQL haciendo algunas combinaciones en tablas grandes, incluso si se crean índices, algo del orden de 32k filas tarda más de un minuto en renderizarse. (Esto también puede ser un artefacto de E/S virtualizada EC2). El tamaño de las tablas es de alrededor de 4-5 millones de filas, y hay alrededor de 5 de esas tablas.
Todo el mundo habla sobre el uso de Cassandra en múltiples nodos, dado el teorema CAP y la consistencia eventual. Pero, para un proyecto que recién comienza a crecer, tiene sentido desplegar un servidor de cassandra de un nodo? ¿Hay alguna advertencia? Por ejemplo, ¿puede reemplazar a MySQL como back-end para Django? [¿Es esto recomendable?]
Si cambio, supongo que tendré que volver a escribir partes de la aplicación para hacer mucho más "administrivia" ya que tendría que hacer múltiples búsquedas para buscar filas .
¿Tendría algún sentido sólo tiene que utilizar MySQL como un almacén de valor clave en lugar de un motor relacional, e ir con eso? De esa forma podría utilizar una gran cantidad de API estables disponibles, así como también un motor estable (e ir relacional según sea necesario). (Post de Brett Taylor de Friendfeed en esto - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
Cualquier ideas de la gente que ha hecho un cambio sería muy apreciada!
Gracias.
Tengo curiosidad por si acabas de cambiar a Cassandra. Ya estoy en la ruta de cambiar de php y asp.net a django, pero no estoy seguro si es prematuro pasar de mssql y mysql a Cassandra en este momento. También tengo cientos de registros por segundo entrando. – avatar
@itgorilla - Utilizo cassandra para una tarea muy específica en la que ahora está funcionando bien. Me di cuenta de que usarlo para "mover" bases de datos probablemente no era una buena idea, y mis resultados validan eso (estoy de acuerdo con la respuesta de codemonkey a continuación). Entonces, si quieres escribir muy rápido, buscar datos desnormalizados y quieres escalar, Cassandra es una opción bastante buena. (¡El número más alto sería, digamos, unos pocos millones escribe por minuto!) – viksit
Eche un vistazo a este proyecto de Django Cassandra si le interesa: https://github.com/vaterlaus/django_cassandra_backend – Alex