[英]How to store a rolling week of impressions in a relational database?
我正在我的Facebook应用程序的排行榜上工作,显示过去一周与朋友相比你执行过多少次操作(打开一个网页)。
我需要一些方法将这个滚动的每周数据存储在关系数据库中,并希望对数据库的设计提出一些建议。
选项1
有一个表将每个操作存储为一行,其中包含用户ID和时间戳,然后计算与每个朋友关联的所有操作的查询,这些操作具有时间戳>今天 - 1周。
这个解决方案很容易实现,但我担心规模。 如果我有1000个Facebook好友,我将不得不对可能包含数百万个动作的数据集进行1000次此总和查询。
选项2
让用户表包含一周中每天的列,其中包含当天执行的操作数。 然后我可以总结一天的列,以获得本周的总数。 然后,在每天的开始,日的值将重置为0。
这个解决方案可以很好地扩展,但我仍然坚持如何实现逻辑,告诉我的应用程序是否覆盖“今天”的条目或增加它。
对于这些设计的替代设计或想法的任何建议都是受欢迎的。
选项2几乎是完美的。
而不是将弱日当天作为主要关键日。 然后每次增加当天的值。
我最终选择了选项2并且每天使用“今天是新的一天”布尔标志。 所以我的表看起来像:
id | monday | monday_new | tuesday | tuesday_new | ... | sunday | sunday_new | lifetime INT | INT | BOOL | INT | BOOL | ... | INT | BOOL | INT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.