我正在开发一个统计模块,用我的网站,这将有助于我测量的换算率,以及其他有趣的数据。

该机制,我使用的是-存储数据库中的条目统计表格--每一个用户进入特定区域在我的数据库(I避免重复记录的帮助cookie)。

例如,我有以下区域:

  1. 网站的-一个大区用于计独特的用户作为我停止相互信任的谷歌分析最近。
  2. 类别的自我描述性的。
  3. 微型网站-自我描述性的。
  4. 产品的图像-当用户看到一个产品,导致提交形式。

问题是,一个月后,我的统计数据表挤满了 很多 行,ASP.NET 我页写的分析数据的负载 真的 慢。

我以为可能编写一项服务,将以某种方式解析数据,但是我看不到任何方式这样做,而不会失去灵活性。

我的问题:

  1. 如何大规模数据分析的应用,如谷歌的分析载的数据,那么快?
  2. 什么是最好的方式为我这么做?
  3. 也许我的数据库的设计是错误的,我应储存的数据中只有一个表?

感谢任何人帮助,

Eytan.

有帮助吗?

解决方案

基本做法,你正在寻找被称为 聚集.

你有兴趣在某些功能计算在你的数据,而不是计算的数据"网上"在启动时所显示的网站,计算他们离线,无论是通过批处理过程在晚上或逐渐时日志的记录编写的。

一个简单的增强将来存储计数每用户/用户会议,而不是存储每一击和计他们。这将减少分析处理要求通过一个因素的顺序每届会议。当然,这将增加处理费用时插入日志条目。

另一种的聚集是所谓 在线分析处理, ,这只聚集着某些方面的数据,让用户聚集的其他方面在浏览模式。这种交易关性能、储存和灵活性。

其他提示

好像你可以做以及通过使用两个数据库。一个是对事务的数据,数据处理所有的插入的发言。另一种是用于报告和处理所有的查询要求。

你可以指数的鼻涕的报告数据库、和/或非规范化的数据,以便减少联接使用的查询。周期性地出口的数据交易的数据库来报告数据库。该法案将改善报告的响应时间随着聚集的想法,前面提到的。

另一种伎俩知道的是 分区.看起来如何这样做了在数据库的选择,但基本想法是你告诉你的数据库保持一个表分成几个子表,每个都有一个相同的定义,根据某一价值。

在你的情况下,是什么 非常 有用的是"范围内划分"选择--本分区的基于一系列为其价值。如果你分区按日期范围,您可以创建单独的子表每个星期(或每天或每个月--取决于你如何使用数据和多少有)。

这意味着,如果你指定一个日期范围时询问,该数据之外,范围甚至不会予以考虑;这可能导致非常重大的节省时间,甚至比指数(一个指数考虑的每一行,因此它将伴随着你的数据;一个分区的每一天)。

这使得在线查询(人发出的,当你打ASP页),以及汇聚查询使用的预算所必需的统计数据,要快得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top