SQL/ 存儲過程太慢,數(shù)據(jù)要先導(dǎo)入,慢;計(jì)算時(shí)重復(fù)遍歷表、反復(fù)中間結(jié)果落地,慢。跑批有時(shí)間窗口(通常是晚上幾個(gè)小時(shí)),如果太慢在規(guī)定時(shí)間跑不完就會影響業(yè)務(wù),在月末年終的時(shí)候尤其突出。
用 Java/Python 也跑不快,由于大數(shù)據(jù)能力差、難以并行、缺乏專門存儲導(dǎo)致往往還不如 SQL 快。
用集算器 SPL 跑批,數(shù)據(jù)不需要入庫直接就能算,節(jié)省入庫時(shí)間;SPL 支持過程計(jì)算,同一份數(shù)據(jù)集只讀取一次重復(fù)使用,中間結(jié)果無需落地就能給下一步使用,節(jié)省磁盤 IO 時(shí)間。
SPL 大數(shù)據(jù)計(jì)算能力強(qiáng),支持小數(shù)據(jù)量的內(nèi)存和大數(shù)據(jù)量的外存計(jì)算,提供支持列存、壓縮、索引等優(yōu)化后的高性能存儲,同時(shí)支持并行計(jì)算,進(jìn)一步提升計(jì)算性能。同等硬件跑批性能經(jīng)常能提升 10 倍以上。
報(bào)表慢,90% 的原因是數(shù)據(jù)庫計(jì)算慢,SQL 復(fù)雜一點(diǎn)數(shù)據(jù)庫就很難優(yōu)化,而 SQL 由于本身的限制也無法寫出高性能算法,最后只能容忍低性能。
集算器 SPL 作為報(bào)表計(jì)算引擎(層),將原來只能壓在數(shù)據(jù)庫中的計(jì)算(尤其是性能低的部分)剝離出來在計(jì)算層使用 SPL 完成, 在高性能存儲和算法的保障下,剝離出來的計(jì)算比 SQL 更快,從而優(yōu)化報(bào)表查詢效率。實(shí)際操作時(shí)可以逐步完成,先替換性能低的 SQL,再逐步把剩余 SQL 遷移到 SPL,實(shí)現(xiàn)完全替代 SQL 為報(bào)表準(zhǔn)備數(shù)據(jù)。
大屏經(jīng)常同時(shí)呈現(xiàn)多個(gè)指標(biāo),數(shù)據(jù)庫計(jì)算時(shí)會把大數(shù)據(jù)刷 N 遍,重復(fù)讀取和計(jì)算導(dǎo)致很慢。
集算器 SPL 過程計(jì)算很適合多指標(biāo)計(jì)算,一次遍歷就可以完成多個(gè)指標(biāo)計(jì)算,避免重復(fù)讀取數(shù)據(jù)。同時(shí) SPL 還專門設(shè)計(jì)了不同的預(yù)匯總機(jī)制、布爾維序列、標(biāo)簽位維度等技術(shù),可以進(jìn)一步加速指標(biāo)類計(jì)算,實(shí)現(xiàn)秒級大屏呈現(xiàn)。
寬表是常見的多維分析后臺數(shù)據(jù)存儲以避免關(guān)聯(lián)運(yùn)算的慢速。但寬表冗余很多,生成耗時(shí),占用空間也大,當(dāng)需求或數(shù)據(jù)變化時(shí)寬表還要重新準(zhǔn)備,耗時(shí)耗力。
容忍寬表的缺點(diǎn)(冗余不靈活)主要是為了避免關(guān)聯(lián)從而加速查詢。集算器 SPL 的實(shí)時(shí)關(guān)聯(lián)速度比寬表還快,而且還靈活,寬表也就沒必要了。實(shí)測中,SPL 的實(shí)時(shí)關(guān)聯(lián)速度要比 Clickhouse 的寬表快 2 倍以上。
性能跟不上,就只能預(yù)計(jì)算,先調(diào)研業(yè)務(wù)分析人員需求,再預(yù)先計(jì)算準(zhǔn)備數(shù)據(jù)。但業(yè)務(wù)人員需要探索式的分析,下一步動作是由上一步結(jié)果決定的,預(yù)計(jì)算模式限死查詢統(tǒng)計(jì)的范圍,靈活分析成為空談。
集算器 SPL 的實(shí)時(shí)計(jì)算能力很強(qiáng),在高性能存儲、算法以及其他諸多機(jī)制的保障下可以快速得到計(jì)算結(jié)果供業(yè)務(wù)人員進(jìn)行下一步分析。特別地,SPL 十分擅長復(fù)雜關(guān)聯(lián)計(jì)算,原來需要預(yù)先準(zhǔn)備主要為了避免關(guān)聯(lián),而 SPL 的實(shí)時(shí)關(guān)聯(lián)性能要比基于預(yù)計(jì)算結(jié)果更快。有了性能上的保障,就可以滿足任意靈活度的探索分析需要。
當(dāng)前 SQL 體系的數(shù)據(jù)(倉)庫的硬件利用率很低,并沒有把硬件跑滿,數(shù)據(jù)量稍大或并發(fā)稍多就要靠集群來撐。應(yīng)用成本高,運(yùn)維也很復(fù)雜。
集算器 SPL 運(yùn)算體系的硬件資源利用率很高,可以讓單機(jī)發(fā)揮出集群的算力,絕大多數(shù)原本用小集群( < 10 )的數(shù)據(jù)庫場景,SPL 用單機(jī)就可以搞定。即使一定需要集群,SPL 的集群規(guī)模也會遠(yuǎn)遠(yuǎn)小于 SQL 集群,成本更低,運(yùn)維也更方便。
現(xiàn)在有很多新型專用數(shù)據(jù)庫,在某個(gè)場景下的速度很快,但應(yīng)用場景過于狹窄。比如 Clickhouse 號稱最快的分析庫,但實(shí)際發(fā)現(xiàn)僅針對單表計(jì)算有效,SQL 復(fù)雜時(shí)會很慢。有些數(shù)據(jù)庫還不支持存儲過程,很多復(fù)雜計(jì)算連實(shí)現(xiàn)都是問題,還需要外部編寫 UDF,難度很高。如果上這些數(shù)據(jù)庫只為解決單一某個(gè)場景的問題非常劃不來。
集算器 SPL 速度快,且擅長復(fù)雜計(jì)算,應(yīng)用范圍更廣。SPL 的過程計(jì)算天然可以實(shí)現(xiàn)存儲過程類的多步驟計(jì)算,而且性能更高。
SPL 的可編程能力也很強(qiáng),可以充分利用任務(wù)特征寫出優(yōu)化代碼從而獲得更高計(jì)算性能。相比這些新型數(shù)據(jù)庫,SPL 無論在性能還是應(yīng)用范圍上都更有優(yōu)勢。
歷史數(shù)據(jù)量大不再改變且使用低頻,但仍然要用到。如果入庫會占用昂貴的數(shù)據(jù)庫空間,不入庫又沒法使用(計(jì)算),臨時(shí)入庫常常會發(fā)生入庫三小時(shí)計(jì)算兩分鐘的尷尬局面。
集算器可以使用文件存儲歷史數(shù)據(jù),并使用 SPL 直接計(jì)算文件(各種文件系統(tǒng),甚至云上都行),無須入庫直接算,完美解決入庫與計(jì)算的矛盾。
專業(yè) AP 庫通常是 MPP,軟硬件成本很高。從 TP 庫向 AP 庫遷移面臨兩難,一次性遷移風(fēng)險(xiǎn)大不現(xiàn)實(shí);逐步遷移,量小看不出選型是否正確,遷移多了發(fā)現(xiàn)不合適工作白做,而且還可能出現(xiàn)后遷移的部分影響前面的情況。
集算器 SPL 相對 AP 庫更輕量,文件存儲使用靈活,獨(dú)立或嵌入使用簡單輕量,同時(shí)硬件資源利用率高,總體成本更低。集算器采用文件存儲,非常適合逐步遷移,不會出現(xiàn)遷移前后相互影響的情況,可以充分降低遷移風(fēng)險(xiǎn)。
SPL 具備天然跨源計(jì)算能力,不同庫之間、文件與數(shù)據(jù)庫都可以進(jìn)行實(shí)時(shí)混合查詢,能夠滿足 TP 和 AP 分庫后的全量數(shù)據(jù)查詢需求。
計(jì)算復(fù)雜、查詢性能低、數(shù)據(jù)源多樣都會產(chǎn)生數(shù)據(jù)庫中間表,中間表存在庫內(nèi)主要是為了利用數(shù)據(jù)庫的再計(jì)算能力。但數(shù)據(jù)表一旦創(chuàng)建就有可能被多個(gè)應(yīng)用共用,導(dǎo)致緊耦合,即使應(yīng)用下線了,中間表仍然不敢刪,還要消耗資源維護(hù),數(shù)據(jù)庫又累又繁。
用集算器,中間表可以移植到成本更低 I/O 性能更高的文件系統(tǒng)中,降低數(shù)據(jù)庫冗余,為數(shù)據(jù)庫減負(fù)。SPL 直接基于文件計(jì)算,性能更高。
中間表在庫外采用文件系統(tǒng)的樹狀結(jié)構(gòu)進(jìn)行分類管理,跟隨應(yīng)用走,應(yīng)用下線可以放心刪除對應(yīng)目錄的中間表,不存在任何耦合不敢刪的問題。
中央數(shù)據(jù)倉庫承擔(dān)所有查詢?nèi)蝿?wù)不太現(xiàn)實(shí),但如果再為應(yīng)用分別建設(shè)不同的分析庫(集市)會面臨矛盾,僅同步部分?jǐn)?shù)據(jù)無法滿足應(yīng)用需要,同步全量數(shù)據(jù)又要集群才能撐起來,導(dǎo)致重復(fù)建設(shè)。
使用集算器充當(dāng)前置數(shù)據(jù)庫提供貼近應(yīng)用的計(jì)算服務(wù)(提供 JDBC 和 RESTful 接口),集算器可以僅存儲高頻熱數(shù)據(jù),單機(jī)就能搞定,可以完全避免重復(fù)建設(shè)。再借助 SPL 提供的數(shù)據(jù)網(wǎng)關(guān)功能,將超出熱數(shù)據(jù)范圍的查詢路由到中央數(shù)據(jù)倉庫中實(shí)施,就能滿足應(yīng)用所有數(shù)據(jù)查詢需求。
數(shù)據(jù)分庫會面臨 T+0 查詢問題,分時(shí)同步數(shù)據(jù)機(jī)制不僅復(fù)雜,也難以滿足實(shí)時(shí)查詢需求,不同庫之間又很難進(jìn)行跨庫查詢。HTAP 庫大都在 AP 方面能力并不強(qiáng),而且與原有 TP 庫類型不同,把業(yè)務(wù)都遷移過去會面臨較大風(fēng)險(xiǎn)。HTAP 庫也無法繼承 NoSQL 等多樣數(shù)據(jù)源的優(yōu)勢,性能往往也不達(dá)標(biāo)。
集算器天然支持多數(shù)據(jù)源混合計(jì)算,使用 SPL 可以在保留 TP 庫的同時(shí)將冷數(shù)據(jù)外置實(shí)現(xiàn) T+0 查詢,這樣不僅幾乎沒有遷移風(fēng)險(xiǎn),原有庫還可以繼續(xù)利用,保留各種數(shù)據(jù)源的優(yōu)勢。
更進(jìn)一步,將冷數(shù)據(jù)使用 SPL 高性能文件存儲,還可以獲得極致的計(jì)算性能。
國產(chǎn)芯片慢,再加上國產(chǎn)數(shù)據(jù)庫性能也不高,國產(chǎn)化后整體性能與原來有很大差距,需要花費(fèi)更高的成本才能彌補(bǔ)。而且有些新型高性能數(shù)據(jù)庫對國產(chǎn)芯片的兼容性還不好,總體應(yīng)用效果并不理想。
集算器 SPL 在軟件層面做了革新,性能在同等硬件下會比傳統(tǒng)數(shù)據(jù)庫技術(shù)快數(shù)倍,可以彌補(bǔ)硬件性能的下降,達(dá)到使用國產(chǎn)芯片性能也不會降低的效果。集算器使用純 Java 編程,天然兼容所有國產(chǎn)芯片和操作系統(tǒng)。在實(shí)測中,SPL 在國產(chǎn)芯片上的計(jì)算性能,很多復(fù)雜計(jì)算還可以超越其他數(shù)據(jù)庫在國外芯片上的運(yùn)算性能。