mysql - 给定 session 列表计算峰值并发用户

标签 mysql sql algorithm analytics

我正在尝试在 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/

相关文章:

mysql,使用 WHERE 子句连接多个表

python - 来自 Flask 的 SQL 插入查询不起作用

sql - MySQL 列值透视

algorithm - 如何以编程方式实现2D装箱?

javascript - 什么是最好的 javascript 自动建议搜索算法

mysql - 如果第一部分为 null 则复合 MySQL 查询返回 null,否则返回结果

php - 避免来自不同 MySQL 数据库的主键冲突

sql - 有没有办法访问 SELECT 语句中的 "previous row"值?

python - 修改按位 Karatsuba 算法以处理负数的最佳方法是什么?

jquery - 使用 PHP+jQuery AJAX 检查 MySQL 数据库的变化并加载变化?