<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DCM:中間件家族迎來新成員

          共 7962字,需瀏覽 16分鐘

           ·

          2022-05-28 12:25

          DCM 是什么

          現(xiàn)代應(yīng)用無時(shí)無刻不在與數(shù)據(jù)打交道,數(shù)據(jù)計(jì)算無處不在,報(bào)表統(tǒng)計(jì)、數(shù)據(jù)分析、業(yè)務(wù)處理不一而足。當(dāng)前數(shù)據(jù)處理的主要手段仍然是以關(guān)系數(shù)據(jù)庫為代表的相關(guān)技術(shù),雖然使用高級(jí)語言(如 Java)硬編碼也能實(shí)現(xiàn)各類計(jì)算,但遠(yuǎn)不如數(shù)據(jù)庫(SQL)方便,數(shù)據(jù)庫在當(dāng)代數(shù)據(jù)處理中仍然發(fā)揮舉足輕重的作用。
          不過,隨著信息技術(shù)的發(fā)展,存儲(chǔ)與計(jì)算分離、微服務(wù)、前置計(jì)算、邊緣計(jì)算等架構(gòu)與概念的興起,過于沉重、封閉的數(shù)據(jù)庫在應(yīng)對(duì)這些場景時(shí)越來越顯得捉襟見肘。數(shù)據(jù)庫要求數(shù)據(jù)入庫才能計(jì)算,但面對(duì)豐富的多樣數(shù)據(jù)源時(shí),數(shù)據(jù)入庫不僅效率低資源消耗大,實(shí)時(shí)性也無法保障,而有的數(shù)據(jù)只是臨時(shí)使用卻要入庫持久化就更得不償失了。另外對(duì)于微服務(wù)、邊緣計(jì)算等需要將計(jì)算能力前置到應(yīng)用端的場景,數(shù)據(jù)庫也很難嵌入使用。
          在這樣的背景下,如果有一種不依賴數(shù)據(jù)庫、具備開放計(jì)算能力、能夠與應(yīng)用嵌入集成使用的數(shù)據(jù)計(jì)算處理技術(shù),那么這些問題就都能夠很好地解決,這就是數(shù)據(jù)計(jì)算中間件(Data Computing Middleware,簡稱 DCM)。DCM 的應(yīng)用場景非常廣泛,可以說無處不在,在優(yōu)化應(yīng)用開發(fā)、微服務(wù)實(shí)現(xiàn)、存儲(chǔ)過程替代、數(shù)據(jù)庫解耦、ETL 輔助、多樣性數(shù)據(jù)源計(jì)算、BI 數(shù)據(jù)準(zhǔn)備等等多方面都能發(fā)揮重要的作用,幾乎所有涉及應(yīng)用數(shù)據(jù)交互的場景都可以通過 DCM 來改善應(yīng)用結(jié)構(gòu),提升開發(fā)與計(jì)算效率。

          DCM 應(yīng)用場景

          優(yōu)化應(yīng)用開發(fā)

          應(yīng)用中數(shù)據(jù)處理邏輯只能通過編碼實(shí)現(xiàn),使用原生的 Java 實(shí)現(xiàn)由于缺少必要的結(jié)構(gòu)化計(jì)算類庫往往比較困難,即使用新增加的 Stream/Kotlin 也并沒有明顯改善。借助 ORM 技術(shù)可以一定程度緩解開發(fā)困境,但仍然缺乏專業(yè)的結(jié)構(gòu)化數(shù)據(jù)類型,集合運(yùn)算不夠方便,同時(shí)讀寫數(shù)據(jù)庫時(shí)代碼繁瑣,復(fù)雜計(jì)算也難以實(shí)現(xiàn)。ORM 的這些缺點(diǎn)經(jīng)常導(dǎo)致業(yè)務(wù)邏輯的開發(fā)效率不僅沒有明顯提升,甚至還大幅降低。此外,這些實(shí)現(xiàn)方式還會(huì)導(dǎo)致應(yīng)用結(jié)構(gòu)問題。Java 實(shí)現(xiàn)的計(jì)算邏輯必須與主應(yīng)用一起部署導(dǎo)致緊耦合,同時(shí)由于不支持熱部署開發(fā)運(yùn)維也很麻煩。
          如果借助 DCM 的敏捷計(jì)算、易集成、熱切換等特性,在應(yīng)用中替代 Java 實(shí)現(xiàn)數(shù)據(jù)處理邏輯,就可以很好解決上述問題,不僅開發(fā)效率提升,還可以優(yōu)化應(yīng)用結(jié)構(gòu),實(shí)現(xiàn)計(jì)算模塊的解耦,同時(shí)支持熱部署。

          多樣性數(shù)據(jù)源計(jì)算

          現(xiàn)代應(yīng)用還經(jīng)常面臨多樣性數(shù)據(jù)源問題,通過數(shù)據(jù)庫處理不僅需要數(shù)據(jù)入庫,效率低下,還無法保障數(shù)據(jù)的實(shí)時(shí)性。不同數(shù)據(jù)源有各自的優(yōu)勢,RDB 計(jì)算能力較強(qiáng),但 IO 吞吐能力弱;NoSQL 的 IO 效率高,但計(jì)算能力很弱;而文本等文件數(shù)據(jù)完全沒有計(jì)算能力,但使用非常靈活。強(qiáng)迫這些數(shù)據(jù)入庫就會(huì)喪失這些原數(shù)據(jù)源的優(yōu)勢。
          通過 DCM 的多源混算能力,不僅可以直接對(duì) RDB、文本、Excel、JSON、XML、NoSQL 以及其他網(wǎng)絡(luò)接口數(shù)據(jù)進(jìn)行混合計(jì)算,保證數(shù)據(jù)與計(jì)算的實(shí)時(shí)性,而且還能同時(shí)保留各類數(shù)據(jù)源的優(yōu)點(diǎn),充分發(fā)揮其效力。

          微服務(wù)實(shí)現(xiàn)

          當(dāng)前微服務(wù)實(shí)現(xiàn)時(shí)仍然大量依賴 Java 和數(shù)據(jù)庫實(shí)施數(shù)據(jù)處理,Java 的缺點(diǎn)在于實(shí)現(xiàn)復(fù)雜、無法熱切換;而數(shù)據(jù)庫由于有“庫”的限制,多源數(shù)據(jù)要入庫才能計(jì)算,靈活性很低,不僅數(shù)據(jù)時(shí)效性無法保證,也無法充分發(fā)揮各類數(shù)據(jù)源的優(yōu)勢。
          將可集成的 DCM 分別嵌入中臺(tái)或微服務(wù)的各個(gè)環(huán)節(jié)完成數(shù)據(jù)采集整理、數(shù)據(jù)處理以及前置的數(shù)據(jù)計(jì)算任務(wù),利用開放的計(jì)算體系可以充分發(fā)揮多數(shù)據(jù)源自身的優(yōu)勢,靈活性增強(qiáng)。多源數(shù)據(jù)處理、實(shí)時(shí)計(jì)算、熱部署這些問題均能迎刃而解。

          存儲(chǔ)過程替代

          以往為了實(shí)現(xiàn)復(fù)雜計(jì)算或整理數(shù)據(jù)常常會(huì)使用存儲(chǔ)過程,存儲(chǔ)過程在庫內(nèi)計(jì)算有一定優(yōu)勢,但缺點(diǎn)也很明顯。存儲(chǔ)過程缺乏可移植性,編輯調(diào)試?yán)щy,創(chuàng)建和使用存儲(chǔ)過程需要較高權(quán)限存在安全問題,為前端應(yīng)用服務(wù)的存儲(chǔ)過程還會(huì)造成數(shù)據(jù)庫與應(yīng)用緊耦合。
          通過 DCM 將存儲(chǔ)過程外置到應(yīng)用中,可以實(shí)現(xiàn)“庫外存儲(chǔ)過程”,數(shù)據(jù)庫則主要用于存儲(chǔ),將存儲(chǔ)過程從數(shù)據(jù)庫中解耦出來就可以很好解決存儲(chǔ)過程帶來的各類問題。

          報(bào)表 BI 數(shù)據(jù)準(zhǔn)備

          為報(bào)表提供數(shù)據(jù)準(zhǔn)備是 DCM 的重要場景,以往使用數(shù)據(jù)庫為報(bào)表準(zhǔn)備數(shù)據(jù)存在實(shí)現(xiàn)難度高、耦合性強(qiáng)等問題,而報(bào)表本身計(jì)算能力不足又無法完成很多復(fù)雜計(jì)算。通過 DCM 的庫外強(qiáng)計(jì)算能力就可以為報(bào)表提供一個(gè)專門的數(shù)據(jù)計(jì)算層,不僅可以解耦數(shù)據(jù)庫為數(shù)據(jù)庫減負(fù),還可以彌補(bǔ)報(bào)表工具自身的計(jì)算能力不足。邏輯上分層后,報(bào)表開發(fā)維護(hù)都很清爽。

          中間表消除

          有時(shí)為了加快查詢效率事先將要查詢的數(shù)據(jù)加工成結(jié)果表存儲(chǔ)在數(shù)據(jù)庫中,這就是中間表。另外,有些復(fù)雜計(jì)算需要保存中間結(jié)果也會(huì)存成中間表;多樣數(shù)據(jù)源也要先存成中間表才能在數(shù)據(jù)庫中混合計(jì)算。與存儲(chǔ)過程類似,中間表一旦建立就可能被多個(gè)應(yīng)用(模塊)使用,造成應(yīng)用與數(shù)據(jù)庫的緊耦合,同時(shí)由于中間表無法輕易刪除,數(shù)量會(huì)越積越多。中間表數(shù)量過多會(huì)引發(fā)數(shù)據(jù)庫容量和性能問題,存儲(chǔ)中間表需要空間,加工中間表則需要數(shù)據(jù)庫計(jì)算資源。
          通過 DCM 可以將中間表外置到文件系統(tǒng),利用 DCM 實(shí)施計(jì)算,解耦數(shù)據(jù)庫減輕數(shù)據(jù)庫存儲(chǔ)和計(jì)算負(fù)擔(dān)。這里的關(guān)鍵是 DCM 使得文件也擁有了計(jì)算能力,所以才能將庫內(nèi)的中間表置于庫外,原來中間表放在庫內(nèi)主要為了獲得數(shù)據(jù)庫的計(jì)算能力,現(xiàn)在有 DCM 的計(jì)算能力中間表存成什么形式就不重要了,外置到文件系統(tǒng)反而更優(yōu)。

          T+0 查詢

          數(shù)據(jù)量積累到一定程度時(shí)基于生產(chǎn)庫查詢會(huì)影響交易,這時(shí)就會(huì)將大量的歷史數(shù)據(jù)剝離到其他歷史數(shù)據(jù)庫中,進(jìn)行冷熱數(shù)據(jù)分離。這時(shí)如果要查詢?nèi)繑?shù)據(jù)就要完成跨庫查詢、冷熱數(shù)據(jù)路由等工作。數(shù)據(jù)庫對(duì)于跨庫查詢尤其是跨異構(gòu)庫存在很多問題,不僅效率低下,還存在數(shù)據(jù)傳輸不穩(wěn)定、可擴(kuò)展性低等很多不足,無法很好實(shí)現(xiàn) T+0 全量數(shù)據(jù)查詢。
          而這些問題都可以通過 DCM 來解決,由于具備獨(dú)立且完善的計(jì)算能力,可以分別從不同的數(shù)據(jù)庫取數(shù)計(jì)算,因此可以很好適應(yīng)異構(gòu)數(shù)據(jù)庫的情況,還可以根據(jù)數(shù)據(jù)庫的資源狀況決定計(jì)算是在數(shù)據(jù)庫還是 DCM 中實(shí)施,非常靈活。在計(jì)算實(shí)現(xiàn)上,DCM 的敏捷計(jì)算能力還可以簡化 T+0 查詢中的復(fù)雜計(jì)算,提升開發(fā)效率。

          ETL

          ETL 需要對(duì)數(shù)據(jù)清洗轉(zhuǎn)換再加載到目標(biāo)端,但由于源端數(shù)據(jù)可能來源多處(文本、數(shù)據(jù)庫、web)加上數(shù)據(jù)質(zhì)量參差不齊,因此 E 和 T 這兩個(gè)步驟會(huì)涉及大量數(shù)據(jù)計(jì)算。目前除了數(shù)據(jù)庫以外,其他數(shù)據(jù)源并不太具備這樣的計(jì)算能力,想要完成這些計(jì)算就要先加載到數(shù)據(jù)庫再進(jìn)行,這就形成了 LET。大量無用的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中會(huì)占用大量存儲(chǔ)空間,極易引發(fā)容量問題。而將清洗和轉(zhuǎn)換的計(jì)算工作都?jí)航o數(shù)據(jù)庫又會(huì)增加數(shù)據(jù)處理時(shí)間,再疊加大量未經(jīng)清洗轉(zhuǎn)換的原始數(shù)據(jù)入庫時(shí)間,有限的 ETL 時(shí)間窗口很可能不夠,如果無法在規(guī)定時(shí)間完成 ETL 工作就會(huì)影響第二天的業(yè)務(wù)。
          在 ETL 任務(wù)中引入 DCM 就可以按順序完成清洗 E、轉(zhuǎn)換 T、加載 L,解決 LET 面臨的各種問題。借助 DCM 的開放計(jì)算能力,在庫外對(duì)多源數(shù)據(jù)實(shí)施清洗轉(zhuǎn)換,DCM 擁有強(qiáng)計(jì)算能力可以應(yīng)對(duì)各類復(fù)雜計(jì)算,最后將整理后數(shù)據(jù)裝在到目標(biāo)端,實(shí)現(xiàn)真正的 ETL。

          DCM 特性

          可以看到,DCM 的應(yīng)用場景非常廣泛。那么要很好應(yīng)對(duì)這些場景,一個(gè)優(yōu)秀的 DCM 應(yīng)該具備哪些特點(diǎn)呢?

          兼容性(Compatible)

          首先 DCM 需要具備很好的兼容性,可以跨平臺(tái)使用,各類操作系統(tǒng)、云平臺(tái)、應(yīng)用服務(wù)器下均可以很好運(yùn)行,這決定了 DCM 的使用范圍。
          此外,兼容性還意味著可以兼容多樣性數(shù)據(jù)源,無論何種數(shù)據(jù)源都可以直接使用并進(jìn)行混合計(jì)算,這要求 DCM 擁有足夠強(qiáng)的開放性。

          熱部署(Hot-deploy)

          數(shù)據(jù)處理是一種高頻且穩(wěn)定性較差的場景,在業(yè)務(wù)開展過程中經(jīng)常要新增修改計(jì)算任務(wù),這就要求 DCM 應(yīng)該具備熱部署特性,修改數(shù)據(jù)處理邏輯無需重啟應(yīng)用(服務(wù))就能生效。

          高性能(Efficient)

          計(jì)算性能是數(shù)據(jù)計(jì)算場景重點(diǎn)關(guān)注的方面,有時(shí)會(huì)成為最主要的關(guān)注點(diǎn),所謂天下武功無快不破。DCM 應(yīng)該能夠高效處理數(shù)據(jù),提供諸如高性能計(jì)算庫、高性能存方案、并行計(jì)算等高性能保障機(jī)制。

          敏捷性(Agile)

          敏捷性要求 DCM 能夠快速實(shí)現(xiàn)數(shù)據(jù)處理邏輯,具備完備的計(jì)算能力,尤其面對(duì)復(fù)雜計(jì)算場景通過足夠簡單的編碼就能完成數(shù)據(jù)處理,同時(shí)可以高效運(yùn)行。這需要 DCM 提供敏捷編程機(jī)制和易于使用的開發(fā)環(huán)境等支持。

          擴(kuò)展性(Scalable)

          當(dāng)計(jì)算容量無法滿足需要時(shí),DCM 應(yīng)該具備靈活的橫向擴(kuò)展能力。擴(kuò)展性對(duì)當(dāng)代應(yīng)用十分重要,擴(kuò)展能力的好壞決定了 DCM 的上限。

          集成性(Embeddable)

          DCM 應(yīng)該能夠很好與應(yīng)用集成嵌入使用,在應(yīng)用內(nèi)充當(dāng)計(jì)算引擎,作為應(yīng)用的一部分隨應(yīng)用一起打包部署。這樣應(yīng)用本身就獲得了強(qiáng)計(jì)算能力,不再強(qiáng)依賴數(shù)據(jù)庫后,可以很好應(yīng)對(duì)存儲(chǔ)與計(jì)算分離、微服務(wù)和邊緣計(jì)算等場景。并且,良好的集成性還是敏捷性的另一方面體現(xiàn),DCM 很輕,隨時(shí)隨地都能嵌入與應(yīng)用結(jié)合使用。
          如果將 DCM 這幾個(gè)特性的首字母組合起來,與 CHEESE(奶酪)很接近(CHEASE),而 DCM 的作用就像夾在漢堡里的奶酪一樣,如果缺少,味道和營養(yǎng)都會(huì)差很多。
          這樣能否作為理想的 DCM 就可以使用 CHEASE 的標(biāo)準(zhǔn)去考察。這里不妨看一下一些主流技術(shù)對(duì) DCM 的滿足情況。

          現(xiàn)有技術(shù)的情況

          SQL

          數(shù)據(jù)庫是使用 SQL 的主要陣地,數(shù)據(jù)庫通常具備較強(qiáng)的計(jì)算能力,一些頭部數(shù)據(jù)庫的計(jì)算性能也很強(qiáng),基本可以滿足高性能(E)的需要。而且數(shù)據(jù)庫過于封閉,數(shù)據(jù)要入庫才能計(jì)算,無法很好滿足多樣性數(shù)據(jù)源場景的需要,兼容性(C)較差。
          對(duì)于集成性(E),由于絕大部分?jǐn)?shù)據(jù)庫都是獨(dú)立使用的,極少數(shù)(如 SQLite)支持嵌入的數(shù)據(jù)庫往往功能和性能都達(dá)不到要求,因此數(shù)據(jù)庫幾乎不滿足集成性的要求。
          而 SQL 作為專用的集合計(jì)算語言,實(shí)現(xiàn)簡單計(jì)算很方便,但復(fù)雜計(jì)算用 SQL 表達(dá)很繁瑣,經(jīng)常要嵌套多層,實(shí)際業(yè)務(wù)中經(jīng)常能看到幾千行的“長”SQL,不僅難寫,維護(hù)也不方便,所以 SQL 不太符合敏捷性(A)的要求。
          與數(shù)據(jù)庫類似的 Hadoop 相關(guān)技術(shù)也存在同樣的問題,封閉性導(dǎo)致兼容性差、敏捷性不足、基本不具備集成性等缺點(diǎn),雖然在擴(kuò)展性方面表現(xiàn)要優(yōu)于數(shù)據(jù)庫,但總體并不符合 DCM 的要求。Spark 的表現(xiàn)要略好,但 Scala 不支持熱部署,實(shí)現(xiàn)復(fù)雜計(jì)算也不夠方便,而 Spark SQL 仍然存在 SQL 的那些問題。這些技術(shù)都過于沉重,很難滿足 DCM 在敏捷性、集成性、熱部署等方面的需要。

          Java

          Java 作為原生的編程語言可以很好跨平臺(tái)運(yùn)行,也可以通過編碼完成多數(shù)據(jù)源計(jì)算任務(wù),因此兼容性(C)很好。而且對(duì)于大部分都采用 Java 開發(fā)的應(yīng)用來說,集成性(E)也不在話下。
          但 Java 的缺點(diǎn)也很明顯,作為編譯型語言無法實(shí)現(xiàn)熱部署(H)。由于缺少必要的結(jié)構(gòu)化計(jì)算類庫完成簡單的分組匯總也要幾十行代碼,就別提復(fù)雜計(jì)算了。雖然現(xiàn)在微服務(wù)架構(gòu)中也經(jīng)常使用 Java 硬編碼完成數(shù)據(jù)處理,但其實(shí)計(jì)算實(shí)現(xiàn)要比 SQL 復(fù)雜得多,沒辦法,計(jì)算前置就不能再用數(shù)據(jù)庫,難寫也得挺著,因此敏捷性(A)極其不足。雖然在 Java8 以后引入了 Stream,但計(jì)算能力并沒有實(shí)質(zhì)改善(Kotlin 也存在類似的問題)。
          使用 Java 雖然理論上也能實(shí)現(xiàn)各類高性能算法,但是如果只是為某個(gè)應(yīng)用 / 項(xiàng)目服務(wù),要實(shí)現(xiàn)這些高性能算法封裝投入就太大了,因此從實(shí)際應(yīng)用角度來看,Java 并不具備高性能(E)特性。擴(kuò)展性(S)也存在同樣的問題。因此綜合來看,Java 很難作為優(yōu)秀的 DCM 技術(shù)使用。

          Python

          Python 作為大火的一類計(jì)算技術(shù)不得不提一下。Python 的兼容性(C)較強(qiáng),無論是跨平臺(tái)還是對(duì)接多數(shù)據(jù)源都能支持。尤其是豐富的數(shù)據(jù)處理包讓 Python 的適用范圍極廣。
          Python 在結(jié)構(gòu)化數(shù)據(jù)處理相比于 Java 等技術(shù)有相當(dāng)?shù)膬?yōu)勢,但卻難說很完善,尤其在處理有序分組等復(fù)雜計(jì)算時(shí)會(huì)很繞,這里 Pandas 不擅長的結(jié)構(gòu)化數(shù)據(jù)運(yùn)算(http://c.raqsoft.com.cn/article/1598322529242)列舉了一些 Python 不擅長的結(jié)構(gòu)化數(shù)據(jù)運(yùn)算,Python 在敏捷性(A)上略有所欠缺。
          不僅如此,Pandas 的性能(E)也往往達(dá)不到要求,尤其針對(duì)大數(shù)據(jù)量計(jì)算方面,這跟算法的實(shí)現(xiàn)效率有很大關(guān)系,敏捷語法可以很方便地實(shí)現(xiàn)高性能算法,反之就很困難。同樣,在擴(kuò)展性(S)方面,Python 也不盡如人意,本質(zhì)上來講作為編程語言的 Python 要擁有良好的擴(kuò)展性需要投入大量資源開發(fā)完成,這點(diǎn)與 Java 是一樣的。
          Python 最大的問題是集成性(E),很難與現(xiàn)有應(yīng)用集成在一起使用。雖然可以通過諸如 sidecar 模式進(jìn)行服務(wù)間調(diào)用,但本質(zhì)上與 DCM 要求與應(yīng)用結(jié)合嵌入在一起(同一個(gè)進(jìn)程)相去甚遠(yuǎn)。Python 的主要應(yīng)用場景并非像 Java 一樣做企業(yè)級(jí)應(yīng)用開發(fā),各有用途,勉強(qiáng)不來。歸根到底,專業(yè)的事兒還需要專業(yè)的工具來做。

          專業(yè)數(shù)據(jù)計(jì)算中間件 SPL

          開源集算器 SPL 是專業(yè)的數(shù)據(jù)計(jì)算中間件,具備不依賴數(shù)據(jù)庫的完備計(jì)算能力,同時(shí)開放的計(jì)算能力可以混合計(jì)算多樣性數(shù)據(jù),同時(shí)解釋執(zhí)行的 SPL 天然支持熱部署,良好的集成性可以很方便嵌入應(yīng)用中,讓應(yīng)用擁有強(qiáng)計(jì)算能力,充分發(fā)揮 DCM 的效力。

          兼容性

          SPL 采用 Java 開發(fā),跨平臺(tái)能力與 Java 一致,可以很好運(yùn)行在各類操作系統(tǒng)、云平臺(tái)下。而在多數(shù)據(jù)源支持方面,SPL 具備開放的計(jì)算能力,可以對(duì)接多種數(shù)據(jù)源,RDB、NoSQL、CSV、Excel、JSON/XML、Hadoop、RESTful、Webservice 都可以直接對(duì)接并進(jìn)行混合計(jì)算,不需要入庫,數(shù)據(jù)實(shí)時(shí)性和計(jì)算實(shí)時(shí)性都可以很好保障。
          多源計(jì)算支持很好解決了原來數(shù)據(jù)庫無法跨源計(jì)算、無法計(jì)算外部數(shù)據(jù)的問題,再加上 SPL 完備的計(jì)算能力和相對(duì) SQL 更簡潔的語法,對(duì)于應(yīng)用來說就獲得了與數(shù)據(jù)庫相當(dāng)(超過)的計(jì)算能力。
          除了原生計(jì)算語法,SPL 還提供了 SQL 支持(相當(dāng) SQL92 標(biāo)準(zhǔn)),可以使用 SQL 查詢文本、Excel、NoSQL 等非 RDB 數(shù)據(jù)源,這樣就極大方便了熟悉 SQL 的應(yīng)用開發(fā)人員。
          DCM 只有在開放計(jì)算體系的支持下才能擁有足夠強(qiáng)的兼容性,才能適應(yīng)更多的應(yīng)用場景。

          熱部署

          SPL 采用解釋執(zhí)行機(jī)制,天然支持熱部署。這樣對(duì)于一些穩(wěn)定性差經(jīng)常需要新增、修改計(jì)算邏輯的業(yè)務(wù)(如報(bào)表、微服務(wù))非常友好。

          高性能

          在性能方面,SPL 提供了諸多高性能算法與高性能存儲(chǔ)機(jī)制。在前面提到的 DCM 消除中間表和 ETL 場景中,數(shù)據(jù)往往要落地成文件存儲(chǔ)在數(shù)據(jù)庫外,這時(shí)采用 SPL 的文件格式存儲(chǔ)可以獲得比文本等開放格式高很多的性能。
          SPL 提供了兩種存儲(chǔ)類型:集文件和組表。集文件采用了壓縮技術(shù)(占用空間更小讀取更快),存儲(chǔ)了數(shù)據(jù)類型(無需解析數(shù)據(jù)類型讀取更快),支持可追加數(shù)據(jù)的倍增分段機(jī)制,利用分段策略很容易實(shí)現(xiàn)并行計(jì)算,保證計(jì)算性能。組表支持列式存儲(chǔ),在參與計(jì)算的列數(shù)(字段)較少時(shí)會(huì)有巨大優(yōu)勢。組表上還實(shí)現(xiàn)了 minmax 索引,同時(shí)支持倍增分段,這樣不僅能享受到列存的優(yōu)勢,也更容易并行提升計(jì)算性能。
          SPL 還支持各種高性能算法。比如常見的 TopN 運(yùn)算,在 SPL 中 TopN 被理解為聚合運(yùn)算,這樣可以將高復(fù)雜度的排序轉(zhuǎn)換成低復(fù)雜度的聚合運(yùn)算,而且很還能擴(kuò)展應(yīng)用范圍。

          A


          1

          =file(“data.ctx”).create().cursor()


          2

          =A1.groups(;top(10,amount))

          金額在前 10 名的訂單

          3

          =A1.groups(area;top(10,amount))

          每個(gè)地區(qū)金額在前 10 名的訂單

          這里的語句中沒有排序字樣,也不會(huì)產(chǎn)生大排序的動(dòng)作,在全集還是分組中計(jì)算 TopN 的語法基本一致,而且都會(huì)有較高的性能,類似的算法在 SPL 中還有很多。

          SPL 也很容易實(shí)施并行計(jì)算,發(fā)揮多 CPU 的優(yōu)勢。SPL 有很多計(jì)算函數(shù)都提供并行機(jī)制,如文件讀取、過濾、排序只要增加一個(gè) @m 選項(xiàng)就可以自動(dòng)實(shí)施并行計(jì)算,簡單方便。同時(shí)也可以顯示編寫并行程序,通過多線程并行提升計(jì)算性能。

          敏捷性

          SPL 提供了原生的計(jì)算語法和簡潔易用的 IDE 環(huán)境,在 IDE 中不僅可以很方便編碼調(diào)試,過程計(jì)算的每步計(jì)算結(jié)果都可以實(shí)時(shí)查看,網(wǎng)格式編碼代碼天然整齊,通過格子名稱引用中間計(jì)算結(jié)果無需定義變量,簡單方便。
          同時(shí),基于 SPL 豐富的計(jì)算類庫實(shí)施結(jié)構(gòu)化數(shù)據(jù)計(jì)算更方便,分組匯總、循環(huán)、過濾、集合運(yùn)算、有序計(jì)算等應(yīng)有盡有。
          SPL 尤其擅長復(fù)雜計(jì)算,原來 SQL 要嵌套很多層的計(jì)算使用 SPL 卻可以很方便實(shí)現(xiàn)。比如根據(jù)股票記錄計(jì)算某只股票最長連續(xù)上漲多少天?SPL 就比 SQL 簡單很多。
          上面 SQL 嵌套了 3 層,讀起來都很繞就別提寫了;下面的 SPL 完全按照自然思維、簡單 3 行就能實(shí)現(xiàn),高下立判。
          良好的敏捷性不僅能提升開發(fā)效率,很多高性能算法通過 SPL 可以很方便實(shí)現(xiàn)。算法不僅要能想出來,還要能實(shí)現(xiàn),最好實(shí)現(xiàn)還簡單,SPL 提供了這種可能。

          擴(kuò)展性

          對(duì)于計(jì)算性能要求較高的場景,SPL 還可以部署單獨(dú)的計(jì)算服務(wù),同時(shí)支持多機(jī)分布式集群,支持負(fù)載均衡和容錯(cuò)機(jī)制,當(dāng)計(jì)算資源達(dá)到上限時(shí)可以通過橫向擴(kuò)容增加算力,具備良好的擴(kuò)展性。
          在分布式計(jì)算中,用戶可根據(jù)數(shù)據(jù)和計(jì)算任務(wù)的特點(diǎn)靈活定制數(shù)據(jù)分布及冗余方案,有效減少節(jié)點(diǎn)間數(shù)據(jù)傳輸量,以獲得更高性能,實(shí)現(xiàn)可控?cái)?shù)據(jù)分布。
          SPL 采用無中心集群設(shè)計(jì),集群沒有永久的中心主控節(jié)點(diǎn),允許程序員用代碼控制參與計(jì)算的節(jié)點(diǎn),從而有效避免單點(diǎn)失效。同時(shí) SPL 會(huì)根據(jù)每個(gè)節(jié)點(diǎn)空閑程度(線程數(shù)量)決定是否分配任務(wù),實(shí)現(xiàn)負(fù)擔(dān)和資源的有效平衡。
          在容錯(cuò)方面,SPL 提供內(nèi)外存兩種數(shù)據(jù)容錯(cuò)機(jī)制,外存冗余式容錯(cuò)和內(nèi)存?zhèn)涮ナ饺蒎e(cuò)。支持計(jì)算容錯(cuò),節(jié)點(diǎn)故障時(shí)自動(dòng)將該節(jié)點(diǎn)計(jì)算任務(wù)遷移掉其他節(jié)點(diǎn)繼續(xù)完成。

          集成性

          作為 DCM 與應(yīng)用結(jié)合方面,SPL 提供了標(biāo)準(zhǔn) JDBC/ODBC/RESTful 接口,應(yīng)用可以像調(diào)用存儲(chǔ)過程一樣請(qǐng)求 SPL 計(jì)算結(jié)果。
          邏輯上 SPL 作為 DCM 介于應(yīng)用和數(shù)據(jù)源之間實(shí)施數(shù)據(jù)處理,對(duì)上提供計(jì)算服務(wù),對(duì)下屏蔽多樣性數(shù)據(jù)源差異,充分彰顯了 DCM 的重要作用。
          JDBC 調(diào)用 SPL 代碼示例:
          Class.forName("com.esproc.jdbc.InternalDriver");Connection conn =DriverManager.getConnection("jdbc:esproc:local://");CallableStatement st = conn.prepareCall("{call splscript(?, ?)}");st.setObject(1, 3000);st.setObject(2, 5000);ResultSet result=st.execute();

          綜合起來,從 DCM 的 6 個(gè)特性(CHEASE)來看,SPL 在各方面能力綜合起來十分均衡,整體遠(yuǎn)優(yōu)于其他技術(shù),是 DCM 的理想選擇。



          重磅!開源SPL交流群成立了

          簡單好用的SPL開源啦!

          為了給感興趣的技術(shù)人員提供一個(gè)相互交流的平臺(tái),

          特地開通了交流群(群完全免費(fèi),不廣告不賣課)

          需要進(jìn)群的朋友,可長按掃描下方二維碼

          本文感興趣的朋友,請(qǐng)到閱讀原文去收藏 ^_^

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码视频在线观看观看 | 国产骚逼视频 | 91人人草| 五十路老熟女 码一区二区 | 123操逼电影网 |