我想在MySQL数据库中创建计数器,用于存储特定日期,月份和年份中每种产品的查看次数。
问题是我有大约2000种产品。我考虑过使用以下架构:
id (BIGINT)
year (INT[4])
month (TINYINT)
day (TINYINT)
product_id (INT)
pageviews (BIGINT)
该解决方案的问题在于,如果在最坏的情况下,每天都会查看每个产品,那么每天我的数据库中将有2000行。乘以36天,我每月将有72,000。
我想知道是否有更好的方法来实现这一点。我认为每日数据将仅作为Application变量(在.NET中开发)和ArrayList保存在内存中。如果我选择了这个方向,我将减少行/数据,每月2000行。
我真的想保留累积的每日网页浏览量。顺便说一下,预览只是为了说明目的,我会存储不同的数据,但这些数据会经常更新。
如果我使用每日专栏,它会经常更新,几乎每2-5秒一次。我打算通过从Javascript调用ASP.NET Web服务来更新MySQL异步,传递product_id并增加计数器+1。这是为了防止应用程序等待更新发生。
我也想知道估计表的大小。如果我做得对:
BIGINT = 8个字节
日期时间= 10个字节
INT - 4个字节
^如果我决定使用数据时间列而不是年/月/日
30字节* 2000 = 60,000字节
60KB(约)* 30天= 180KB月
180KB月* 12个月= 2160KB /年
我做对了吗?
答案 0 :(得分:0)
好的我在数据库设计方面不是那么棒,但我知道的很多...... 你应该问问自己想要保存这些2K产品每日点击的时间长度?
如果你想只持续一个星期,那么你可以计算出尺寸需要多少(如果你想把它们保持一个月)。
如果您想保存一个月,那么您可以每月制作一张表并将每日点击数据保存到该表并总结它们,这样每个表中只有2K行< / p>
或者你可以使用一个“仓库”表来保存每个月份的所有点击量,每个月将数据复制到该仓库表后,每月总结一次。
如果你想要无限期地保存这些命中,那就是我所知道的方式(再次不是数据库设计中的主人)。
如果你想将命中数保存一个月,这就是你应该做的。
希望我帮助过你, 鹭。