Commutation de MySQL vers Cassandra - avantages/Inconvénients?
Pour un peu de fond - c'est une question qui concerne un projet en cours d'exécution sur un seul petit instance EC2, et est sur le point de migrer vers une médium. Les principaux composants sont le Django, MySQL et un grand nombre de l'analyse personnalisée des outils écrits en python et java, qui ne l'lourd
de levage. De la même machine exécutant Apache.
Le modèle de données se présente comme suit: une grande quantité de données en temps réel vient en streaming à partir de divers réseau de capteurs, et, idéalement, j'aimerais établir un long sondage plutôt que le sondage actuel, toutes les 15 minutes de l'approche (une limitation de l'informatique, des statistiques et de l'écriture dans la base de données elle-même). Une fois les données, je stocke la première version en
MySQL, laissez-les outils d'analyse en vrac sur ces données, et de stocker des statistiques dans un autre quelques tables. Tout cela est rendu à l'aide de Django.
Caractéristiques relationnelles j'aurais besoin d' -
- Commande par [SliceRange de Cassandra, l'API semble satisy ce]
- Groupe par
- Manytomany relations entre plusieurs tables [Cassandra SuperColumns semblent bien faire pour un à plusieurs]
- Sphinx sur ce qui me donne un joli texte complet du moteur, donc c'est une nécessité. [Sur Cassandra, la Lucandra projet semble répondre à ce besoin]
Mon problème majeur est que les lectures de données sont extrêmement lents (et l'écrit ne sont pas chaud non plus). Je ne veux pas jeter beaucoup d'argent et de matériel sur ce droit maintenant, et je préfère quelque chose qui peut évoluer facilement avec le temps. Verticalement mise à l'échelle de MySQL n'est pas anodin dans ce sens (ou pas cher).
Donc, essentiellement, après avoir beaucoup lu sur le NOSQL et expérimenté avec des choses comme MongoDB, Cassandra et Voldemort, mes questions sont,
-
Sur un support instance EC2, aurais-je obtenir des avantages dans les lectures/écritures en optant pour quelque chose comme Cassandra? Cet article (pdf) semble suggérer que. Actuellement, je dirais quelques centaines écrit par minute serait la norme. Pour les lectures - depuis les modifications de données toutes les 5 minutes ou ainsi, l'invalidation du cache doit arriver assez rapidement. À un certain point, il doit être capable de gérer un grand nombre d'utilisateurs simultanés ainsi. Les performances de l'application actuellement se fait tuer sur MySQL de faire certaines jointures sur de grandes tables, même si des index sont créés - quelque chose de l'ordre de 32 ko lignes prend plus d'une minute à rendre. (Cela peut être un artefact de l'EC2 virtualisé I/O ainsi). La taille des tableaux est d'environ 4-5 millions de lignes, et il y a environ 5 ces tableaux.
-
Tout le monde parle de l'utilisation de Cassandra sur plusieurs nœuds, étant donné le théorème CAP et la cohérence des résultats. Mais, pour un projet qui commence tout juste à croître, t-il un sens
pour déployer un nœud serveur de cassandra? Existe-il des mises en garde? Par exemple, peut-il remplacer MySQL comme un backend pour Django? [Est-ce recommandé?] -
Si je fais maj, je devine que je vais avoir à réécrire une partie de l'application pour le faire beaucoup plus "administrivia" depuis que j'aurais du faire plusieurs recherches pour extraire des lignes.
-
Serait-il aucun sens d'utiliser MySQL comme une valeur de la clé de magasin plutôt qu'un moteur relationnel, et d'aller avec qui? De cette façon, je pourrais utiliser un grand nombre de la stabilité des Api disponibles, ainsi qu'un moteur stable (et aller relationnel que nécessaire). (Brett Taylor poste de Friendfeed sur ce - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
Des idées de gens qui ont fait une maj serait grandement apprécié!
Grâce.
- Découvrez ce Django projet de Cassandra si vous êtes intéressé: github.com/vaterlaus/django_cassandra_backend
- Je suis assez curieux de savoir si vous avez fini de commutation à Cassandra. Je suis déjà sur la route de commutation à partir de php et asp.net pour django, mais je ne suis pas sûr si c'est prématuré de se déplacer à partir de mssql et mysql pour Cassandra droit maintenant. J'ai aussi des centaines d'enregistrements par seconde venue dans.
- J'utilise cassandra pour une tâche très spécifique où il travaille maintenant bien. J'ai réalisé que de l'utiliser pour le "déménagement" de bases de données est probablement pas une bonne idée, et mes résultats permettent de valider que (je suis d'accord avec codemonkey la réponse ci-dessous). Donc, si vous voulez vraiment vite écrit, de la recherche et de données dénormalisés et vous souhaitez mettre à l'échelle, Cassandra est une très bonne option. (Le premier chiffre serait de dire, quelques millions écrit une minute!)
- J'ai migré mon application dans le développement de cassandra pour mysql, après plus d'une année de travail..
- Voir stackoverflow.com/questions/18462530/...
Vous devez vous connecter pour publier un commentaire.
Cassandra et les autres bases de données distribuées disponibles aujourd'hui ne donnent pas le genre de requêtes ad-hoc support vous sont utilisés à partir de sql. C'est parce que vous ne pouvez pas distribuer les requêtes avec des jointures performantly, de sorte que l'accent est mis sur la dénormalisation de la place.
Cependant, Cassandra 0.6 (bêta officiellement demain, mais vous pouvez créer à partir de 0,6 direction de vous-même si vous êtes impatient) prend en charge Hadoop map/reduce pour analytics, qui sonne comme un bon ajustement pour vous.
Cassandra fournit un excellent support pour l'ajout de nouveaux nœuds sans douleur, même pour un groupe initial d'un.
Cela dit, à quelques centaines écrit/minute, vous allez être beaux sur mysql pour un long, long temps. Cassandra est beaucoup mieux d'être un magasin de clé/valeur (encore mieux, clé/columnfamily) mais MySQL est beaucoup mieux d'être une base de données relationnelle. 🙂
Il n'y a pas de django soutien pour Cassandra (ou autres bases de données nosql) pour le moment. Ils parlent de faire quelque chose pour la prochaine version après version 1.2, mais basé sur de parler de django devs à pycon, personne n'est vraiment sûr de ce que cela va ressembler encore.
Si vous êtes un développeur de base de données relationnelle (que je suis), je vous suggère de/point de:
Dit ces choses, je vous recommande fortement de construction quelque chose de Cassandra. Si vous êtes comme moi, alors le faire vous mettra au défi votre compréhension de stockage de données et de vous faire réfléchir un relationnel de base de données s'adapte à toutes les situations outlook que je ne savais même pas que j'ai occupé.
Quelques bonnes ressources que j'ai trouvé inclure:
Django-cassandra est un début de mode bêta. Aussi Django n'est pas fait pour non-bases de données sql. La clé dans l'ORM de Django est basé sur SQL (Django recommande d'utiliser PostgreSQL). Si vous devez utiliser UNIQUEMENT le no-sql (vous pouvez mélanger sql et no-sql dans la même application), vous devez risqué d'utiliser no-sql ORM (c'est nettement plus lent que les traditionnels SQL orm ou de l'utilisation directe de la No-SQL de stockage). Ou vous aurez besoin de complètement réécriture complète de l'ORM de django. Mais dans ce cas je ne peux pas présumer, pourquoi vous avez besoin de Django. Peut-être que vous pouvez utiliser quelque chose d'autre, comme une Tornade?