我有一个从各种文件加载时间序列数据的应用程序。应用程序为每个文件打开一个线程,以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以维护事件的整体顺序。
这可以使用像多个生产者,一个消费者类型的设计,维护事件的顺序这样的颠覆者来实现吗?
我目前正在使用阻塞集合和排序列表来对每个阻塞集合的头部进行排序,但这会消耗大量内存,我很想看看是否有人使用不同的架构实现了类似的设计。
谢谢
发布于 2018-04-18 21:46:27
如果您重新设计为对象流(专注于流),那么从文件中加载应该只在内存中加载最小值(无论您需要的缓冲区大小)。每个流预取1个head项。
然后,您必须实现k路合并,以选择N个项目中最低的一个。您可以将流放在二叉树中。当弹出最低值时,流在树中重新定位(交换和旋转)。当然,它大约是O(log ),以弹出一个值。当一条小溪干了,从树上移走。
这是2排序数组合并的推广;您必须按数组的头部对数组进行排序,这与对随机集合进行排序有很大不同;除了1个流错位之外,您拥有的是一个几乎有序的集合。您可以执行二进制搜索,但在内存副本中重新插入的代价会很高。树的旋转更简单。
(颠覆者与this...lol没有任何关系)
https://stackoverflow.com/questions/49450472
复制相似问题