我有一个应用程序可以加载来自各种文件的时间序列数据。应用程序为每个文件打开一个线程以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以维护整个事件的顺序。
这可以使用破坏者来实现,就像多个生产者一样,一种消费者类型的设计维持事件的顺序吗?
我目前正在使用阻塞集合和排序列表来对每个阻塞集合的头部进行排序,但这会消耗大量内存,我很想知道其他人是否使用不同的体系结构实现了类似的设计。
由于
答案 0 :(得分:0)
如果你重新设计对象流之类的东西(专注于流),那么从文件加载应该只加载内存中的最小值(这是你需要的缓冲区大小。)每个流预取1个头项目。
然后你必须实现一个k-way合并来挑选N个项中最低的一个。您可以将流放在二叉树中。弹出最低值时,流将重新定位到树中(交换和旋转)。当然,它在O(log n)附近,可以弹出一个值。当溪水干涸时,从树上取下。
这是2排序数组合并的推广;你必须通过他们的头来求助阵列,这与排序随机集完全不同;你有一个几乎有序的集合,除了1流不合适。您可以进行二进制搜索,但重新插入在mem副本中会很昂贵。树轮转更简单。
(破坏者与此无关......哈哈)