2012-12-08 5 views
2

Je suis en train de créer une application avec Nodejs et Mongodb pour analyser Stackoverflow pour trouver du nouveau contenu, trouver des sujets chauds et tendance, et je dois savoir comment le faire, parce que je ne suis pas sûr. Je le fais correctement car je viens de MySQL et mon instinct me dit qu'il y a quelque chose de différent ici. Je ne suis pas en train de scanner Stackoverflow, c'est juste facile à utiliser comme analogie, mais j'ai quand même des messages, j'ai des commentaires, et les utilisateurs qui ont posté le fil (sans tenir compte des utilisateurs qui ont posté des commentaires atm).Collecte de données statistiques avec MongoDB

Ma solution initiale était de créer trois tables (collections):

  • Messages - où je stocke toutes les informations sur le poste
  • Statistiques Post - où je stocke toutes les informations dynamiques sur la poste (numéro des commentaires, note globale, etc ') une fois toutes les X minutes
  • utilisateurs - où je stocke des informations sur les utilisateurs qui ont posté les messages

Essentiellement, je veux être capable d'interroger la base de données avec "Donnez-moi les meilleurs utilisateurs d'aujourd'hui", et "donnez-moi l'histoire de ce poste" pour créer une sorte de graphique comment ce poste s'est comporté (classé, marqué, commenté, etc ') au fil du temps.

Quelle est la bonne façon de faire quelque chose comme ça avec Mongodb? Devrais-je stocker les statistiques de publication dans les documents de publication?

Répondre

0

Je choisirais personnellement une solution hybride ici.

Il est inévitable que vous vouliez un certain type de données agrégées sur le post pour toujours. Donc, dans le post j'abriterait un sous-document supplémentaire qui contient des statistiques pour tous les temps:

stats: { 
    views: 456, // Just an example 
    vote_ups: 5, 
    vote_downs: 4, 
    rank: 1, // vote ups minus vote downs 
    comments: 5, 
    answers: 6 
} 

Ensuite, pour différentes périodes de temps j'utiliser post_stats la façon dont vous expliquer la création d'un tel document:

{ 
    post_id: 45, 
    // etcera for minute by minute changes 
    time: ISODate() 
} 

En utilisant le post_id (ou _id plutôt) pour demander le graphique que vous souhaitez faire. Puisque MongoDB est bien à l'échelle horizontalement, vous en profiterez pleinement ici.

Questions connexes