3

我有一个非常通用的数据库问题。我在我的数据库中创建了一个表来跟踪整个网站的点击次数。我的表结构如下:

  • (PK) - 身份证,
  • (FK) - PageID,
  • (FK) - ContactID,
  • 日期

我遇到的问题是,对于大量用户集和大量点击数据,此表中的行数在 20-30 百万范围内。有没有其他方法可以组织这些数据以更轻松地按日期报告?

SELECT P.TITLE, COUNT(DISTINCT(C.ID)) 
FROM PAGES P 
INNER JOIN CLICKS C ON C.PAGEID = P.PAGEID 
WHERE C.DATE >= 5/1/2013 AND C.DATE < 6/1/2013 AND C.PAGEID = XYZ
4

2 回答 2

2

这叫立体设计。

您可以使用 Pentaho Aggregation Designer 之类的工具来查找合适的聚合(例如按月按客户的点击)。

然后使用像 Mondrian + Saiku 这样的 OLAP 工具,它可以动态地重写您的查询以在有利时使用聚合。

您应该使用带有整数智能键†的日期维度表(如 20130621)。这使得按日期划分您的访问事实变得容易。

Pentaho 数据集成可以很容易地对表进行分区。

† 这是唯一一次您应该在尺寸设计中使用智能钥匙。

于 2013-06-22T00:59:19.727 回答
1

Oracle Partitions很好地处理了这一要求。

于 2013-06-21T20:39:13.113 回答