Drools 融合多流和伪时钟

Drools Fusion Multiple Streams & Pseudoclock

我目前正在写我的硕士论文,其中涉及使用 Drools Fusion 处理来自多个 XML 文件流的事件(所以我 'replaying' 每个文件都是一个流)。这些文件是一场足球比赛,球员身上装有 GPS 传感器,用于监测他们的加速度和速度以及球员负荷等其他内容。

每个 XML 文件包含事件实例,说明 ID、开始时间、结束时间和代码如下:

<file>
<SESSION_INFO>
<start_time>2015-09-17 19:02:31.31 +100</start_time>
</SESSION_INFO>
<SORT_INFO>
<sort_type>sort order</sort_type>
</SORT_INFO>
<ALL_INSTANCES>

<instance>
<ID>1</ID>
<start>0</start>
<end>1.51</end>
<code>Accel : 0.00 - 2.00</code>
</instance>

<instance>
<ID>2</ID>
<start>1.52</start>
<end>3.01</end>
<code>Accel : -2.00 - 0.00</code>
</instance>

<instance>
<ID>3</ID>
<start>3.02</start>
<end>4.01</end>
<code>Accel : 0.00 - 2.00</code>
</instance>

<instance>
<ID>4</ID>
<start>4.02</start>
<end>4.21</end>
<code>Accel : 2.00 - 4.00</code>
</instance>
</ALL_INSTANCES>

我有 9 个这样的文件,它们都需要同时处理,并将这些事件同时输入引擎。我当前的实现是使用 JAXB 解组器将这些事件馈送到流中,但不知道如何同时进行(即:在每个流中馈送第一个事件,然后在每个流中馈送第二个事件等)。我正在研究在实现的那一部分使用线程,除非它们是我在 Drools 中错过的另一种工具来帮助实现这一点。但是搜索的比较透彻,并没有综合处理多个流的例子。

我的另一个问题是关于伪时钟。因为我有这 9 个不同的流,事件发生在不同的时间,所以我无法在每次插入后提前时间,因为每个流中的每个事件都发生在不同的时间,因此,这些事件不会排队。所有这些流开始的时间是相同的。例如,如果我在 XML 中有实例 1 在 1.51 的持续时间内发生,而另一个事件来自另一个流,持续时间为。说。 4 秒,然后说我要推进这两个事件,那么它们就会彼此不同步。

但是,我所有与时间相关的数据都存在于每个流中。启动时间为 19:02:31,每个事件在启动后通过 'end' 时间戳在该流中都有一个时间戳,每个事件的持续时间为(结束时间戳 - 开始时间戳)。我需要对这些流进行的处理包括获取这些加速事件并将它们与其他流相关联,只要 2 个或更多玩家以大致相同的 duration/time 间隔以相同的速度加速。

任何人都可以给我任何指示或帮助吗?总而言之,我需要知道一种更好的方法来同时将流插入引擎,并且需要知道我的 implementation/processing 是否需要伪时钟。我几乎是编程的初学者,所以我只想让系统达到 运行。

非常感谢!

斯图

您不需要同时处理九个 XML 文件,即,分布在线程上。 <instance> 元素似乎是根据开始或结束时间排序的(这可能取决于 实例事件期间需要计算的内容),您可以在它们的自然顺序 - 只需确定九个流中的下一个。

这样,你关于伪时钟的问题也不再是问题了。一旦确定,您可以轻松地将时钟提前到下一个实例事件。

在不了解所有细节的情况下,我认为每个 <instance> 定义了两个事件:玩家开始移动和玩家停止移动。你可能不得不重新评估这两个事件中的每一个事件的情况。