在内存(变量)中存储大量股票数据的最佳方法

3
我正在尝试将大量的股市行情数据存储到变量中,以便在内存中查询。我需要快速找出某个股票ID的最新市场数据,并查询特定长度的历史数据。
例如,我可能每隔几秒钟就会收到股票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();

谢谢!

4个回答

2

字典和哈希表通常用于精确匹配。但是,当你想要“第一个日期/时间不早于X”时,排序列表会表现最佳,因为查找是二进制搜索。特别是您只附加数据,而不是插入它。


0
如果你的StockID值是连续的并且从零开始,那么数组可能就足够了。但在现实世界中,我想它们可能不是这样的,所以使用一个字典嵌套字典是比较好的选择。我经常用它们来解决这种问题。

0
你有没有考虑过使用栈而不是SortedDictionary?如果你的数据总是按正确的顺序插入,一些自定义实现可能会很好地工作。也许是一个链表。
如果你的数据是连续的,为什么不简单地将它存储在数组中呢?这样你就可以使用二分查找快速收敛到所需的日期范围,插入操作也非常快速。但这会浪费一些内存...

0
如果您能确保新到来的股票数据按时间顺序排列,SortedList是更好的选择。它消耗更少的内存,并且对于插入和删除有序数据更快。
此外,如果您需要对数据进行各种查询,则内存数据库是更好的选择。我在我的一个项目中使用SqlLite来执行类似的功能,因为我可以使用sql,它可以很好地处理不同的要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接