【问题标题】:Database daily counter in MySQLMySQL中的数据库每日计数器
【发布时间】: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


【解决方案1】:

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

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

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

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

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

如果您想将点击保存长达一个月,这也是您应该做的。

希望对你有所帮助, 萨吉。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多