新聞中心
StreamInsight 流處理體系結(jié)構(gòu)和熟悉的基于.NET 的開(kāi)發(fā)平臺(tái)使開(kāi)發(fā)人員可以快速實(shí)現(xiàn)強(qiáng)大而高效的事件處理應(yīng)用程序。本文我們主要就介紹一下利用Microsoft StreamInsight控制較大數(shù)據(jù)流的具體方法,接下來(lái)就讓我們一起來(lái)了解一下這部分內(nèi)容吧。

目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、門(mén)頭溝網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
利用Microsoft StreamInsight 控制較大數(shù)據(jù)流
生產(chǎn)線的產(chǎn)量下降后,將容易出現(xiàn)用戶(hù)媒體流跳過(guò)這些流程,或者您的一個(gè)產(chǎn)品成為了“必需產(chǎn)品”的情況。真正的竅門(mén)是在這些情況發(fā)生時(shí)進(jìn)行識(shí)別,或根據(jù)以往趨勢(shì)對(duì)其做出預(yù)測(cè)。
成功預(yù)測(cè)這些情況需要使用近乎實(shí)時(shí)的方法。在對(duì)相關(guān)數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)換并加載到 SQL Server Analysis Services (SSAS) 等傳統(tǒng)商業(yè)智能 (BI) 解決方案中時(shí),情況早已發(fā)生改變。同樣,一些系統(tǒng)依靠請(qǐng)求-響應(yīng)模式來(lái)從事務(wù)性數(shù)據(jù)存儲(chǔ)(如 SQL Server Reporting Services 或 SSRS、報(bào)告)中請(qǐng)求已更新的數(shù)據(jù),像這樣的系統(tǒng)總是在接近請(qǐng)求-輪詢(xún)間隔結(jié)束時(shí)運(yùn)行陳舊數(shù)據(jù)。輪詢(xún)間隔通常是固定的,因此即使突然發(fā)生有趣的活動(dòng),消耗系統(tǒng)也不會(huì)知道,直到進(jìn)入下一個(gè)間隔。相反,消耗系統(tǒng)應(yīng)該在滿(mǎn)足趣味條件時(shí)連續(xù)收到通知。
在檢測(cè)新興趨勢(shì)時(shí),時(shí)間間隔至關(guān)重要 - 在過(guò)去的五分鐘內(nèi),一個(gè)特定項(xiàng)目發(fā)生了 100 次購(gòu)買(mǎi),顯而易見(jiàn),這比過(guò)去五個(gè)月間的持續(xù)購(gòu)買(mǎi)更能指示新興趨勢(shì)。SSAS 和 SSRS 等傳統(tǒng)系統(tǒng)需要開(kāi)發(fā)人員通過(guò)事務(wù)性存儲(chǔ)中多維數(shù)據(jù)集或時(shí)間戳列中的單獨(dú)維度來(lái)自行跟蹤數(shù)據(jù)的及時(shí)性。理論上,用于識(shí)別新興情況的工具可能具有時(shí)間內(nèi)置的概念,并能提供使用該工具所需的豐富 API。
最后,對(duì)未來(lái)的準(zhǔn)確指示來(lái)源于對(duì)過(guò)去的分析。實(shí)際上,這就是傳統(tǒng) BI 的所有功能 - 對(duì)大量的歷史數(shù)據(jù)進(jìn)行匯總和分析,從而識(shí)別趨勢(shì)。遺憾的是,與更多的事務(wù)性系統(tǒng)相比,在使用這些系統(tǒng)時(shí)需要不同的工具和查詢(xún)語(yǔ)言。成功識(shí)別新興情況需要實(shí)現(xiàn)過(guò)去數(shù)據(jù)和當(dāng)前數(shù)據(jù)的無(wú)縫關(guān)聯(lián)。只有當(dāng)對(duì)這兩種數(shù)據(jù)使用相同的工具和查詢(xún)語(yǔ)言時(shí),才可能實(shí)現(xiàn)這種緊密集成。
對(duì)于生產(chǎn)線監(jiān)視等特定情況,可通過(guò)存在的針對(duì)性極強(qiáng)的自定義工具來(lái)執(zhí)行這些功能,但是這些工具通常比較昂貴且用途并不廣泛。
為了防止生產(chǎn)線產(chǎn)量下降或確保您的產(chǎn)品定價(jià)合適,關(guān)鍵在于具有足夠的響應(yīng)能力,能夠根據(jù)情況的更改而進(jìn)行識(shí)別與調(diào)整。若要輕松快速地識(shí)別這些情況,歷史查詢(xún)和實(shí)時(shí)查詢(xún)應(yīng)使用相同的開(kāi)發(fā)人員友好的工具集和查詢(xún)語(yǔ)言,系統(tǒng)應(yīng)該以近乎實(shí)時(shí)的方式來(lái)處理大量的數(shù)據(jù)(大約為每秒成百上千個(gè)事件),同時(shí)引擎應(yīng)該足夠靈活,能夠處理跨越多個(gè)問(wèn)題域的情況。
幸運(yùn)的是,存在這樣的工具。它稱(chēng)為 Microsoft StreamInsight。
StreamInsight 體系結(jié)構(gòu)概述
StreamInsight 是一種復(fù)雜事件處理引擎,它每秒能夠處理成百上千的事件,且延遲極低。它可以由任何進(jìn)程(如 Windows 服務(wù))托管,也可以直接嵌入任何應(yīng)用程序。StreamInsight 具有簡(jiǎn)單的適配器模型,用于輸入和輸出數(shù)據(jù),并且實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)的查詢(xún)像任何其他來(lái)自任何 Microsoft .NET Framework 語(yǔ)言的程序集一樣使用獲取的相同 LINQ 語(yǔ)法。其作為 SQL Server 2008 R2 的一部分授予許可。
StreamInsight 的高級(jí)體系結(jié)構(gòu)非常簡(jiǎn)單:通過(guò)輸入適配器從各種源收集事件。這些事件均通過(guò)查詢(xún)進(jìn)行分析和轉(zhuǎn)換,并且查詢(xún)結(jié)果通過(guò)輸出適配器分發(fā)給其他系統(tǒng)和人?! D 1 顯示了這一簡(jiǎn)單結(jié)構(gòu)。
圖 1 Microsoft StreamInsight 高級(jí)體系結(jié)構(gòu)
就像面向服務(wù)的體系結(jié)構(gòu)關(guān)注消息,而數(shù)據(jù)庫(kù)系統(tǒng)關(guān)注行一樣,StreamInsight 等復(fù)雜事件處理系統(tǒng)按照事件進(jìn)行組織。事件是簡(jiǎn)單的數(shù)據(jù)段以及與該數(shù)據(jù)相關(guān)的時(shí)間 - 與一天中特定時(shí)間的傳感器讀數(shù)或股票行情價(jià)格相似。事件所攜帶的數(shù)據(jù)稱(chēng)為它的負(fù)載。
StreamInsight 支持三種類(lèi)型的事件。點(diǎn)事件是即時(shí)且不持續(xù)的事件。間隔事件是其負(fù)載與特定時(shí)間段相關(guān)的事件。邊緣事件與間隔事件相似,但當(dāng)邊緣事件到達(dá)時(shí),其持續(xù)時(shí)間未知。而系統(tǒng)設(shè)置了開(kāi)始時(shí)間,且事件實(shí)際上具有無(wú)限持續(xù)時(shí)間,直到另一個(gè)邊緣事件到達(dá)才會(huì)為這一事件設(shè)置結(jié)束時(shí)間。例如,速度計(jì)讀數(shù)可能為點(diǎn)事件,因?yàn)樗粩喔?,但是超市的牛奶價(jià)格可能為邊緣事件,因?yàn)槠潢P(guān)聯(lián)時(shí)間較長(zhǎng)。當(dāng)牛奶的零售價(jià)格更改時(shí)(比如,由于分銷(xiāo)商定價(jià)發(fā)生更改),新價(jià)格的持續(xù)時(shí)間未知,因此,與間隔事件相比,邊緣事件要更為合適。稍后,當(dāng)分銷(xiāo)商再次更新其定價(jià)時(shí),新的邊緣事件將覆蓋先前定價(jià)更改的持續(xù)時(shí)間,而另一個(gè)邊緣事件將設(shè)置新的價(jià)格以便繼續(xù)。
StreamInsight 中的輸入適配器和輸出適配器是適配器設(shè)計(jì)模式的抽象示例。StreamInsight 引擎在其自有的事件表示上運(yùn)行,但是這些事件的實(shí)際來(lái)源可能有較大差異,范圍從專(zhuān)有接口到硬件傳感器到由企業(yè)的應(yīng)用程序生成的狀態(tài)消息。輸入適配器將源事件轉(zhuǎn)換為引擎能夠理解的事件流。
來(lái)自 StreamInsight 查詢(xún)的結(jié)果表示特定商業(yè)知識(shí),且能夠高度專(zhuān)業(yè)化。將這些結(jié)果路由至最合適的地點(diǎn),這點(diǎn)至關(guān)重要。輸出適配器可用于將事件的內(nèi)部表示轉(zhuǎn)換為打印到控制臺(tái)的文本、通過(guò) Windows Communication Foundation (WCF) 發(fā)送到另一個(gè)系統(tǒng)以供處理的消息,甚至 Windows Presentation Foundation 應(yīng)用程序中圖表上的點(diǎn)。有關(guān)使用文本文件、WCF 和 SQL 等的示例適配器可從 streaminsight.codeplex.com 獲得。
StreamInsight Queries by Example
乍一看,StreamInsight 查詢(xún)似乎與從數(shù)據(jù)庫(kù)中查詢(xún)行相似,但是兩者之間存在重大差異。查詢(xún)數(shù)據(jù)庫(kù)時(shí),系統(tǒng)會(huì)構(gòu)造并執(zhí)行查詢(xún),同時(shí)返回結(jié)果。如果基礎(chǔ)數(shù)據(jù)發(fā)生更改,輸出并不會(huì)因?yàn)橐堰\(yùn)行查詢(xún)而受影響。數(shù)據(jù)庫(kù)查詢(xún)結(jié)果表示某一時(shí)刻的快照,可以通過(guò)請(qǐng)求-響應(yīng)模式使用。
StreamInsight 查詢(xún)?yōu)楝F(xiàn)有查詢(xún)。隨著新輸入事件的到達(dá),查詢(xún)不斷響應(yīng),并且根據(jù)需要?jiǎng)?chuàng)建新的輸出事件。
本文中的查詢(xún)示例來(lái)自可供下載的示例解決方案。這些示例開(kāi)始較簡(jiǎn)單,但隨著查詢(xún)語(yǔ)言新功能的引入,功能變得更加強(qiáng)大。所有查詢(xún)都使用同一負(fù)載類(lèi)。以下是一個(gè)簡(jiǎn)單類(lèi)的定義,該類(lèi)具有 Region 屬性和 Value 屬性:
- public class EventPayload
- {
- public string Region { get; set; }
- public double Value { get; set; }
- public override string ToString()
- {
- return string.Format("{0}\t{1:F4}", Region, Value);
- }
- }
示例應(yīng)用程序中的查詢(xún)使用一臺(tái)輸入適配器和一臺(tái)輸出適配器來(lái)進(jìn)行,輸入適配器可隨機(jī)生成數(shù)據(jù),輸出適配器只需將各事件寫(xiě)入控制臺(tái)。為清晰起見(jiàn),對(duì)示例應(yīng)用程序中的適配器進(jìn)行了簡(jiǎn)化。
若要運(yùn)行每個(gè)查詢(xún),請(qǐng)?jiān)谑纠鉀Q方案中取消注釋 Program.cs 文件中的行,該示例解決方案可將查詢(xún)分配給稱(chēng)為“template”的本地變量。
以下是一個(gè)基本查詢(xún),它通過(guò) Value 屬性來(lái)篩選事件:
- var filtered =
- from i in inputStream
- where i.Value > 0.5
- select i;
具有使用 LINQ 經(jīng)驗(yàn)的任何開(kāi)發(fā)人員應(yīng)該非常熟悉此查詢(xún)。因?yàn)?StreamInsight 使用 LINQ 作為它的查詢(xún)語(yǔ)言,因此此查詢(xún)與 LINQ to SQL 查詢(xún)類(lèi)似,訪問(wèn)數(shù)據(jù)庫(kù)或?qū)?IList 進(jìn)行內(nèi)存中篩選。當(dāng)事件從輸入適配器到達(dá)時(shí),其負(fù)載將受到檢查,并且如果 Value 屬性的值大于 0.5,事件將被傳遞到輸出適配器,并在此將其打印到控制臺(tái)。
應(yīng)用程序運(yùn)行時(shí),可以看到事件不斷到達(dá)輸出中。這實(shí)際上是一個(gè)推模型。當(dāng)事件到達(dá)時(shí),StreamInsight 會(huì)計(jì)算來(lái)自輸入的新輸出事件,這與數(shù)據(jù)庫(kù)等拉模型不同,在拉模型中,應(yīng)用程序必須定期輪詢(xún)數(shù)據(jù)源,以查看新數(shù)據(jù)是否已經(jīng)到達(dá)。這能與 Microsoft .NET Framework 4 中可用的 IObservable 支持完美結(jié)合,我們將在后續(xù)章節(jié)中對(duì)此進(jìn)行介紹。
使用推模型代替輪詢(xún)來(lái)處理連續(xù)數(shù)據(jù)是個(gè)非常好的主意,但是 StreamInsight 的真正功能體現(xiàn)在查詢(xún)時(shí)間相關(guān)的屬性上。當(dāng)事件通過(guò)輸入適配器到達(dá)時(shí),它們獲得了一個(gè)時(shí)間戳。該時(shí)間戳可能來(lái)自數(shù)據(jù)源本身(假設(shè)事件表示歷史數(shù)據(jù),且?guī)в杏糜诖鎯?chǔ)時(shí)間的顯示列),或者可以設(shè)置為事件到達(dá)的時(shí)間。實(shí)際上,時(shí)間是 StreamInsight 查詢(xún)語(yǔ)言中的第一個(gè)類(lèi)。
查詢(xún)通常與標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)查詢(xún)類(lèi)似,標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)查詢(xún)?cè)谖膊空迟N有時(shí)間限制符,如“每五秒”或“五秒的時(shí)間跨度上每三秒”。例如,以下是一個(gè)簡(jiǎn)單查詢(xún),它每五秒查詢(xún)一次 Value 屬性的平均值:
- var aggregated =
- from i in inputStream.TumblingWindow(TimeSpan.FromSeconds(5),
- HoppingWindowOutputPolicy.ClipToWindowEnd)
- select new { Avg = i.Avg(p => p.Value)};
數(shù)據(jù)窗口
因?yàn)闀r(shí)間概念是復(fù)雜事件處理系統(tǒng)的基礎(chǔ)必需概念,因此應(yīng)以簡(jiǎn)單的方式來(lái)使用系統(tǒng)中查詢(xún)邏輯的時(shí)間組件,這點(diǎn)非常重要。StreamInsight 使用窗口概念來(lái)表示按時(shí)間分組。之前的查詢(xún)使用翻轉(zhuǎn)窗口。應(yīng)用程序運(yùn)行時(shí),查詢(xún)將每五秒生成單個(gè)輸出事件(窗口的大?。]敵鍪录硎厩拔迕氲钠骄?。像 LINQ to SQL 或 LINQ to Object 一樣,聚合方法(如 Sum 和 Average)能夠?qū)磿r(shí)間分組的事件匯總為單個(gè)值,或可以使用 Select 將輸出投影成不同格式。
翻轉(zhuǎn)窗口只是另一種窗口類(lèi)型的特例:跳躍窗口。跳躍窗口也有大小,但是它們也具有不等于其窗口大小的跳躍大小。這表示跳躍窗口可以互相重疊。
例如,窗口大小為五秒、跳躍大小為三秒的跳躍窗口將每三秒生成輸出(跳躍大?。?,提供前五秒的平均值(窗口大小)。它一次向前跳躍三秒,且持續(xù)五秒。圖 2 顯示分組為翻轉(zhuǎn)窗口和跳躍窗口的事件流。
圖 2 翻轉(zhuǎn)窗口和跳躍窗口
請(qǐng)注意,翻轉(zhuǎn)窗口并不重疊,但是對(duì)于跳躍窗口,如果跳躍大小小于窗口大小,則可以重疊。如果窗口重疊,事件將可能在多個(gè)窗口中結(jié)束,如同時(shí)存在于窗口 1 和窗口 2 中的第三個(gè)事件。邊緣事件(具有持續(xù)時(shí)間)也可能在窗口邊緣重疊,并在多個(gè)窗口中結(jié)束,如翻轉(zhuǎn)窗口中的倒數(shù)第二個(gè)事件。
另一種常見(jiàn)窗口類(lèi)型為計(jì)數(shù)窗口。計(jì)數(shù)窗口包含特定數(shù)量的事件,而不是某一時(shí)間點(diǎn)或時(shí)間段內(nèi)的事件。要查詢(xún)最后三個(gè)到達(dá)的事件的平均數(shù),可能需要使用計(jì)數(shù)窗口。計(jì)數(shù)窗口當(dāng)前的一個(gè)限制是不支持 Sum 和 Average 等內(nèi)置聚合方法。您必須創(chuàng)建用戶(hù)定義的聚合。下文會(huì)對(duì)這一簡(jiǎn)單流程進(jìn)行介紹。
最后一種窗口類(lèi)型為快照窗口。在邊緣事件的環(huán)境下,快照窗口最容易理解。每次事件的開(kāi)始或結(jié)束即表示當(dāng)前窗口的完成和新窗口的開(kāi)始。圖 3 顯示如何將邊緣事件分組為快照窗口。請(qǐng)注意每個(gè)事件邊界觸發(fā)窗口邊界的方式。E1 開(kāi)始,w1 也開(kāi)始。當(dāng) E2 開(kāi)始時(shí),w1 完成,而 w2 開(kāi)始。下個(gè)邊緣是 E1 結(jié)束,使得 w2 完成,而 w3 開(kāi)始。結(jié)果為三個(gè)窗口:包含 E1 的 w1,包含 E1 和 E2 的 w2 以及包含 E3 的 w3。事件分組為窗口后,它們會(huì)受到拉伸,從而使事件的開(kāi)始與結(jié)束時(shí)間與窗口的相同。
圖 3 快照窗口
更多復(fù)雜查詢(xún)
在提供可用窗口與基本查詢(xún)方法(如地點(diǎn)、分組依據(jù)和排序依據(jù))的情況下,可以進(jìn)行多種查詢(xún)。以下是一個(gè)查詢(xún),其將輸入事件按地區(qū)分組,然后使用跳躍窗口來(lái)輸出最后一分鐘各個(gè) Region 的負(fù)載 Value 的總和:
- var payloadByRegion =
- from i in inputStream
- group i by i.Region into byRegion
- from c in byRegion.HoppingWindow(
- TimeSpan.FromMinutes(1),
- TimeSpan.FromSeconds(2),
- HoppingWindowOutputPolicy.ClipToWindowEnd)
- select new {
- Region = byRegion.Key,
- Sum = c.Sum(p => p.Value)};
這些窗口使用兩秒的跳躍大小,因此引擎每?jī)擅氚l(fā)送輸出事件。
因?yàn)椴樵?xún)運(yùn)算符是在 IQueryable 接口中定義的,因此可以撰寫(xiě)查詢(xún)。以下代碼使用上一個(gè)查詢(xún),其按地區(qū)查找總和,并計(jì)算總和最高的地區(qū)??煺沾翱谠试S事件流按總和分類(lèi),因此可以使用 Take 方法獲取總和最高的地區(qū):
- var highestRegion =
- // Uses groupBy query
- (from i in payloadByRegion.SnapshotWindow(
- SnapshotWindowOutputPolicy.Clip)
- from sumByRegion in i
- orderby sumByRegion.Sum descending
- select sumByRegion).Take(1);
一般情況是有關(guān)快速移動(dòng)事件(如傳感器中的讀數(shù))到慢速移動(dòng)或靜態(tài)參考數(shù)據(jù)(如傳感器的固定位置)流的查詢(xún)。查詢(xún)使用聯(lián)接來(lái)實(shí)現(xiàn)此目的。
StreamInsight 聯(lián)接語(yǔ)法與任何其他 LINQ 聯(lián)接相同,但有一點(diǎn)需要注意:當(dāng)事件的持續(xù)時(shí)間重疊時(shí),它們才會(huì)聯(lián)接在一起。如果傳感器 1 在時(shí)間 t1 報(bào)告了一個(gè)值,但是有關(guān)傳感器 1 位置的參考數(shù)據(jù)僅對(duì)時(shí)間 t2 到 t3 有效,那么聯(lián)接將不匹配。持續(xù)時(shí)間的聯(lián)接條件并沒(méi)有明確寫(xiě)入查詢(xún)定義中;這是 StreamInsight 引擎的基本屬性。使用靜態(tài)數(shù)據(jù)時(shí),通常情況下,輸入適配器實(shí)際上將數(shù)據(jù)處理為帶有無(wú)限持續(xù)時(shí)間的邊緣事件。這樣將能成功完成到快速移動(dòng)事件流的所有聯(lián)接。
通過(guò)聯(lián)接來(lái)關(guān)聯(lián)多個(gè)事件流是一個(gè)非常強(qiáng)大的概念。裝配線、石油生產(chǎn)設(shè)施或高容量網(wǎng)站通常不會(huì)因?yàn)楦綦x的事件而發(fā)生故障。一個(gè)用于觸發(fā)溫度警報(bào)的設(shè)備部件通常不會(huì)導(dǎo)致生產(chǎn)線癱瘓;生產(chǎn)線癱瘓可能由于多個(gè)原因造成,如溫度在某一持續(xù)時(shí)間段內(nèi)過(guò)高,同時(shí)某一工具使用過(guò)多,而操作員正在換班。
如果沒(méi)有聯(lián)接,隔離事件將不會(huì)有這么多的商業(yè)價(jià)值。通過(guò)對(duì)歷史數(shù)據(jù)使用聯(lián)接和 StreamInsight 查詢(xún),用戶(hù)可以將隔離流與非常具體的監(jiān)控條件相關(guān)聯(lián),然后進(jìn)行實(shí)時(shí)監(jiān)控?,F(xiàn)有查詢(xún)能夠查找可能導(dǎo)致故障的情況,并自動(dòng)生成可路由至系統(tǒng)的輸出事件,該系統(tǒng)知道如何使過(guò)熱的設(shè)備部件脫機(jī),而不是等到該部件造成整條生產(chǎn)線停產(chǎn)。
在零售情況中,有關(guān)某段時(shí)間按項(xiàng)目劃分的銷(xiāo)售量的事件可以輸入到定價(jià)系統(tǒng)和客戶(hù)訂單歷史記錄中,從而確保每個(gè)項(xiàng)目具有最佳的定價(jià),或決定在用戶(hù)結(jié)賬前向其推薦的項(xiàng)目。由于查詢(xún)易于創(chuàng)建、修改和撰寫(xiě),因此您可以從簡(jiǎn)單的情況開(kāi)始,并隨時(shí)間的流逝進(jìn)行優(yōu)化,從而增加業(yè)務(wù)價(jià)值。
用戶(hù)定義的聚合
StreamInsight 附帶最常見(jiàn)的聚合函數(shù),包括 Count、Sum 和 Average。當(dāng)這些函數(shù)不夠時(shí)(或您需要在前文提到的計(jì)數(shù)窗口進(jìn)行聚合),StreamInsight 支持用戶(hù)定義的聚合函數(shù)。
要?jiǎng)?chuàng)建用戶(hù)定義的聚合,其流程包括兩個(gè)步驟:編寫(xiě)實(shí)際聚合方法,然后通過(guò)擴(kuò)展方法將該方法公布到 LINQ。
進(jìn)行第一步時(shí),如果聚合與時(shí)間無(wú)關(guān),則從 CepAggregate
- public class EveryOtherSum :
- CepAggregate
{ - public override double GenerateOutput(
- IEnumerable
payloads) { - var sum = default(double);
- var include = true;
- foreach (var d in payloads) {
- if (include) sum += d;
- include = !include;
- }
- return sum;
- }
- }
進(jìn)行第二步時(shí),需要在 CepWindow
關(guān)于利用Microsoft StreamInsight控制較大數(shù)據(jù)流的相關(guān)知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
網(wǎng)站題目:利用MicrosoftStreamInsight控制較大數(shù)據(jù)流詳解
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/codehes.html


咨詢(xún)
建站咨詢(xún)
