Database design 如何构建可扩展的统计系统?

Database design 如何构建可扩展的统计系统?,database-design,Database Design,假设我有一个名为products的表,我想知道这些产品被搜索、查看和购买了多少次。我还想知道这些产品是何时被搜索、查看和购买的 我的第一种方法是用product_id创建一个表,一个字段指示项目是否为0=搜索、1=查看和2=购买,另一个字段保留事件的“datetime”,因此我可以按时间过滤 这工作得很好,但不可扩展。如果我的数据库中有50000个产品,1000个用户每天进行5次搜索,那么我每天有50000*1000*5=2500000000条新记录,所以这看起来不是我的完美解决方案 我对如何增

假设我有一个名为products的表,我想知道这些产品被搜索、查看和购买了多少次。我还想知道这些产品是何时被搜索、查看和购买的

我的第一种方法是用product_id创建一个表,一个字段指示项目是否为0=搜索、1=查看和2=购买,另一个字段保留事件的“datetime”,因此我可以按时间过滤

这工作得很好,但不可扩展。如果我的数据库中有50000个产品,1000个用户每天进行5次搜索,那么我每天有50000*1000*5=2500000000条新记录,所以这看起来不是我的完美解决方案


我对如何增强这一点有一些想法,但我真的很想读一些更好的方法,因为我对我的方法不满意。

继续存储此数据如果您不必访问它,存储成本低廉且相对可扩展

汇总你感兴趣的内容

一旦您知道哪些统计数据对您来说是有趣的,您就可以使用感兴趣的最小时间跨度的集合以增量方式生成这些统计数据。举一个简单的例子:如果您对某个商品的总销售额感兴趣,但只对每年的销售额感兴趣,那么您可以将2010年的销售额和2009年的销售额相加。尽可能使用这些骨料

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

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

我觉得这个计算似乎不正确。为什么您希望为每个用户每天包含50000个REORD。?即使我们以视图/产品/用户为例,所有产品都会有一个主表,当用户实际查看产品时,也会有一个包含以下详细信息的条目

create table product_views
(
product_id number,
user_id varchar2(50),
view_time date);
列product\U id、user\U id将分别引用父表product和users,它们将对其进行详细描述


因此,在您提供的场景中,将有500个搜索1000个用户,每个用户5个搜索,并且将有5000个插入到此表中。

但是此表将告诉我有关搜索的信息,而不是有关产品的信息。是的,这是您感兴趣捕获的内容。一旦您有了这些详细信息,您就可以随时将其与product表连接起来,以获取此人正在搜索的产品。