2014-05-20 4 views
0

Je suis en train de planifier le développement d'un service qui devrait gérer une quantité importante de requêtes et pour chaque requête faire un peu de journalisation. Chaque journal aura la forme suivanteUtilisation de NoSQL sur des données avec peu de relations

{event: "EVENTTYPE", userid: "UID", itemid: "ITEMID", timestamp: DATETIME} 

Je pense que beaucoup d'écriture se fera, lors de la lecture et l'analyse ne sera effectué une fois par heure.

Une exigence dans l'analyse des données est que je dois être en mesure d'effectuer la requête suivante: Les deux événements, A et B, sur l'élément (ITEMID) sont-ils enregistrés pour l'utilisateur (UID)? (Peut-être même dire si l'événement A est arrivé avant l'événement B en fonction de leur horodatage)

J'ai pensé à MongoDB comme solution de stockage.

  • La requête ci-dessus peut-elle (correctement) être réalisée par le framework d'agrégation MongoDB?
  • À l'avenir, je pourrais ajouter à l'étape de l'analyse, avec une relation de ITEMID à ITEM.Categories (j'ai une collection d'éléments, et chaque élément a une série de catégories). Il serait peut-être intéressant de savoir combien de fois l'événement A s'est produit sur les articles regroupés par catégorie d'articles individuels, au cours des 30 derniers jours. MongoDB sera-t-il alors un bon choix pour mes besoins?

Quelques informations sur les données avec lesquelles je vais travailler: Je m'attends à être connecté dans l'ordre de 10.000 événements par jour en moyenne. Je n'ai pas encore décidé si les données devraient être stockées indéfiniment.

  • Est-ce que MongoDB convient à mes besoins? Y a-t-il une autre base de données NoSQL qui répondra mieux à mes besoins? Est-ce que NoSQL est encore utilisable dans ce cas ou est-ce que je préfère coller avec des bases de données relationnelles?
  • Si mon exigence de la fréquence d'analyse change, disons de une fois par heure à temps réel. Je crois que Redis servirait mieux mon but que MongoDB, est-ce bien compris?
+0

Vous avez de bonnes intentions ici, mais vos questions globales sont beaucoup trop générales. Pouvez-vous réduire cela à quelque chose de spécifique qui convient mieux à une seule réponse? C'est généralement ce qui est requis de ce site. –

Répondre

0

sont tous les deux événements, A et B, sur le point (ITEMID) enregistrés pour l'utilisateur (UID)? (Peut-être même dire si l'événement A est arrivé avant l'événement B en fonction de leur horodatage) La requête ci-dessus peut-elle (correctement) être réalisée par le framework d'agrégation MongoDB?

Oui, absolument. Vous pouvez utiliser l'opérateur $group pour agréger les événements par ITEMID, UID, vous pouvez filtrer les résultats avant le regroupement via $match pour les limiter à une période spécifique, ou avec tout autre filtre, et vous pouvez pousser les temps (premier, dernier) de chaque type d'événement dans le document que l'opérateur $group crée. Ensuite, vous pouvez utiliser $project pour créer un champ indiquant ce qui est venu avant quoi, si vous le souhaitez.

Toutes les capacités du cadre d'agrégation sont bien décrites ici:

http://docs.mongodb.org/manual/core/aggregation-pipeline/

À l'avenir, je pourrais ajouter à l'analyse étape, avec une relation de ITEMID à Item.Categories (J'ai une collection d'articles , et chaque article a une série de catégories). Il serait peut-être intéressant de savoir combien de fois l'événement A s'est produit sur les éléments regroupés par catégorie d'articles, pendant les derniers 30 jours. MongoDB sera-t-il alors un bon choix pour mes besoins?

Oui. L'agrégation dans MongoDB vous permet de regrouper $unwind de sorte que vous puissiez grouper les choses par catégories, si vous le souhaitez. Toutes les choses que vous avez décrites sont faciles à accomplir avec le cadre d'agrégation.

Que MongoDB soit le bon choix pour votre application est en dehors de la portée de ce site, mais vous les exigences que vous avez énumérées dans cette question peuvent être implémentées dans MongoDB.

+0

Merci, Asya. Cela va certainement m'aider. – darkdark

Questions connexes