存储数据的最佳方式,如餐厅结账计数


Best way to store data like restaurant checkin count?

我有一个显示餐厅配置文件数据的页面,其中显示的数据之一是用户到餐厅的总签入计数

我有一个mysql表,如:user_checkins,它将用户的签入存储到餐馆中,如:

id | user_id | res_id | checkin_date        |
 1 |     102 | 5526   | 2016-04-21 03:20:21 |
 2 |     165 | 5574   | 2016-04-21 06:35:21 |
 3 |     102 | 4565   | 2016-04-24 02:15:30 |

和另一个表res_checkin_count:

id | res_id | total_checkin_count |
 1 |   5526 | 1055                |

过一段时间,user_checkins中将创建许多行,因为人们经常签入

问题:我应该删除较旧的行吗?比如为reach restaurant创建一个定期(像每天一样)删除旧行的cronjob,并在另一个只存储每个餐厅的total_checkin_count的mysql TABLE中更新餐厅total_checkin_count编号?这会消耗大量内存吗?

我保留行,让它积累起来,并使用SELECT COUNT(*)来获得每个餐厅total_checkin_count

编辑:user_checkins表实际上存储了各种餐厅的所有用户登记,每次有人访问"restaurant_profile"网页时,SELECT COUNT(*)查询都会在user_checkins表上运行res_idx,以获取该餐厅的total checkin count,这是多余的吗?

当你说有很多行时,你需要评估是否有很多行超出了MySQL的能力。一般来说,MySQL应该能够很容易地处理每个表1亿行的数量级。你预计很快就会超过1亿行吗?如果没有,那么就不用管数据了,这样可以降低归档系统的复杂性。

另一方面,如果您希望表上的行数超过数亿,那么是的,每天运行一个删除或归档数据的作业有助于保持数据库的良好运行。

在我看来,这些表都在MySQL中,但我只想去掉res_checkin_count是count聚合函数的副本,所以你在浪费内存,所以只能有两种情况:

1您的user_checkins表的记录不超过200万条,并且您为Column res_id创建了nuncluster索引,这样就可以了。

2你有一个Monstrous网站,在那里你存储了200多万条活跃记录,并按州或每块砖(3到5个邮政编码)创建了表格,这样你就可以分发记录——很可能来自德克萨斯州的人会搜索和查询来自德克萨斯州等地的餐厅。