如何理解cep中的数据存储?

问题描述

Pattern<Event,?> pattern = Pattern.<Event>begin("start")
    .next("middle").where(new SimpleCondition<Event>() {
        @Override
        public boolean filter(Event value) throws Exception {
            return value.getName().equals("error");
        }
    }).followedBy("end").where(new SimpleCondition<Event>() {
        @Override
        public boolean filter(Event value) throws Exception {
            return value.getName().equals("critical");
        }
    }).within(Time.seconds(10));

在此示例中,位于(Time.seconds(10))之内,

1,是否表示数据有效期为10秒?

2,到期数据是否会在10s后被删除

3,如果我未在(Time.seconds(10))内进行设置,数据是否始终有效?数据不清晰?

4,如果我没有在(Time.seconds(10))内设置越来越多的数据,它是oom吗?如何保存数据?

感谢您的帮助^^

解决方法

使用within(Time.seconds(10))意味着10秒内未完成的所有部分匹配都将被丢弃。否则,它们会一直保留到可能匹配的时间,根据模式(和数据流)的不同,它们可能永远存在。

您可以选择使用RocksDB状态后端,在这种情况下,状态保存在磁盘上,而不是内存中。但是,磁盘也是一种有限的资源。

如果您想捕获这些部分匹配,而不是在超时时简单地丢弃它们,则可以使用TimedOutPartialMatchHandler来实现。有关更多详细信息,请参见Handling Timed Out Partial Patterns上的文档。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...