Java MongoDB数据模型支持每个事件、每个日期范围的唯一访问者
我有多个网站,每个网站都有“触发”我想要跟踪的多个事件的访问者。我有一个所有网站的事件日志,每个事件都有网站id、事件名称和进行事件的用户id(为了简单起见,假设就是这样) 要求:Java MongoDB数据模型支持每个事件、每个日期范围的唯一访问者,java,mongodb,aggregation-framework,Java,Mongodb,Aggregation Framework,我有多个网站,每个网站都有“触发”我想要跟踪的多个事件的访问者。我有一个所有网站的事件日志,每个事件都有网站id、事件名称和进行事件的用户id(为了简单起见,假设就是这样) 要求: 能够得到,每个网站id和事件名称,有多少独特的访客得到它 这还应该支持日期范围(范围上的独特访客) 我正在考虑使用以下数据模型(例如)为每个“网站id”创建一个集合: 集合ev{websiteId}: [ { _id:“错误” 每日统计:[ { _id:20121005对当前上述架构的评论很少 正如您所指出的,我有点
集合ev{websiteId}:
[
{
_id:“错误”
每日统计:[
{
_id:20121005对当前上述架构的评论很少
正如您所指出的,我有点担心可伸缩性以及您真正在做多少预聚合
在执行度量时,我使用过的大多数Mongo实例都与您指出的情况类似,但您似乎确实非常依赖于对单个文档进行更新,并升级文档的各个部分,这将减慢速度,并可能导致一点锁定
我可能会建议一条不同的路径,Mongo甚至在与他们讨论度量时建议了这条路径。鉴于你已经有了一个你想要做的结构,我会按照以下思路创建一些东西:
{
"_id":"20121005_siteKey_page",
"hits":512,
"users":[
{
"uid":5,
"hits":512,
}
}
通过这种方式,您可以将文档大小限制在合理的范围内,以便快速升级。从这里开始,您可以批量执行mapreduce作业,以进一步扩展您希望看到的内容
这还取决于您的最终目标,您是否希望提供实时指标?您试图获得什么样的粒度?Redis地图可能是您至少想看的东西:很棒的文章
不管怎样,这是一个有趣的问题要解决:)
希望这有所帮助!对当前的上述体系结构没有什么评论
正如您所指出的,我有点担心可伸缩性以及您真正在做多少预聚合
在执行度量时,我使用过的大多数Mongo实例都与您指出的情况类似,但您似乎确实非常依赖于对单个文档进行更新,并升级文档的各个部分,这将减慢速度,并可能导致一点锁定
我可能会建议一条不同的路径,Mongo甚至在与他们讨论度量时建议了这条路径。鉴于你已经有了一个你想要做的结构,我会按照以下思路创建一些东西:
{
"_id":"20121005_siteKey_page",
"hits":512,
"users":[
{
"uid":5,
"hits":512,
}
}
通过这种方式,您可以将文档大小限制在合理的范围内,以便快速升级。从这里开始,您可以批量执行mapreduce作业,以进一步扩展您希望看到的内容
这还取决于您的最终目标,您是否希望提供实时指标?您试图获得什么样的粒度?Redis地图可能是您至少想看的东西:很棒的文章
不管怎样,这是一个有趣的问题要解决:)
希望这有帮助