SODBASE CEP学习(十):在线动态修改EPL规则

在实际项目中,常常会需要输入数据不断的条件下,在线修改规则。例如:交易策略中,以一定时间窗口的价格平均值和阈值比较决定交易行为。当时间窗口滑动过程中,需要修改阈值。如果单纯的停掉这条EPL,修改,再启动,之前的时间窗口的数据就会丢失,即使不丢失,因为阈值变了,之前的中间结果也不能再用。这种情况下,要保证数据的不丢失,同时保证结果的可解释性,就需要用到SODBASECEP的hot swap在线修改规则功能。
前提条件是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用于轻松、高效实施数据监测、监控类、实时交易类项目 微笑 。EPL语法见 SODSQL写法与示例 。图形化建模请使用 SODBASE Studio 。嵌入式方式编程参见运行第一个EPL例子。与Storm集成参见EPL与Storm集成



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值