我意识到有很多方法可以做到这一点,所以在我开始之前,我想要一些具有此类任务经验的人提供一些意见。
我有一个包含1000次下载的MySQL表。每次下载都有一个包含总下载次数的columb。
我想要做的是让它更具动态性,因此将此数字转换为过去30天的下载次数。
所以我基本上考虑在过去30天内制作一个包含每个下载ID和30个下载数据的新表。通过PHP将这些放在一起,并由此降低。或者我可以使用前面的表格中的“数据添加”字段,并将下载总数与给定下载在线的天数相除。
如果不是一个完全不同的解决方案,你会推荐什么解决方案?
答案 0 :(得分:2)
这实际上取决于您的确切要求和系统负载。
您是否只需要最后一个月的结果?运行一个cronjob每月重置一次该值。如果你需要一个尾随平均值(总是过去30天),你的mysql方法肯定会起作用,但是30个字段可能有点矫枉过正。
两种解决方案:
每个下载有3个字段:今天的计数器,包含一个的blob 30元素-json阵列,今天30天平均值。一个Cronjob 常规(午夜)可以将数据移动到每日柜台 到数组,删除最旧的条目并更新平均值。 这样,您可以在操作期间获得最小的系统负载。
像Redis一样使用NoSQL和每日计数器,给每个人一个 超时30天。这样你就可以随时总结一切 你有一个下载文件的数据,甚至没有触摸你的 数据库中。