如何在 wso2cep 中设置事件流的优先级?
How can I set priority on event flows in wso2cep?
比方说,我们有几个事件流。其中一些将引用数据加载到 hazelcast 事件表,而其他则是实际的事件处理器。
我的 objective 是,当 wso2cep 服务器启动时,它会首先 运行 那些正在将参考数据加载到 hazelcast 事件表的事件流,然后它会启动其他流。
这将帮助我们在所有事件处理器流中保持引用数据的一致性。
除了在单个执行计划中加载外,我看不到其他选项。
有两个选项:
- 使用触发器定期从 RDBMS 加载参考数据到 Hazelcast。实际过程将使用来自Hazelcast table(此执行计划已在下面提供)
- 从 RDBMS 加载并缓存它。
所以,此时此刻,我的问题是:
- 哪个在内存利用率方面更好?
- 在事件处理速度方面哪个更好?
- 如有其他更好的方法请指教
执行计划
@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 数据:
对于完全开源的项目,我会按照我在另一个答案中提到的那样去做,请阅读那里的评论,专业 2nd(Obaid) 和 3rd(Grainier)。
对于商业项目,我会选择 voltdb。
谢谢大家,特别是@Grainier。
比方说,我们有几个事件流。其中一些将引用数据加载到 hazelcast 事件表,而其他则是实际的事件处理器。
我的 objective 是,当 wso2cep 服务器启动时,它会首先 运行 那些正在将参考数据加载到 hazelcast 事件表的事件流,然后它会启动其他流。
这将帮助我们在所有事件处理器流中保持引用数据的一致性。
除了在单个执行计划中加载外,我看不到其他选项。 有两个选项:
- 使用触发器定期从 RDBMS 加载参考数据到 Hazelcast。实际过程将使用来自Hazelcast table(此执行计划已在下面提供)
- 从 RDBMS 加载并缓存它。
所以,此时此刻,我的问题是:
- 哪个在内存利用率方面更好?
- 在事件处理速度方面哪个更好?
- 如有其他更好的方法请指教
执行计划
@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 数据:
对于完全开源的项目,我会按照我在另一个答案中提到的那样去做,请阅读那里的评论,专业 2nd(Obaid) 和 3rd(Grainier)。
对于商业项目,我会选择 voltdb。
谢谢大家,特别是@Grainier。