gpt4 book ai didi

mongodb - 使用 MongoDB 进行网站分析的数据库结构

转载 作者:可可西里 更新时间:2023-11-01 09:11:50 28 4
gpt4 key购买 nike

我开始在 MySQL 中为我正在进行的项目开发网站分析系统,但很快意识到它不足以满足我的需求(在可扩展性、速度等方面)。在做了相当多的研究之后,MongoDB 不断地成为不错的候选者,我唯一的问题是我没有这方面的经验,也不了解高性能/大型 MongoDB 数据库的最佳实践,就像我对 MySQL 所做的那样.

当用户访问网站时,需要记录标准信息(IP、浏览器信息、网站ID、URL、用户名)。它还需要记录用户访问的每个后续页面(当前时间戳,url)。如果用户离开网站并在 10 天后返回,它需要记录这次访问并记录它是返回用户(通过用户名标识)。

除了记录多个网站的访问(查看每秒添加的 500 条记录)之外,它还需要具有报告功能。我擅长制作图表等,但我需要知道如何有效地从数据库中提取数据。我希望能够提供每 15 分钟显示一次事件的图表,但如果更实用的话,一个小时就足够了。

作为一方认为,如果它能够在未来进行实时报告会很好,但这超出了当前项目的范围。

现在我已经阅读了 http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics 上的文章但它没有提到任何关于高流量网站的信息——据我所知,它可能只能处理几千条记录。我是遵循该帖子的概念并直接从该集合中提取报告,还是预先分析数据并将其存档到一个单独的集合中会更好?

如有任何关于数据插入、数据库结构和报告的想法,我们将不胜感激!

最佳答案

(MySQL) not going to be sufficient for my needs (in terms of scalability, speed etc)

嗯... facebook 似乎在很大程度上使用了 MySQL。说到 NoSQL,我认为它不一定是技术,而是数据结构和算法。


您面临的是潜在的高写入吞吐量情况。一种非常适合您的问题的高写入吞吐量方法是 sharding :无论机器有多大,软件的效率有多高,单台机器所能处理的写入数量都是有限的。分片将数据拆分到多个服务器,因此您可以写入不同的服务器。例如,用户 A-M 写入服务器 1,用户 N-Z 写入服务器 2。

现在,分片是以复杂性为代价的,因为它需要平衡,跨所有分片的聚合可能很棘手,您需要维护多个独立的数据库等。

这是技术问题:MongoDB 分片相当简单,因为它们支持自动分片,自动分片可以为您完成大部分讨厌的事情。我不认为您需要每秒 500 次插入的速度,但很高兴知道它在那里。

对于模式设计,重要的是要考虑 shard key ,这将用于确定哪个分片负责文档。这可能取决于您的流量模式。假设您有一个经营集市的用户。一年一次,他的网站完全崩溃,但 360 天它都是流量较低的网站之一。现在,如果您对 CustomerId 进行分片,则该特定用户可能会导致问题。另一方面,如果您在 VisitorId 上进行分片,则必须为一个简单的 count() 命中每个分片。

分析部分在很大程度上取决于您要支持的查询。货真价实slice&dice我想说的是相当具有挑战性,特别是如果你想支持近实时分析。一种更简单的方法是限制用户的选项,只提供一小组操作。这些也可以缓存,因此您不必每次都进行所有聚合。

一般来说,分析可能很棘手,因为有许多特征需要关系。例如,同类群组分析将要求您仅考虑由特定用户组生成的那些日志条目。 $in 查询可以为较小的群组提供帮助,但如果我们谈论的是数万名用户,它就不行了。您可以只选择随机的用户子集,因为这在统计上应该足够了,当然这取决于您的具体要求。

对于大量数据的分析,Map/Reduce 派上用场:它会在服务器上进行处理,而 Map/Reduce 也受益于分片,因为作业可以由每个分片单独处理。然而,取决于无数因素,这些工作将需要一些时间。

我相信 blog of Boxed Ice有这方面的一些信息;他们肯定有使用 MongoDB 处理大量分析数据的经验。

关于mongodb - 使用 MongoDB 进行网站分析的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494130/

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