"output"关键字的NEsper内存使用
NEsper memory usage of "output" keyword
我有很多EPL语句输出一段时间(1~24小时),下面是我的语句
"SELECT MessageID, VName, count(VName) as count FROM DDIEvent(MajorType=4).std:groupwin(VName).win:time(3 hour).win:length(10) group by VName having count(VName) >= 10 output last every 3 hour"
如果没有长度限制window,我的案例将在 3 小时内保留大约 700K 条记录。
在上面,我的测试用例只有 100 个不同的 VName。据我了解,内存中最多同时保存 1000 条记录,(100 * 10[length]) 对吗?
但是我的应用程序的内存使用量会一直增长,直到输出到侦听器。
内存使用与没有长度的示例几乎相同 window.
在输出给监听器后,内存显着下降。
然后,又开始一个循环,内存慢慢增长,直到3小时后。
我已经查看了文档,没有找到"output"关键字的内存相关主题。
有谁知道真正的根本原因是什么?以及如何避免?或者只是我的 EPL 的问题?
谢谢~
如果您的查询从 select 子句中删除 "MessageId",它将成为常规聚合查询。您可以改为 "last(MessageId)" 。因为 "MessageId" 在那里,引擎提供的行是每个事件的一行,而不是每个聚合组的一行。
我有很多EPL语句输出一段时间(1~24小时),下面是我的语句
"SELECT MessageID, VName, count(VName) as count FROM DDIEvent(MajorType=4).std:groupwin(VName).win:time(3 hour).win:length(10) group by VName having count(VName) >= 10 output last every 3 hour"
如果没有长度限制window,我的案例将在 3 小时内保留大约 700K 条记录。
在上面,我的测试用例只有 100 个不同的 VName。据我了解,内存中最多同时保存 1000 条记录,(100 * 10[length]) 对吗?
但是我的应用程序的内存使用量会一直增长,直到输出到侦听器。
内存使用与没有长度的示例几乎相同 window.
在输出给监听器后,内存显着下降。
然后,又开始一个循环,内存慢慢增长,直到3小时后。
我已经查看了文档,没有找到"output"关键字的内存相关主题。
有谁知道真正的根本原因是什么?以及如何避免?或者只是我的 EPL 的问题?
谢谢~
如果您的查询从 select 子句中删除 "MessageId",它将成为常规聚合查询。您可以改为 "last(MessageId)" 。因为 "MessageId" 在那里,引擎提供的行是每个事件的一行,而不是每个聚合组的一行。