我有一个MySQL表,该表存储餐厅的评分,例如:
id | user_id | res_id | rating_value | review_id |
1 | 102 | 5567 | 4.0 | 26 |
2 | 106 | 5543 | 3.5 | 27 |
3 | 112 | 5567 | 3.0 | 31 |
我为每家餐厅都有
Restaurant Profile webpage
,它们按用户显示餐厅的'average rating'
之类的“数据”。用户可以每天对餐厅进行一次有限次数的评论和评分,因此仅一家用户就可以使一家餐厅每天获得许多新的评分行。
我的问题是:
我是否应该每天(或每周一次)对每个餐厅的
SELECT AVG(rating_value)
执行一次cronjob,以更新餐厅的“评级”,这会消耗很多内存吗?我是否应该保持最近X个“评分”的X值不变,并每天使用cronjob对每个餐厅
SELECT AVG(rating_value)
进行排名?3.或者我应该只在提交新的“评分”时运行
SELECT AVG(rating_value)
吗? 最佳答案
听起来您想保持数据库负载轻便,除非该餐厅提交新的评分,否则该值不会改变。
我建议将这些信息缓存在诸如memcache或redis之类的文件中,因为在数据库中复制此平均值是多余的。然后,您可以对此设置一个过期时间(例如一小时),如果该值不在缓存解决方案中,则仅向DB获取该值。
如果您需要一个实时解决方案,则应加入评论提交逻辑以刷新餐厅的缓存平均值。这将确保您的应用程序始终显示最准确的平均评分。
如果要将数据存储到数据库中,那么我建议使用数据库触发器来更新存储该平均评分字段的表,或者像使用缓存解决方案一样,提交审阅钩子以更新该值。
关于mysql - Mysql:处理诸如餐厅平均评分等数据的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37216095/