2010-08-18 7 views
2

J'ai un système qui recueille des données de journal Apache en temps réel d'environ 90-100 serveurs Web. J'avais aussi défini quelques motifs d'URL.Quelle est la meilleure base de données/stockage pour stocker des données statistiques?

Maintenant je veux construire un autre système qui met à jour l'heure de l'occurrence de chaque modèle basé sur ces journaux.

j'avais pensé à utiliser MySQL pour stocker des données statistiques, les mettre à jour par la déclaration: "Mise à jour table mis count = count + 1 où ....",

mais je crains que MySQL sera lent pour les données d'un tel nombre de serveurs. De plus, je recherche des solutions de bases de données/de stockage plus évolutives et simples. (En tant que SGBDR, MySQL supporte trop de choses dont je n'ai pas besoin dans cette situation). Avez-vous une idée ?

Répondre

1

Apache CassandraApache Cassandra est un magasin de colonnes à haute performance et peut très bien évoluer. La courbe d'apprentissage est un peu raide, mais cela ne posera aucun problème pour gérer de grandes quantités de données.

Une solution plus simple serait un magasin de valeurs-clés, comme Redis. C'est plus facile à comprendre que Cassandra. Redis semble uniquement prendre en charge la réplication maître-esclave comme moyen de mise à l'échelle. Les performances en écriture de votre serveur maître peuvent donc être un goulot d'étranglement. Riak a une architecture décentralisée sans aucun nœud central. Il n'a pas de point de défaillance unique ni de goulot d'étranglement, il est donc plus facile de le faire évoluer.

+2

Redis sera la solution parfaite car elle fournit des opérations d'incrémentation atomique pour protéger de la course conditions. Cassandra et Riak ne supportent pas cette fonctionnalité qui rendra difficile la mise à jour correcte des données. –

0

Le stockage de valeur clé semble être une solution appropriée pour mon système. Après avoir pris un coup d'œil sur ces depots, je suis INQUIETER question condition de course, car il y aura beaucoup de clients qui essaient de faire ces étapes sur la même clé:

  1. count = storage.get (clé)
  2. storage.set (clé, compte + 1)

J'avais travaillé avec Tokyo Cabinet avant, et ils ont « addint » méthode qui correspondait parfaitement à mon cas, je me demande si d'autres ont une fonction similaire mémoires ? Je n'ai pas choisi Tokyo Cabinet/Tyrant parce que j'avais rencontré des problèmes d'évolutivité et de stabilité des données (par exemple réparation de données corrompues, ...)

+0

Redis le supporte avec la commande [INCR] (http://code.google.com/p/redis/wiki/IncrCommand), ce qui n'est pas le cas de Riak. MongoDB est une autre alternative, si vous avez besoin d'incrémenter de manière atomique une valeur, car il a l'opérateur [$ inc] (http://www.mongodb.org/display/DOCS/Updating#Updating-%24inc). Sur une note différente: sur Stack Overflow vous devriez utiliser des commentaires pour poser des questions, au lieu de réponses :) (voir FAQ) –

+0

Merci Niels, j'ai essayé d'utiliser Comment. Mais StackOverFlow ne me permet pas d'avoir un 'newline' pour commenter. C'est pourquoi j'utilise le mode réponse, j'espère que SOF le soutiendra bientôt. MongoDB a l'air bien, il y a aussi un grand changement d'extensibilité (mode sharding) dans la version 1.6. Je vais essayer. – fang

Questions connexes