2010-07-08 4 views
0

Dans notre application Web, nous devons suivre ce que les utilisateurs cliquent, ce qu'ils écrivent dans la boîte de recherche, etc. Beaucoup de données seront envoyées par AJAX. En général, la fonctionnalité est un peu similaire à google analytics, mais nous devons la personnaliser de différentes manières.Quel NoSQL backend pour stocker des données de trace à partir de la page Web

Les données seront collectées et une fois par jour agrégées et exportées vers PostgreSQL, de sorte que backend devrait être capable de gérer des dizaines d'insertions. Je ne considère pas l'utilisation de la base de données SQL traditionnelle, car probablement il ne traitera pas autant d'insertions efficacement.

Je me demande quel backend utiliseriez-vous pour une telle tâche? En fait je pense à MongoDB ou à Cassandra. Mais peut-être connaissez-vous un meilleur logiciel pour cette tâche? Peut-être quelque chose de différent que la base de données NoSQL?

L'application Web est écrite en Ruby on Rails, donc le support pour Ruby serait bien mais ce n'est certainement pas le plus important.

Répondre

1

Vous semblez avoir besoin d'analyser vos besoins spécifiques.

Il se peut que la meilleure solution soit de diviser/partitionner/partitionner une base de données classique, puis de pousser les données à partir de là. En fonction de votre tolérance à la perte de données, il existe de nombreuses options. Si vous choisissez un système qui a une durabilité à serveur unique, une source majeure de goulot d'étranglement en écriture sera fdatasync() (en supposant que vous utilisez des disques durs pour stocker vos données).

Si vous pouvez tolérer une synchronisation moins souvent que sur chaque validation, vous pourrez peut-être paramétrer votre base de données pour valider à intervalles réguliers. En fonction de votre table, de votre structure d'index etc, je m'attendrais à ce que vous obteniez beaucoup d'insertions avec un db "conventionnel" (par exemple, postgresql), si vous le gérez correctement et si vous le souhaitez ça) à votre goût. Le fait de scinder ceci en plusieurs instances vous permettra bien entendu de l'agrandir. Toutefois, vous devez tenir compte des exigences opérationnelles (c'est-à-dire, que se passe-t-il si certaines instances sont arrêtées)? Parlez à votre équipe Ops de ce qu'ils sont à l'aise de gérer.

+0

Merci pour la réponse. Pour cette tâche, j'ai besoin de performance sur la durabilité. Cependant, j'ai peur que même avec un intervalle de synchronisation élevé RDMBS passera encore un peu de temps à gérer les transactions, les contraintes et ainsi de suite. Ici, nous irons seulement 1 table avec 4 colonnes donc je voudrais me débarrasser de ACID. Quoi qu'il en soit, je vais comparer cette solution aux autres. – mlomnicki

+0

Vous devez diviser les opérations: recevoir (service spécial) envoyer des données au service de stockage, ce service stocke les données dans RDMBS et envoyer le signal à un autre service à des fins de traitement. En tant que pipeline, vous pouvez utiliser MSMQ ou autre solution durable. – dariol

Questions connexes