【发布时间】:2011-05-23 08:51:45
【问题描述】:
我有一个很大的dataset,可能超过一百万个条目。所有项目都有一个分配的时间戳,并且项目在运行时被添加到集合中(通常,但不总是,具有较新的时间戳)。
我需要在给定的时间范围内显示这些数据的子集。与整个数据集相比,此时间范围通常非常小,即在 1.000.000 多个项目中,不超过约 1000 个在该给定时间范围内。这个时间范围以恒定的速度移动,例如每秒时间范围移动一秒。
此外,用户可以随时调整时间范围(“移动”数据集)或设置其他过滤器(例如,通过某些文本过滤)。
到目前为止,我并不担心性能,而是尝试将其他事情做好,并且只使用较小的测试集。我不太确定如何有效地解决这个问题,并且会为每一个输入感到高兴。谢谢。
编辑:使用的语言是 C# 4。
更新:我现在使用间隔树,可以在这里找到实现: https://github.com/mbuchetics/RangeTree
它还附带一个异步版本,该版本使用任务并行库 (TPL) 重建树。
【问题讨论】:
-
数据集是否按时间戳排序?
-
您使用什么数据结构来存储 1000000 + 个项目?
-
这是一个
DataSet对象还是当你说数据集时你指的是一个数据库? -
mtrw:是的。但是,会不断添加其他项目,因此需要重新排序。 Saurabh:现在是一个简单的 Dictionary
和一个 SortedList 。 jvanrhyn:两者都不是,数据集是从文件中加载的。 -
上帝创造 SQL 的第 8 天。有时它很丑陋,但很管用。
标签: c# .net algorithm search filtering