在实际项目中,常常会需要输入数据不断的条件下,在线修改规则。例如:交易策略中,以一定时间窗口的价格平均值和阈值比较决定交易行为。当时间窗口滑动过程中,需要修改阈值。如果单纯的停掉这条EPL,修改,再启动,之前的时间窗口的数据就会丢失,即使不丢失,因为阈值变了,之前的中间结果也不能再用。这种情况下,要保证数据的不丢失,同时保证结果的可解释性,就需要用到SODBASECEP的hot swap在线修改规则功能。
前提条件是CEP模型中输入适配器不改变。SODSQL和输出适配器可以在线改变。要实现Hot Swap的CEP模型中最好只包含一个SODSQL语句。
(2)以Hot Swap模式停止EPL。EPL并没有真正停止,而是处于允许修改EPL了。
(3)以Hot Swap模式重启EPL。修改完EPL,启动新的EPL。
(2)和(3)之间的时间不能过长,导致输入累积过多而超过队列允许的最大长度。
注意:要给configuration/global.properties中maxqueuelength配置足够大,表示缓冲的事件数,能容得下hotswap切换过程中的事件。
以服务器方式使用Hot Swap功能时,则通过Web service接口或RESTful接口进行调用。
SODBASE CEP用于轻松、高效实施数据监测、监控类、实时交易类项目
。EPL语法见
SODSQL写法与示例
。图形化建模请使用
SODBASE Studio
。嵌入式方式编程参见运行第一个EPL例子。与Storm集成参见EPL与Storm集成。
前提条件是CEP模型中输入适配器不改变。SODSQL和输出适配器可以在线改变。要实现Hot Swap的CEP模型中最好只包含一个SODSQL语句。
1.示例操作步骤
(1)下载JAVA-API-Example-2.0.*.zip,导入Eclipse中
(2)运行com.example.hotswap.HotSwapExample.java
(3)输出结果
2.工作原理
SODBASE CEP提供的在线修改规则接口有三个,需要配套使用。
(1)以Hot Swap模式启动EPL。要使用Hot Swap功能必须以此方式启动EPL。(2)以Hot Swap模式停止EPL。EPL并没有真正停止,而是处于允许修改EPL了。
(3)以Hot Swap模式重启EPL。修改完EPL,启动新的EPL。
(2)和(3)之间的时间不能过长,导致输入累积过多而超过队列允许的最大长度。
另外,实现Hot Swap的EPL模型,如果同一时间点有许多数据,就在中途修改规则。为保证语义的完整性和不丢失结果数据,这一时间点的数据将按新的规则重新计算。所以可能在这一时间点产生重复结果数据。解决方法:在此EPL后级联一个Filter,这个Filter用Watermark去重输出。
以嵌入式方式使用Hot Swap功能的话,可以使用下面示例Java代码中的API。
static public void main(String[] args)
{
GraphModelData graphModelData = GraphModelExecutorUtil
.convertXmlToObject("files/hotswap/demoquery.xml");
graphModelData.getSODSQLs().clear();
//使用HotSwap时,查询名称demoquery、流名称stock与原模型保持不变
graphModelData
.getSODSQLs()
.add("CREATE QUERY demoquery SELECT T1._start_time_ AS id,T1.name AS name,T1.price AS price FROM T1:stock PATTERN T1 WHERE T1.price>80 WITHIN 0");
GraphModelExecutorI graphModelExecutor = new GraphModelExecutorImpl();
try
{
// 以Hot Swap模式启动EPL
graphModelExecutor.executeGraphModelHotSwap(graphModelData, "demo");
Thread.sleep(10000);
// 以Hot Swap模式停止EPL
graphModelExecutor.stopGraphModelHotSwap();
System.out.println("restart hotswap ");
Thread.sleep(10000);
// 修改 SODSQL,输入不停止
graphModelData.getSODSQLs().clear();
graphModelData
.getSODSQLs()
.add("CREATE QUERY demoquery SELECT T1._start_time_ AS id,T1.name AS name,T1.price AS price FROM T1:stock PATTERN T1 WHERE T1.price>50 WITHIN 0");
} catch (InterruptedException e)
{
e.printStackTrace();
}
// 以Hot Swap模式重启EPL
graphModelExecutor.restartGraphModelHotSwap(graphModelData, "demo");
}
注意:要给configuration/global.properties中maxqueuelength配置足够大,表示缓冲的事件数,能容得下hotswap切换过程中的事件。
以服务器方式使用Hot Swap功能时,则通过Web service接口或RESTful接口进行调用。
SODBASE CEP用于轻松、高效实施数据监测、监控类、实时交易类项目
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)