複雜事件處理之持續查詢語言(CQL,continuous query language)

上回書概括了複雜事件處理的工作模式,即以事件和事件反應處理規則的方式來描述事物的變化。可以使用複雜事件處理技術模擬一定範圍內多個實體的運動變化,可以使用複雜事件處理技術實現從現實系統裏獲取需要信息,做出判斷決策的過程。[b]規則引擎和規則語言是複雜事件處理用到的一種技術手段來描述事件和規則,除此之外持續查詢語言(continuous query language)也是常用的一種技術手段。[/b]
持續查詢語言CQL使用類似SQL的語法來描述事件和事件反映處理規則。對於內存中大量的外部事件和內部對象,CQL通過查詢語句來做條件匹配,同時提供回調函數,當某個事件或者對象符合查詢條件,就調用回調函數做相應的處理。CQL提供兩種查詢方式,快照方式和持續方式。快照查詢只做一次,持續查詢類似規則引擎中的規則,只要事件和對象有變化,就執行查詢做條件匹配,有匹配上的對象就調用相應的回調函數。這個過程一直會執行下去。列個CQL的查詢語句,和SQL查詢的語法相似。
"select agent_name, total_sales, zipcode from /Concepts/Sales where total_sales >= $min"
[b]和規則語言來對比。[/b]規則語言描述的規則包括三個部分對象類別,條件,動作。CQL描述的規則類似,包括待查詢的對象類別(寫在from 之後的字段),條件(where子句)。動作是回調函數,一有符合條件的對象進入查詢結果集,就執行一次回調函數。CQL支持待查詢對象集合的窗口概念,其實就是按事件對象產生時間順序,或者時間間隔,取出其中的一部分再按查詢條件來匹配。
[b]和SQL語言對比。[/b]待查詢的對象類別相當於表,回調函數相當於觸發器。[b]持續查詢相當於視圖加觸發器的結合[/b],只要有新的對象數據或者老的對象數據有變化,視圖就發生變化同時調用觸發器程序。所以也可以使用數據庫實現來替代CQL實現。所有的事件和對象都有對應的表,新的事件和對象作爲新記錄插入表,使用視圖來做條件匹配,觸發器實現回調函數,當有匹配的記錄調用觸發器程序做相應處理。
雖然不知道CQL實現的具體機制,但由表象的功能上看,CQL相當於在內存數據庫裏,定義事件和對象的表單,管理對應數據的插入,修改,刪除。事件和對象有產生的時間戳屬性來實現窗口機制。定義視圖實現匹配規則,定義視圖上的觸發器實現動作,當規則匹配時執行觸發器。我猜想CQL的實現機制大致如此,在內存建立存儲結構保存大量對象,創建一定的索引來加速查詢。[b]持續查詢語言(CQL, continuous query language)類似於內存數據庫加視圖加觸發器的解決方案。[/b]瞭解技術的本質原理就不會被紛繁的術語所迷惑,新技術要用的準用的好。
市面上幾類常用的複雜事件處理產品Coral8, Oracle CEP用的都是CQL。TIBCO 的Business Event 是三合一的產品, 規則引擎,CQL, 狀態機都用了,公平的說在複雜事件處理領域BE還是最好用的產品。 對我個人而言,更喜歡用規則語言實現複雜事件處理的應用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章