簡體   English   中英

Drools中有狀態的session memory管理

[英]Stateful session memory management in Drools

在 Drools 中使用“有狀態會話”時,有一個關於 memory 管理的一般性問題。 對於上下文,我特別希望在“流”模式下使用 ksession 以及fireUntilHalt()來處理無限的 stream 事件。 每個事件都有時間戳,但我主要使用基於長度的 windows 符號(即window:length() )和用於決策的from accumulate語法編寫規則。

盡管關於 memory 管理在這種情況下的工作方式,文檔有點含糊。 文檔建議使用時間運算符,引擎可以自動刪除任何不再匹配的事實/事件。 但是,這是否也適用於僅使用window:length()的規則? 或者我的系統是否需要手動刪除不再適用的事件,以防止運行 OOM?

window:time()計算到期時間,因此適用於自動刪除。 但是, window:length()不會計算到期時間,因此事件將被保留。

您可以通過我的示例確認行為: https://github.com/tkobayas/kiegroup-examples/tree/master/Ex-cep-window-length-8.32

僅供參考) https://github.com/kiegroup/drools/blob/8.32.0.Final/drools-core/src/main/java/org/drools/core/rule/SlidingLengthWindow.java#L145

您需要明確刪除它們或設置@expires (如果您的應用程序可以指定隨時間到期)以避免 OOME。

謝謝指點,文檔說的不清楚。 我已經提交了一份 JIRA 文檔來解釋它。

https://issues.redhat.com/browse/DROOLS-7282

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM