我目前正在使用MongoDB进行设置并存储访问者信息。例如,假设我有关于在日期范围内访问过您网站的每位访问者的信息。我想将这些信息存储在数据库中。
目前我将它存储在mongo中,如下例所示。我真的有两个问题:
架构:
Visitor
Non unique id
Date
Visitors --array[could contain up to millions of visitors[daily visitors]]
source
keyword
city
state
country
page_views
etc.......
答案 0 :(得分:2)
mongo是否是最佳解决方案
没有。原因很多,但最大的原因是文档的大小。
一段时间后,该文档可能会增长到接近16MB的限制。这意味着将它从磁盘加载到您的工作集中不仅耗费时间,而且效率低下。
你会做得更好,就像你实际上一样,每位访客都有一份文件。
如果你希望你的文档加载速度更快,你实际上希望它们更小,磁盘读取更小,反过来IO更小,反而使用更少的资源。
此外,由于我怀疑你会想要所有访问者(可以加载单个文档设置),那么你也可以拥有你不需要的数据填充RAM。
现在存储你可以根据需要有选择地加载访问者,而且只需要很少的IO开销,我保证你已经采取了替代方案:
是的,我最终得到了每位访问者的文档,因为我们将允许用户对用户运行过滤器并删除某些访问者
答案 1 :(得分:1)
如果您仅在Visitors
数组中存储IP地址,并使用最大长度为45个字符的人类可读表示,那么您可以在一个文档中容纳最多372,827个访问者。因此,如果您每天获得的访问人数超过此数量,您可以获得VC资金并重写您的应用程序(只是开玩笑)。一种选择是以块的形式存储数据。您可以在此类文档中维护单个计数器,只要接近此最大数量,您就可以创建新文档。这有点难以维护,因此另一种选择是将数据分成几小时或几分钟(如果必须的话)。
我认为将每个访问者存储在单独的顶级文档中是不值得的,除非您计划在该记录中存储更多信息并分析访问者访问的内容等。取决于您对此数据的处理方式。< / p>
对于记录目的和视图计数,我会选择一个大数组。出于业务分析的目的,我会为每个访问者选择1个doc。