原文連結:http://seroter.wordpress.com/2010/06/22/6-things-to-know-about-microsoft-streaminsight/
Microsoft StreamInsight 是SQL Server 2008 R2中的一個新產品。它是微軟首次涉足事件流處理以及複雜事件處理市場所推出的產品,儘管這個市場已經具有了成熟產品和思想領袖的份額。我花費了超過8個月的時間在這個產品上,我覺得我應當嘗試告訴你們一些瞭解StreamInsight產品所需要知道的事情。
- 事件處理關注的是持續智能。
事件可以是各種各樣的事情:它可以是使用者變更住址,也可以是從電錶中讀取度數。當你有一個事件驅動的架構時,你就會和資料的非同步通訊打交道,因為它發生在消費者根據資料選擇採取何種行動之時。所謂“複雜事件處理”,是指從多個(簡單的)商務事件中收集知識,並總結成更小的事件集合。使用StreamInsight可以從多個資料流中串連資料,並檢測出通過群體智慧才可見的事件模式。與傳統資料庫驅動應用(通過不斷在標準資料集中提交查詢)不同,事件處理方案是在事件數目據通過時部署一系列編譯過的查詢。這對於大部分人來說都是一個模式的改變,並且想一時半會轉變過來也不太容易,但毫無疑問它對於完善企業的商務智能戰略以及提高資訊可用信都是備受關注的。
- 使用LINQ編寫查詢。
StreamInsight小組選擇LINQ作為編寫聲明性查詢的機制。正如你所料,你可以編寫各種不同的查詢來過濾內容、串連不同資料流、執行計算等等。如果我希望客戶話務中心在每一次客戶投訴中出現特定產品名時,能夠迅速發送一個事件該怎麼做呢?下面的查詢可以過濾掉所有提及的其他產品而重點放在目標產品的事件上:
var filterQuery = from e in callCenterInputStream where e.Product == "Seroterum" select e;
StreamInsight查詢的一個重要方面就是彙總(aggregation)。單個事件的計算和過濾還可以,但假設我們想知道的是發生在一段時間內的結果呢?這個時候視窗(windows)概念就發揮作用了。如果想要執行1次計數、求平均值或者事件匯總,只需要指定感興趣的一段特定時間的視窗。例如,想要知道一個網站在過去15分鐘裡最熱門的頁面,並且希望每隔1分鐘就重新計算一次,即每1分鐘計算過去15分鐘內點擊每個頁面的次數。這就是跳動視窗(Hopping Window)。
var activeSessions = from w in websiteInputStream group w by w.PageName into pageGroup from x in pageGroup.HoppingWindow( TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(1), HoppingWindowOutputPolicy.ClipToWindowEnd) select new PageSummarySummary { PageName = pageGroup.Key, TotalRequests = x.Count() };
我會在接下去的博文中介紹更多關於這個話題的內容,但現在你只要知道,在StreamInsight中還有其它類型的視窗。
這裡我強烈建議你閱讀StreamInsight小組的關於此話題的文章。
-
查詢可重複使用且可彼此連結。
事件處理方案不錯的地方在於它能夠連結查詢。考慮這樣一個情境:第一個查詢每秒接受數以千計的事件,在過濾雜訊得到我僅關心的事件子集。之後我可以將這個查詢的輸出用在另外一個查詢中,用來在這個更具針對性的事件流中進行計算或彙總。或者考慮“pub/sub”訂閱的情境,從一個資料來源處擷取到資料流事件,但卻具有多個輸出目標。查詢可以從一個流中擷取結果,並應用在許多其他流中。
-
StreamInsight對於輸入輸出資料使用適配器模型。
構建一個StreamInsight方案的結果往往會變成建立或者使用適配器。雖然StreamInsight本身沒有附帶任何產品級的適配器,但所幸地是我們可以找到許多最佳實務的優秀範例。在我即將推出的新書中,會展示如何如何構建一個MSMQ適配器:從隊列中讀取資料並送入StreamInsight引擎。適配器可以通過泛型或無類型的方式編寫以達到簡單重用,或者也可以通過加入期望的特定事件裝載進行編寫。正如你所料,編寫特定的適配器要簡單一些,然而構建可重用的,泛型的適配器明顯對長遠更有益處。
-
多個宿主選擇。
如果讓你選擇宿主,你可以選擇建立同進程的StreamInsight伺服器來託管查詢並使用適配器串連到資料發行者和使用者。這差不多算是構建StreamInsight最容易的,也是最能夠控制引擎的方案。還有一個選擇,你可以將StreamInsight安裝為機器上的Windows服務,並用它作為中心伺服器。前者方案使用“Server.Create()”進行操作,後者使用“Server.Connect()”的方式與引擎互動。我正在就如何使用遠程伺服器的選項撰寫一篇博文,敬請關注。而現在你只需知道可以選擇宿主的方式。
-
StreamInsight的調試工具不錯,但總體管理功能不夠成熟。
StreamInsight產品發布了一個相當有趣的調試工具,這個工具也是唯一一個可以用來對伺服器進行初步管理的圖形介面。,當你串連到一個伺服器(不管是獨立進程還是宿主類型)時,你可以看到已經部署的應用和查詢。
當一個查詢運行時,你可以選擇錄製活動並重播流。當你看到自己的查詢通過各種不同的LINQ操作(如串連,計數)進行處理時,感覺肯定不錯!
調試器包含了許多不錯的問題根源分析能力以及在查詢步驟中跟蹤事件。你還可以獲得許多伺服器端關於引擎和查詢的診斷資訊。儘管如此,再沒有其他的圖形化工具可以用來管理伺服器了。當然你會發現可以通過編寫代碼或使用PowerShell來執行其他的管理工作。我非常期待社區工具和產品組提供的範例能夠填補這一空缺,也希望未來發布的產品中能夠包含一個更加魯棒的管理介面。
以上是對StreamInsight的一個簡要介紹,如果你想要瞭解更多內容,可以閱讀我的新書中關於StreamInsight的一章內容,此外我還在該書的網站上維護了一個關於StreamInsight資源的頁面。