Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB数据模型支持每个事件、每个日期范围的唯一访问者_Java_Mongodb_Aggregation Framework - Fatal编程技术网

Java MongoDB数据模型支持每个事件、每个日期范围的唯一访问者

Java MongoDB数据模型支持每个事件、每个日期范围的唯一访问者,java,mongodb,aggregation-framework,Java,Mongodb,Aggregation Framework,我有多个网站,每个网站都有“触发”我想要跟踪的多个事件的访问者。我有一个所有网站的事件日志,每个事件都有网站id、事件名称和进行事件的用户id(为了简单起见,假设就是这样) 要求: 能够得到,每个网站id和事件名称,有多少独特的访客得到它 这还应该支持日期范围(范围上的独特访客) 我正在考虑使用以下数据模型(例如)为每个“网站id”创建一个集合: 集合ev{websiteId}: [ { _id:“错误” 每日统计:[ { _id:20121005对当前上述架构的评论很少 正如您所指出的,我有点

我有多个网站,每个网站都有“触发”我想要跟踪的多个事件的访问者。我有一个所有网站的事件日志,每个事件都有网站id、事件名称和进行事件的用户id(为了简单起见,假设就是这样)

要求:

  • 能够得到,每个网站id和事件名称,有多少独特的访客得到它
  • 这还应该支持日期范围(范围上的独特访客)
  • 我正在考虑使用以下数据模型(例如)为每个“网站id”创建一个集合:

    集合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地图可能是您至少想看的东西:很棒的文章

    不管怎样,这是一个有趣的问题要解决:)

    希望这有帮助