我正在尝试在 MySQL 中设计一个解决这个问题的方案,但我也对从理论角度来看的解决方案感兴趣,因为我认为它可能会成为一个很好的面试问题。
问题:
我有一个(大型)用户 session 数据库。对于每个用户,我都有一个 session 开始时间戳和一个以秒为单位的 session 长度。
我有兴趣找出任意时间范围内的峰值并发用户数。
找到这个数字的最有效方法是什么?
最佳答案
最简单的方法是为一系列时间戳创建一个表,例如每分钟一个。每天只有 1440 分钟,这是一个非常小的表。
即使您必须在一天中的每一秒都输入,每天也只有 86400 行。
然后将时间戳表加入您的 session ,看看哪个具有最高计数。
SELECT t.timestamp, COUNT(*) AS count
FROM timestamps t
JOIN sessions s ON t.timestamp BETWEEN s.start and s.start + INTERVAL s.seconds SECOND
GROUP BY t.timestamp
ORDER BY count DESC
LIMIT 1;
关于mysql - 给定 session 列表计算峰值并发用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321290/