数据库体系结构,每天有数百万个新行

Par*_*pra 12 mysql database analytics scalability data-warehouse

我需要为大量网站实施定制开发的网站分析服务.这里的关键实体是:

  • 网站
  • 游客

每个唯一身份访问者在数据库中都会有一行,其中包含着陆页,时间,操作系统,浏览器,引荐来源,IP等信息.

我需要对此数据库进行聚合查询,例如'COUNT所有以Windows为操作系统且来自Bing.com的访客'

我有数百个网站需要跟踪,这些网站的访问者数量从每天几百到几百万不等.总的来说,我希望这个数据库每天增长大约一百万行.

我的问题是:

1)MySQL是否是一个很好的数据库用于此目的?

2)什么是一个好的架构?我正在考虑为每个网站创建一个新表.或者,如果现有表中的行数超过100万(我的假设是正确的),则可能从单个表开始,然后生成一个新表(每日).我唯一担心的是,如果一个表变得太大,SQL查询会变得非常慢.那么,每个表应该存储的最大行数是多少?此外,MySQL可以处理的表数量是否有限制.

3)是否建议对数百万行进行聚合查询?我准备等待几秒钟来获得此类查询的结果.这是一个好的做法还是有其他方法来进行聚合查询?

简而言之,我正在尝试一种设计大规模数据仓库的设置,这将很重要.如果您了解任何已发布的案例研究或报告,那就太棒了!

que*_*zen 3

以与数据库无关的方式提供一些建议。

最简单的道理是区分读密集型表和写密集型表。创建两个并行模式(每日/每周模式和一个历史模式)可能是个好主意。可以适当进行分区。人们可以考虑使用批处理作业来使用每日/每周模式中的数据更新历史模式。再次在历史模式中,您可以为每个网站创建单独的数据表(基于数据量)。

如果您只对聚合统计数据感兴趣(这可能不是真的)。最好有一个汇总表(每月、每日),其中存储汇总信息,如总的不定期访问者、重复访问者等;这些汇总表将在当天结束时更新。这使得能够动态计算统计数据,而无需等待历史数据库更新。