我目前正在计划开发一项服务,该服务应处理大量请求,并且每个请求都会进行一些日志记录。 每个日志将具有以下形式
{event: "EVENTTYPE", userid: "UID", itemid: "ITEMID", timestamp: DATETIME}
我希望能够完成大量的写作,而阅读和分析每小时只会进行一次。
数据分析中的一个要求是我必须能够执行以下查询: 是否为用户(UID)记录了项目(ITEMID)上的事件A和B? (甚至可以根据时间戳告诉事件A是否在事件B之前出现)
我已经将MongoDB视为我的存储解决方案。
有关我将要使用的数据的一些信息: 我希望平均每天记录10,000次活动。 我还没有决定,数据是否应该无限期存储。
答案 0 :(得分:0)
是否为用户(UID)记录了项目(ITEMID)上的事件A和B? (甚至可以根据时间戳告诉事件A是否在事件B之前出现) 可以通过MongoDB聚合框架(正确)执行上述查询吗?
是的,绝对的。您可以使用$group
运算符按ITEMID,UID汇总事件,您可以在分组之前通过$match
过滤结果以将其限制为特定时间段,或者使用任何其他过滤器,您可以推送每种类型事件的时间(第一个,最后一个)到$group
运算符创建的文档中。然后,如果您愿意,可以使用$project
创建一个字段,指示之前的内容。
聚合框架的所有功能都在这里概述:
http://docs.mongodb.org/manual/core/aggregation-pipeline/
将来我可能会加入分析 步骤,从ITEMID到ITEM.Categories的关系(我有一个 项目集合,每个项目都有一系列类别)。 知道事件A的次数可能会很有趣 发生在按个别项目类别分组的项目上 过去30天。那么MongoDB是否适合我的要求?
是。 MongoDB中的聚合允许您使用$unwind
数组,以便您可以根据需要按类别对事物进行分组。使用聚合框架很容易实现您所描述的所有内容。
MongoDB是否是您的应用程序的正确选择超出了本网站的范围,但您在此问题中列出的要求可以在MongoDB中实现。