让我们看一个用户正在跟踪的traffic
情景cities
。流量每两个小时更新一次,我们必须保留以前的数据来绘制图表。所以我有一张traffic_stats
看起来像这样的桌子 -
traffic_stats(id,city_id,user_id,traffic,created_at)
(给定流量是一个数字)
有一个 stats refresher daemon 获取唯一 city_id
的 s,获取这些城市的当前交通统计信息,并将新条目添加到该表本身。守护程序使用此查询来获取city_id
-
SELECT * FROM traffic_stats GROUP BY city_id
city_id
并为同一个表中的每个添加新条目。每个新条目的user_id
属性为 0,因为哪个用户订阅了城市并不重要。如果city_id
在表中,它的 traffic_stats 会被刷新。
在前端,运行以下查询为用户获取数据 -
SELECT * FROM
(SELECT * FROM traffic_stats WHERE user_id = #{session[:user_id]} ORDER BY created_at DESC)
as traffic_for_user_in_descending_order
GROUP BY city_id
这为city_id 提供了单个最新条目。
这应该可以正常工作,除了如果 100 个用户正在跟踪 200 个独特的城市,那么traffic stats
表中每两个小时就会有 200 个新条目。那是每天 2400 个条目,并且该表将继续增长。
现在,我可以有一个表,其中包含有关用户正在跟踪的城市的数据,以及另一个表,刷新守护程序添加条目。但我不确定这种方法是否有任何性能优势。