如何建立可扩展的统计系统?

时间:2010-08-03 17:17:31

标签: database-design

假设我有一个名为products的表,我想知道搜索,查看和购买产品的次数。我还想知道何时搜索,查看和购买产品。

我的第一个方法是制作一张包含product_id的表格,一个表示该项目是0=searched1=viewed2=purchased的字段以及另一个保留'dateate'的字段'事件,所以我可以按时间过滤。

这很好用,但不可扩展。如果我在数据库中有50,000个产品,每天有1,000个用户每次进行5次搜索,那么我每天都有50,000 * 1,000 * 5 = 250'000,000个新记录,所以这对我来说不是完美的解决方案。

我对如何提高这个问题有一些想法,但我真的很想读更好的方法,因为我对我不满意。

2 个答案:

答案 0 :(得分:0)

继续存储此数据(如果您不必访问存储,则存储便宜且相对可扩展)。

汇总您感兴趣的内容。

一旦您知道哪些统计信息对您有用,您就可以使用感兴趣的最小时间跨度的聚合来逐步生成这些统计信息。举一个简单的例子:如果您对某个项目的总销售数量感兴趣,但只是按年度计算,则可以汇总“2010年的销售额”,“2009年的销售额”。尽可能使用这些聚合。

尽管如此,使用原始数据,如果您发现另一个指标变得有趣,您可以生成新的聚合。

答案 1 :(得分:0)

*如果我在数据库中有50,000个产品,每天有1,000个用户每次进行5次搜索,那么我每天有50,000 * 1,000 * 5 = 250'000,000个新记录,所以这看起来不是完美的我的解决方案。*

这个计算对我来说似乎不对。为什么你想每天为每个用户包含50000个reord?即使我们采用视图/产品/用户的情况,您也可以拥有一个适用于所有产品的主表,当用户实际查看产品时,您将拥有一个包含以下详细信息的条目。

create table product_views
(
product_id number,
user_id varchar2(50),
view_time date);

列product_id,user_id将分别引用父表产品和用户,它们将具有相同的详细描述。

因此,在您提供的方案中,将有500次搜索(每次1000个用户和5次搜索),此表中将有5000个插入。