如何在 wso2cep 中设置事件流的优先级?

How can I set priority on event flows in wso2cep?

比方说,我们有几个事件流。其中一些将引用数据加载到 hazelcast 事件表,而其他则是实际的事件处理器。

我的 objective 是,当 wso2cep 服务器启动时,它会首先 运行 那些正在将参考数据加载到 hazelcast 事件表的事件流,然后它会启动其他流。

这将帮助我们在所有事件处理器流中保持引用数据的一致性。

除了在单个执行计划中加载外,我看不到其他选项。 有两个选项:

  1. 使用触发器定期从 RDBMS 加载参考数据到 Hazelcast。实际过程将使用来自Hazelcast table(此执行计划已在下面提供)
  2. 从 RDBMS 加载并缓存它。

所以,此时此刻,我的问题是:

  1. 哪个在内存利用率方面更好?
  2. 在事件处理速度方面哪个更好?
  3. 如有其他更好的方法请指教

执行计划

@Plan:name('ExecutionPlan')

/* define streams/tables and write queries here ... */
/* Facts/Events streams definition */
@Import('actions:1.0.0')
define stream actions (meta_name string, correlation_id int);

@Export('userActions:1.0.0')
define stream userACtions (meta_username string, meta_actionname string);

/* Dimension tables(Event Tables) definition */
-- table from RDBMS
@from(eventtable = 'rdbms' , datasource.name = 'PG' , table.name = 'users')
@IndexBy('id')
define table DBUsers (id int, name string);

-- table from Hazelcast
@from(eventtable = 'hazelcast', collection.name='hzUsers')
@IndexBy('id')
define table hzUsers (id int, name string);

/* Load dimension tables, from RDBMS to Hazelcast, periodically using trigger */
define trigger periodicTrigger at every 30 sec;

from periodicTrigger join DBUsers
select DBUsers.id as id, DBUsers.name as name
insert into hzUsers;

/* Actual execution plan */

from actions as A 
join hzUsers as H
on A.correlation_id == H.id
select H.name as meta_username, A.meta_name as meta_actionname
insert into userACtions;

我检查了 hazelcast 外部集群,似乎这是一个额外的开销,需要为每个类型的表创建 DataSerializable class。

因此,我决定如下存储 CEP 的 dimension/reference 数据:

  1. 对于完全开源的项目,我会按照我在另一个答案中提到的那样去做,请阅读那里的评论,专业 2nd(Obaid) 和 3rd(Grainier)。

  2. 对于商业项目,我会选择 voltdb。

谢谢大家,特别是@Grainier。