2011-02-24 52 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