我正在构建一个应用程序,我需要帮助找到一个数据结构来做我想做的事。
背景
每秒获得大约100个事件。这些事件有3个部分,一个字符串会话uuid,一个长时间戳(Unix时间),可能还有一个json字符串。会话uuid用于将来自同一会话的事件绑定在一起。我们使用给定的第一个事件设置会话的TTL。
要求
我正在尝试存储这些会话,这些会话本质上是按事件时间排序的事件的排序集合。我同时遇到问题的两个标准是:
我正在考虑的是一个Map,我可以在其中键入UUID,但值按排序顺序保存。我可以使EventSession对象随时间变化,但似乎SortedMap只对键进行排序。我不确定我所要求的是否存在根本问题,但我愿意接受这些想法。
答案 0 :(得分:3)
听起来你需要两个结构:一个用于通过UUID查找Session对象的Map和一个用于存储由TTL排序的相同Session对象的PriorityQueue。
答案 1 :(得分:1)
我做了同样的事情。您需要2个数据结构:
包含time-sessionID-pair的List,保留指向开始和结束的指针,以便您可以在固定时间内插入和删除。
Map sessionID-> JSonString由排序的sessionID的红黑树实现
红黑树自动平衡,更容易实现AVL,并将为您提供log(n)插入,查找和删除。因此,当从列表中删除时,您会在log(n)时间内获取存储在那里的ID以及地图中的条目。