2011-02-24 57 views
1

我正在构建一个应用程序,我需要帮助找到一个数据结构来执行我想要的操作。存储可按id排序的对象并按时间戳排序

背景

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

要求

我试图来存储这些会话这是本质上,整理它们通过他们的活动时间排序的活动的集合。我同时遇到问题的两个标准是:

  1. 我需要能够根据其UUID快速查找会话。
  2. 我需要能够根据TTL戳记来确定哪些会话已过期,这是会话的一个属性。

我在想什么的是一个地图,我可以通过按键关闭UUID的,但都保存在一个有序。我可以使EventSession对象的时间相当,但似乎SortedMap只对键进行排序。我不确定是否存在我所要求的基本问题,但我愿意接受。

回答

3

听起来你需要两个结构:一个Map通过UUID查找Session对象,一个PriorityQueue存储TTL定义的相同Session对象。

+0

谢谢你提出了一个我没有考虑过的好建议。 – 2011-02-25 03:56:07

1

我做了同样的事情。您需要2个数据结构:

  • 含时间会话ID-对的列表,保持一个指针开始和结束,所以你可以插入并在固定时间删除。

  • 一个地图sessionID-> JSonString排序sessionIDs的红黑树实现

红黑树会自动平衡,更容易实现的是AVL,并给你的log(n)插入,查找和删除。因此,从列表中删除时,您需要在此处存储该商店的ID,并在log(n)时间内输入地图中的条目。

+0

我应该更清楚了。我希望能够使用Java Collections。根据我的标签,我可以看到,我可能误导了我建立自己的标签。不过谢谢你的建议。 – 2011-02-25 03:56:57