存储可通过id寻址并按时间戳排序的对象

时间:2011-02-24 19:27:26

标签: java data-structures

我正在构建一个应用程序,我需要帮助找到一个数据结构来做我想做的事。

背景

每秒获得大约100个事件。这些事件有3个部分,一个字符串会话uuid,一个长时间戳(Unix时间),可能还有一个json字符串。会话uuid用于将来自同一会话的事件绑定在一起。我们使用给定的第一个事件设置会话的TTL。

要求

我正在尝试存储这些会话,这些会话本质上是按事件时间排序的事件的排序集合。我同时遇到问题的两个标准是:

  1. 我需要能够根据其UUID快速查找会话。
  2. 我需要能够根据他们的TTL标记确定哪些会话已过期,这是会话的一个属性。
  3. 我正在考虑的是一个Map,我可以在其中键入UUID,但按排序顺序保存。我可以使EventSession对象随时间变化,但似乎SortedMap只对键进行排序。我不确定我所要求的是否存在根本问题,但我愿意接受这些想法。

2 个答案:

答案 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以及地图中的条目。