我有几个“数据源”,每个都提供有序的时间戳数据。我想将它展平为单个有序流(如合并排序)。这个答案描述了如何为两个可枚举做到这一点,但我不确定如何概括它。
数据源很大,所以我不能在内存中做,它必须被流式传输。
用一个例子来解释它,我有这样的东西:
interface IDataSource
{
IEnumerable<DateTime> GetOrderedRecords();
}
我希望能够有这样的扩展方法:
// get all sources
IEnumerable<IDataSource> dataSources = GetAllSources();
// merge sort
IEnumerable<DateTime> flattened = dataSources
.MergeSort(s => s.GetOrderedRecords());
[编辑]
我不能急切地加载所有内容然后对其进行排序的原因是因为我正在从多个数据库加载数据并将其导出到另一个数据库中。每个IDataSource
基本上都是 Linq-to-NHibernate 引擎盖下,我有数以百万计的数据行要返回。
所以我需要的是:
- 从所有可用来源中,加载下一个时间戳。
- 将其存储到磁盘并“忘记它”。
数据源已经排序,这使得“合并排序”方法可行。