在 cs.stackexchange 上问过这个问题.. 投了反对票.. 因为我不是很清楚.. 所以我会在这里尝试更具体..
Q - 设计一个数据结构来返回最近 1 分钟内 Web 服务器的连接数。
假设 -
- 服务器有大量传入连接..如印度铁路预订或社交网络网站等。
- 假设这是一个大数据问题..那么我有基础设施来运行大数据作业..
我在寻找:
效率 - 是否可以在 O(1) 中做到这一点?如果,比如说,我们在 O(n) 中进行。问题是,如果需要 N 毫秒来计算答案。有更多的连接在 N 毫秒中排队。我应该如何解决这个问题。 . 或者我只能忽略小的延迟和 O(n) 是一个好的表现
推理/方法 - 我们是否在生产中的无数部署中做类似的事情?有没有类似的问题..?
这是“大数据”吗?最后 N(N 为 10)分钟内存储连接的数据是大数据问题吗?
我的努力:我知道——
- 与 Web 服务器的连接在被线程服务之前被放入队列中
- 每个连接都有一个时间戳
方法 -
- 将连接放入队列后,立即将其写入文件..(至少它的时间戳和连接的句柄/唯一标识符)
- 一旦客户端请求“在过去 1 分钟内给我 num 个连接” .. 处理文件以找出连接数 .. 我们知道当前时间(以毫秒为单位),并且我们必须找到时间戳落在 currentTime 中的连接 - 60 秒
- 可以使用 map reduce 运行此作业。我还知道该文件已对数据进行了排序(按时间戳)。
我还运行一个守护进程,它删除超过 10 分钟的条目/文件.. 这样我就不会存储不需要的数据