【问题标题】:Mongodb Schema for handling visitor data用于处理访问者数据的 Mongodb Schema
【发布时间】:2014-01-27 16:20:01
【问题描述】:

我目前正在使用 MongoDB 进行设置并存储访问者信息。例如,假设我拥有某个日期范围内访问您网站的每位访问者的信息。我想将该信息存储在数据库中。

目前我将它存储在 mongo 中,如下例所示。我真的有两个问题:

  • mongo 是解决这个问题的最佳方案吗[我曾考虑使用 couchdb,mysql 可以,但对于高流量站点,QPS 会成为瓶颈]?
  • 将唯一访问者存储在文档中 [每个日期都分配有访问者] 是否是一个好主意,因为 16mb 是最大文档大小,而不是简单地将每个访问者存储为自己的文档?

架构:

Visitor
    Non unique id
    Date
    Visitors --array[could contain up to millions of visitors[daily visitors]]
         source
         keyword
         city
         state
         country
         page_views
         etc.......

【问题讨论】:

    标签: php mysql mongodb


    【解决方案1】:

    mongo 是最好的解决方案吗

    没有。原因有很多,但最大的原因是文档的大小。

    一段时间后,该文档可能会增长到接近 16MB 的限制。这意味着将其从磁盘加载到您的工作集中不仅耗时而且效率低下。

    您会做得更好,因为您实际上已经使用每个访问者一个文档。

    如果您希望文档加载更快,您实际上希望它们更小,这样磁盘读取更小,IO 更小,使用的资源更少。

    此外,由于我怀疑您是否希望所有访问者(将使用单个文档设置加载),那么您还将拥有不需要的数据填充 RAM。

    按现在的方式存储,您可以根据需要选择性地加载访问者,而 IO 开销非常小,因此我保证您采用的替代方案:

    是的,我最终为每个访问者创建了一个文档,因为我们将允许人们对用户运行过滤器并删除某些访问者

    【讨论】:

    • 感谢您的见解,似乎工作得很好
    【解决方案2】:

    如果您仅将 IP 地址存储在 Visitors 数组中,并使用最大长度为 45 个字符的人类可读表示,那么您可以在单个文档中容纳多达 372,827 位访问者。因此,如果您每天的访问量超过这个数量,您可以获得 VC 资金并重写您的应用程序(开个玩笑)。一种选择是将数据存储在块中。您可以在此类文档中维护一个计数器,并且每当您接近此最大数量时,您都可以创建一个新文档。这有点难以维护,因此另一种选择是将数据分成几小时或几分钟(如果需要)。

    我认为不值得将每个访问者存储在单独的顶级文档中,除非您计划在该记录中存储更多信息并分析该访问者访问过的内容等。这取决于您要如何处理这些数据。

    出于日志记录和视图计数的目的,我会选择一个大数组。出于业务分析目的,我会为每个访问者选择 1 个文档。

    【讨论】:

    • 是的,我最终为每个访问者提供了一个文档,因为我们将允许人们对用户运行过滤器并删除某些访问者
    猜你喜欢
    • 2012-03-09
    • 2014-12-02
    • 2012-07-08
    • 1970-01-01
    • 2018-12-30
    • 2016-06-11
    • 2018-03-15
    • 2015-06-29
    • 2017-11-17
    相关资源
    最近更新 更多