Je recherche actuellement sur un revue à utiliser pour un projet avec des exigences en matière d'agrégation de données exigeante. Les principales exigences du projet sont les suivantes. p>
stocker des millions d'enregistrements pour chaque utilisateur. Les utilisateurs peuvent avoir plus de 1 million d'entrées par an, donc même avec 100 utilisateurs, nous parlons de 100 millions d'entrées par an. P> li>
L'agrégation de données sur ces entrées doit être effectuée à la volée. Les utilisateurs doivent pouvoir filtrer sur les entrées par une tonne de filtres disponibles, puis présenter des résumés (totaux, moyennes e.t.c) et des graphiques sur les résultats. De toute évidence, je ne peux pas précalculer les résultats d'agrégation car les combinaisons de filtres (et ainsi les ensembles de résultats) sont énormes. P> li>
Les utilisateurs vont avoir accès à leurs propres données, mais ce serait bien si les statistiques anonymes pouvaient être calculées pour toutes les données. p> li>
Les données vont être la plupart du temps en lot. E.g L'utilisateur téléchargera les données tous les jours et pourrait aimer 3000 enregistrements. Dans une version ultérieure, il pourrait y avoir des programmes automatisés qui téléchargent toutes les quelques minutes dans des lots plus petits de 100 articles par exemple. P> LI> ol>
J'ai fait un test simple de créer une table avec 1 million de lignes et effectuer une simple somme de 1 colonne à MongoDB et dans MySQL et la différence de performance était énorme. Je ne me souviens pas des nombres exacts mais c'était quelque chose comme MySQL = 200ms, MongoDB = 20 sec. p>
J'ai également fait le test avec Couchdb et j'ai eu des résultats bien pires. p>
Qu'est-ce qui semble prometteur sage sage est Cassandra que j'étais très enthousiaste lorsque je l'ai découvert. Cependant, la documentation est rare et je n'ai trouvé aucun exemple de solide sur la manière d'effectuer des sommes et d'autres fonctions globales sur les données. Est-ce possible? P>
Comme cela semble de mon test (peut-être que j'ai fait quelque chose de mal) avec la performance actuelle, il est impossible d'utiliser MongoDB pour un tel projet, bien que la fonctionnalité de frastation automatisée semble une ajustement parfaite. p>
Quelqu'un a-t-il de l'expérience avec l'agrégation de données dans MongoDB ou a des idées qui pourraient être utiles pour la mise en œuvre du projet? P>
merci, Dimitris p>
4 Réponses :
Si vous recherchez un SGBD très performant et n'en avez pas besoin pour être relationnel, vous pouvez envisager Cassandra - bien que ses avantages entrent uniquement en jeu si vous avez un cluster de base de données au lieu d'un seul noeud. p>
Vous n'avez pas dit quelles limites il y a sur l'architecture physique. Vous avez mentionné un fragment qui implique un groupe. Les clusters de MySQL IIRC soutiennent aussi le frisson. P>
Il serait également très utile de savoir quel niveau de concurrence auquel le système est destiné à prendre en charge et comment les données seront ajoutées (goutte à gouttes ou lot). P>
Vous dites "évidemment, je ne peux pas précalculer aucun des résultats d'agrégation car les combinaisons de filtres (et donc les ensembles de résultats) sont énormes." P>
C'est votre plus gros problème et sera le facteur le plus important dans la détermination des performances de votre système. Bien sûr, vous ne pouvez pas maintenir des vues matérialisées de toutes les combinaisons possibles, mais votre plus grande victoire de performances consiste à maintenir des vues pré-agrégées limitées et à construire un optimiseur pouvant trouver le match le plus proche. Ce n'est pas tout ce difficile. P>
c. p>
Salut, merci pour la réponse. J'ai mis à jour mon message d'origine avec quelques informations supplémentaires. Votre dernier commentaire sur les vues pré-agrégées et l'optimiseur de match le plus proche est de ce que j'ai pensé à faire lors de la recherche du projet. Mon problème est que je n'ai aucune idée de la façon d'y aller et d'où commencer. Chaque enregistrement aura de nombreux indicateurs qui seront utilisés comme filtres plus l'utilisateur pourront filtrer par intervalles de date arbitraires. Ensuite, sur le jeu de résultats, je devrais calculer une tonne de moyennes de moyenne et compte. Combien de fois ce drapeau était vrai e.t.c plus aucun point d'ouverture apprécié
Je n'ai jamais été impressionné par la performance de MongoDB dans les cas d'utilisation où JavaScript est requis, par exemple des tâches de carte. Peut-être que c'est mieux en 1.51. Je n'ai pas essayé. p>
Vous pouvez également essayer l'édition de nœuds unique gratuite de Greenplum: http: // www. greenplum.com/products/single-node/ et http://www.dbms2.com/2009/10/19/greenplum-free-single-node-edition/ p>
Merci. Le lien Greenplum était très serviable depuis que j'ai découvert qu'il y a beaucoup de dbs là-bas comme Greenplum optimisé pour ce que je dois faire. Analyses de données massives. Un autre est Infobright qui se branche sur MySQL et semble prometteur.
ou peut-être hadoop ( http://hadoop.apache.org/ ) ou hadoopdb ( http://db.cs.yale.edu/hadoopdb/hadoopdb.html ) ? p>
Si une somme simple de 1 million de documents a pris 20 secondes à Mongo, vous n'avez probablement pas assez de RAM. C'est important avec Mongo que vous pouvez maintenir l'ensemble de l'ensemble de données en mémoire ou en performance en souffrira. Vous n'avez pas mentionné comment vous avez fait le compte, c'est peut-être un problème avec votre carte Réduire le code? Il y a juste trop peu de détails pour dire ce que le problème est, mais j'ai fait une carte plus compliquée réduit avec une commande une ampleur plus de documents qui prenaient moins de temps sur mon ordinateur portable p>