【发布时间】:2012-07-30 13:17:11
【问题描述】:
我想在 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 / 年
我做对了吗?
【问题讨论】:
-
您真的应该使用
DATE列来存储年、月和日。由于您每天需要每种产品的数据,我认为没有更简单的解决方案。 -
它会更高效,性能更好吗?
-
它可能会更有效率,但更重要的是它会让你的生活变得更简单:)
-
你的月份有 36 天?
标签: c# mysql sql sql-update database-schema