0

我目前正在研究我的硕士论文,其中涉及使用 Drools Fusion 处理来自多个 XML 文件流的事件(所以我将每个文件作为流“重放”)。这些文件是一场足球比赛,其中 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 中错过的另一个工具来帮助做到这一点。但是搜索得相当彻底,并且没有同时处理多个流的全面示例。

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

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

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

非常感谢!

斯图。

4

1 回答 1

0

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

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

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

于 2016-07-19T15:18:37.410 回答