gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:34 24 4
gpt4 key购买 nike

我有多个网站,每个网站都有“触发”我想要跟踪的多个事件的访问者。我有来自所有网站的这些事件的日志,每个事件都填充了网站 ID、事件名称和执行该事件的用户 ID(为了简单起见,就这样吧)。

要求:

  1. 能够根据网站 ID 和事件名称获取有多少唯一身份访问者获得该信息。
  2. 这还应支持日期范围(该范围内的不同唯一访问者)。

我正在考虑使用以下数据模型为每个“website-id”创建一个集合(作为示例):

collection ev_{websiteId}:
[
{
_id: "error"
dailyStats: [
{
_id: 20121005 <-- (yyyyMMdd int, should be indexed!)
hits: 5
users: [
{
_id: 1, <-- should be indexed!
hits: 1
},
{
_id: 2
hits: 3
},
{
_id: 3,
hits: 1
}
]
},
{
_id: 20121004
hits: 8
users: [
{
_id: 1,
hits: 2
},
{
_id: 2
hits: 3
},
{
_id: 3,
hits: 3
}
]
},
]
},
{
_id: "pageViews"
dailyStats: [
{
_id: 20121005
hits: 500
users: [
{
_id: 1,
hits: 100
},
{
_id: 2
hits: 300
},
{
_id: 3,
hits: 100
}
]
},
{
_id: 20121004
hits: 800
users: [
{
_id: 1,
hits: 200
},
{
_id: 2
hits: 300
},
{
_id: 3,
hits: 300
}
]
},
]
},
]

我使用 _id 来保存事件 ID。我使用 dailyStats._id 来保存事件发生的时间(yyyyMMdd 格式的整数)。我使用 dailySattes.users._id 来表示用户的唯一 ID 哈希值。

为了获得唯一的用户,我基本上应该能够在给定的日期范围内运行(mapreduce?)数组中不同数量的项目(我会将日期范围转换为 yyyyMMdd)。

我的问题:

  1. 这个数据模型对您有意义吗?我担心这个模型随着时间的推移的可扩展性(如果我在某个客户端中有很多每日唯一访问者,它会导致一个巨大的文档)。我正在考虑按 _id < [date as yyyyMMdd] 删除 dailyStats 文档。这样我就可以将文档大小保持在一个合理的范围内,但仍然存在限制。
  2. 是否有一种简单的方法来运行“upsert”,同时创建 dailyStats(如果尚未创建)、添加用户(如果尚未创建)并增加两者的“hits”属性?
  3. map-reduce 怎么样?您将如何处理它(需要在给定日期范围内的所有子文档的 users._id 上运行不同的操作)?新的聚合框架有更简单的方法吗?

顺便说一句 - 解决唯一访问者问题的另一个选择是使用 Redis 位图,但我不确定它是否值得保留多个数据存储(维护方面)。

最佳答案

对当前上述架构的评论很少。

我有点担心,因为您已经指出了可扩展性以及您实际执行的预聚合程度。

我在做指标时使用的大多数 Mongo 实例都与您指出的情况类似,但您似乎确实严重依赖于对单个文档进行更新并更新插入它的各个部分,这会减慢速度并可能导致一些锁定..

我可能会建议一条不同的路径,Mongo 甚至在与他们讨论制定指标时建议的路径。鉴于您已经拥有了您想要做的结构,我将创建以下内容:

{
"_id":"20121005_siteKey_page",
"hits":512,
"users":[
{
"uid":5,
"hits":512,
}
}

通过这种方式,您可以将文档大小限制为可以合理进行快速更新插入的大小。从这里您可以批量执行 MapReduce 作业,以进一步扩展您想要看到的内容。

这还取决于您的最终目标,您是否希望提供实时指标?您试图获得什么样的粒度? Redis map 可能是您至少想看看的东西:很棒的文章 here .

无论如何,解决这个问题都是一个有趣的问题:)

希望这对您有所帮助!

关于java - MongoDB 数据模型支持每个事件、每个日期范围的唯一访问者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com