让我们说,我们有几个事件流程。其中一些将参考数据加载到hazelcast事件表,其他则是实际的事件处理器。
我的目标是,当wso2cep服务器启动时,它将首先运行那些将参考数据加载到hazelcast事件表的事件流,然后它将启动其他流程。
它将帮助我们在所有事件处理器流中保持参考数据的一致性。
答案 0 :(得分:0)
除了在单个执行计划中加载之外,我看不到其他选项。 有两种选择:
所以,此时此刻,我的问题是:
执行计划
@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;
答案 1 :(得分:0)
我已经检查过hazelcast外部集群,看起来它是一个额外的开销,需要为表格的每种类型创建DataSerializable类。
所以,我已经决定如下存储CEP的维度/参考数据:
对于完全开源的项目,我会按照我在另一个回答中提到的那样去,请阅读那里的评论,专业第二(Obaid)&第三(纹理)。
对于商业项目,我会去找伏特。
非常感谢@Grainier。