1

我想在 MySQL 数据库中创建计数器,用于存储每个产品在特定日期、月份和年份中的查看次数。

问题是我有大约 2000 种产品。我考虑过使用以下架构:

 id (BIGINT)
 year (INT[4])
 month (TINYINT)
 day (TINYINT)
 product_id (INT)
 pageviews (BIGINT)

该解决方案的问题在于,如果在最坏的情况下,每天查看每个产品,我的数据库中每天将有 2000 行。乘以 36 天,我每个月将有 72,000 个。

我想知道是否有更好的方法来实现这一点。我认为每日数据将仅作为应用程序变量(在 .NET 中开发)和 ArrayList 保存在内存中。如果我选择了这个方向,我将拥有更少的行/数据,每月 2000 行。

我真的很想保持累积的每日页面浏览量。顺便说一句,预览只是为了说明目的,我会存储不同的数据,但这些数据会非常频繁地更新。

如果我使用每日专栏,它将非常频繁地更新,几乎每 2-5 秒一次。我打算通过从 Javascript 调用 ASP.NET Web 服务、传递 product_id 并增加计数器 +1 来更新 MySQL 异步。这是为了防止应用程序等待更新发生。

我也想知道估计表的大小。如果我做对了:

BIGINT = 8 个字节

日期时间 = 10 个字节

INT - 4 个字节

^如果我决定使用数据时间列而不是年/月/日

30 字节 * 2000 = 60,000 字节

60KB(大约)* 30 天 = 180KB 月

180KB 月 * 12 个月 = 2160KB / 年

我做对了吗?

4

1 回答 1

1

好吧,我在数据库设计方面并不是那么出色,但我知道的很多……您应该问问自己,您希望将这些 2K 产品的每日点击量保存多长时间?

如果您只想将它​​们保存一周,那么您可以计算尺寸需要多少(如果您想保存一个月)。

如果您想将其保存一个月,那么您总是可以每个月制作一个表格,并将每日点击中的数据保存到该表格并将它们汇总起来,这样每个表格中只有 2K 行

或者您可以使用一个“仓库”表来保存每个月的所有点击量,并且每个月的数据将在您对每个月进行汇总后复制到该仓库表中。

如果您希望无限期地保存这些命中,那么据我所知,这就是方法(同样不是数据库设计大师)。

如果您想将点击次数最多保存一个月,这也是您应该做的。

希望我能帮到你,萨吉。

于 2012-08-05T07:36:39.753 回答