当前位置: 首页 > 知识库问答 >
问题:

LMAX Disruptor-维护事件顺序

祁聪
2023-03-14

我有一个从各种文件加载时间序列数据的应用程序。应用程序为每个文件打开一个线程以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以维护事件的整体顺序。

这是否可以使用像多个生产者一样的破坏者——一种消费者类型的设计来实现,以维持事件的顺序?

我目前正在使用阻塞集合和排序列表对每个阻塞集合的头部进行排序,但这会消耗大量内存,我想看看是否有其他人使用不同的体系结构实现了类似的设计。

谢谢

共有1个答案

汝承载
2023-03-14

如果您重新设计为对象流(关注流),那么从文件加载应该只加载内存中的最小值(您需要的缓冲区大小)每个流预取1个头项。

然后您必须实现k-way合并以选择N个项目中的最低项。您将流放在二叉树中。当弹出最低值时,流在树中重新定位(交换和旋转)。当然,它在O(log n)左右,以弹出一个值。当流干燥时,从树中删除。

这是2排序数组合并的推广;您必须根据数组的头部来调用数组,这与对随机集进行排序完全不同;您有一个几乎有序的集合,除了1个流不合适。您可以进行二分查找,但在mem副本中重新插入会很昂贵。树旋转更简单。

(破坏者与此无关……哈哈)

 类似资料:
  • 问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。

  • Netty 3中有一个OrderedMemoryAwareThreadPoolExecutor,文档中描述了如何更改排序键:http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.html 在Netty 4中,这是用EventExecutor

  • 问题内容: 我有下表 然后我尝试根据主键获取记录 然后我得到以下结果 可以看到,结果按ID排序。我试图实现的结果是按照查询中提供的顺序对结果进行排序。给定这个例子,它应该返回 问题答案: 正如另一个答案所提到的:您发布的查询与您想要的结果顺序无关,而只是您想要的结果。 为了订购您的结果,我将使用ORDER BY FIELD(): FIELD的参数列表可以是可变长度。

  • 我有一个异步执行的查询的输入流。我想确保当我使用时,这些要求的结果将按照输入查询流的顺序收集。 这是我的代码的样子: SQLQueryEngine。执行(查询);返回

  • 127.0.0.1:26379> PSUBSCRIBE * 注意这是在sentinel上监控所有的频道信息,查看的是切换前后发生的消息。 还有一个__sentinel__:hello的频道,这个频道是在redis实例上的,用途是sentinel之间发现对方的,别无它用。在redis实例上可以通过monitor或者订阅此频道看到这个消息。