2012-02-28 120 views
4

我試圖將大量的股票市場報價數據存儲到變量中,以便在內存中進行查詢。我需要能夠快速找出股票ID的最新市場數據,並查詢特定股票的特定歷史長度。將大量庫存數據存儲在內存中的最佳方法(可變)

例如,我可能會每隔幾秒鐘收到庫存號5342(始終爲數字)的數據......我最初的想法是構建一個SortedDictionary的數組,其中SortedDictionary鍵是引號的DateTime,其值是我的市場數據的自定義結構。然後外陣列將是股票的ID,所以,我可以打電話:

RecentPrice = PriceData[StockID].Values.Last(); 

或者,我可以通過股票的SortedDictionary向後迭代,直到我打比我在尋找的時間範圍較老的關鍵。

但是我覺得必須有一個更好的(更有效的)方法。有任何想法嗎?

編輯:而不是一個SortedDictionaries數組... SortedDictionaries詞典可能會更好。 例如:

public static Dictionary<int, SortedDictionary<DateTime, StockData>> PriceData = 
    new Dictionary<int, SortedDictionary<DateTime, StockData>>(); 

則:

RecentPrice = PriceData[StockID].Values.Last(); 

謝謝!

回答

2

字典和散列表通常對於精確匹配很有用。但是當你想要「第一個日期/時間不早於X」時,排序後的列表將表現最好,因爲查找是二分搜索。特別是因爲你只是追加數據,而不是插入數據。

+0

完美,謝謝! – Harry 2012-02-28 20:20:29

0

如果您的StockID值是連續的並從零開始,則數組可能就足夠了。在現實世界中,我想他們可能不是,所以字典詞典是好的。我經常使用它們來解決這類問題。

0

你有沒有想過使用堆棧而不是SortedDictionary?如果您的數據總是以正確的順序插入,某種自定義實現可能會有效。也許是一個鏈表。

如果您的數據按順序進入,爲什麼不直接將其存儲在數組中?這樣,您就可以使用二進制搜索快速收斂到期望的日期範圍,並且插入操作也非常快捷。它確實浪費了一點內存......

0

如果您可以確保新來的股票數據按時間順序排序,那麼SortedList是一個更好的選擇。它消耗更少的內存,更快地插入和刪除已排序的數據。

此外,如果你需要各種查詢的數據。內存數據庫是一個更好的選擇。我使用SqlLite在我的一個項目中執行類似的功能,它可以很好地處理不同的需求,因爲我可以使用sql。

相關問題