2011-02-14 55 views
4

我正在尋找一個CEP引擎,但我不知道是否有發動機符合我的要求。 我的系統必須處理多個事件數據流並生成複雜的事件,這正是幾乎任何CEP引擎完全適合的(ESPER,Drools)。CEP是什麼,我需要(系統狀態和事件回放)

我存儲在數據庫中的所有原始事件(這不是CEP一部分,但我這樣做),並使用規則(或continious查詢或東西)來生成複雜事件的自定義操作。但我的一些規則依賴於過去的事件。例如:如果我的配偶每次來到或離開家,我都會有一個傳感器發送事件,如果我的車和我的奇特女人的車都在房子附近,我會收到短信「危險」。

問題是,重新啓動事件處理服務時,我失去了有關係統狀態的所有信息(是我妻子在家嗎?)並恢復它,我需要在未知的一段時間重放事件。系統狀態不僅取決於原始事件,還取決於複雜事件。

同樣的問題出現時,我需要在過去複雜事件的一些報道。我有存儲在數據庫中的原始事件數據,並且可以生成這些複雜的事件來重放原始事件,但我不知道我必須重播它們的確切時間。

同時很明顯,對於大多數規則,可以自動查找要從過去(或加載要處理的事件的時間段)處理的事件數量以自動恢復系統狀態。 如果給定的行動取決於我妻子在家的存在,CEP系統必須要求最後狀態更改。如果要求報告複雜事件並且複雜事件取決於前一時間段內的平均價格,則應重播此期間的所有價格變動事件。等等...

如果我錯過了什麼?

回答

0

我不知道,如果你的問題是,目前的CEP產品是否提供參加現場活動的歷史數據,但如果這是你需要什麼,艾斯波允許你從JDBC源獲取數據(與您的生活連接你的歷史數據事件)並將其反映在您的EPL聲明中。我想你已經檢查了Esper網站,如果沒有,你會看到Esper有很多食譜示例的優秀文檔

但即使你在你的現場活動之後建模你的歷史事件,這並不能解決你的問題選擇正確的時間範圍,並且如您所寫,這個時間框架與用例有關。如果我沒有記錯

3

RuleCore CEP Server可能會解決你的問題。如果重新啓動它,它不會丟失狀態,並且它包含虛擬邏輯時鐘,以便您可以使用任何時間概念重播事件。

+0

......並且它包含對規則語言中位置的支持,因此諸如「當人進入區域A,B或C時警覺」很容易......它記得事物的狀態是調用實體,並且這使得記住你的妻子現在在哪裏 – Simon 2011-03-31 22:03:56

0

正如前面所提到的人,我不認爲你的問題是一個真正的引擎問題,但更多的是用例之一。我熟悉的所有引擎(包括Drools Fusion和Esper)都可以將傳入的事件與來自外部源(如數據庫)的歷史數據和/或狀態數據按需查詢結合在一起。在我看來,你需要做的是在發生相關變化時保持狀態(或「時間戳檢查點」),並在重新啓動時重新加載狀態,而不是在未知時間幀內重放事件。

或者,如果使用Drools,則可以檢查現有規則(對規則/查詢的反射類型),以確定您的規則需要哪些類型的事件並回溯事件日誌,直到滿足所有要求的時間點並使用會話時鐘從那裏加載/重放您的活動。

最後,您可以使用羣集來減少重新啓動,但這並不能解決您描述的問題。

希望它有幫助。