看看關係型資料庫是怎麼吊打Hadoop的
題目有點過分是不是?大家看完文章再看看是不是過分。不少公司OLTP的資料庫都是關係型資料庫,這些資料庫在OLAP的場景上表現一般。所以在不少架構中,會看到使用ETL的方式將資料庫送到Hadoop中,使用其分散式儲存和分散式計算的特點來進行分析。但是ETL很難解決實時性問題,而且如果上游刪除資料,ETL是乾瞪眼沒有辦法解決,只能承擔資料的不一致。還有就是嚴重依賴上游時間戳。有人可能會問,存在的就是合理的,這不是也在用著嗎?對,但是能用和用的爽不完全劃等號。
現在隨著實時數倉的興起於落地,不少企業使用一些列式資料庫來進行替換。主要有ClickHouse和Startrocks等。其實這些資料庫之所以被選擇是因為在分析場景上效能優秀。而其優秀的原理,我個人認為主要是因為他是列式資料庫。
換句話時候,哪個資料庫列式都差不多。MySQL PostgreSQL還有Oracle都一樣(或者說差不多)。而實際上這三個資料庫真的有。
這裡僅僅以Oracle為例,下面這裡有三個表,都是1億數量級的規模。可以看到在這個量級下,Oracle的聚合分析,幾乎都在100毫秒以下。硬體配置(作業系統層面識別到的):22C 220G記憶體。使用了Oracle的In-Memory。
在單表聚合上什麼列數資料庫都沒有問題。這個其實是列式儲存的優勢。雖然Oracle也支援了向量資料庫,但是這裡僅僅用到的是向量執行,算不上向量資料庫。30毫秒出結果。
其實即使在列式資料庫上,如果進行多表關聯。ClickHouse和Startrocks上多表關聯會有很大的效能衰減。所以看看在Oracle上效果如何?
首先2表關聯(兩個1億的表,全表關聯聚合)。現實工作中除非故意,理論上不會這樣。 這種極端情況下,看到執行耗時2.5秒。確實衰減了,而且不少。但是也勉強說得過去。畢竟是極端情況。
然後3表關聯(3個1億的表,全表關聯聚合)。 這種要極力避免,看到執行耗時4秒。看來是線性的變慢了。當然了這種也是有其他解決方案的。
不過畢竟有幾個業務表上億的資料的企業不多,而且也不會這樣不帶條件查詢。如果帶上條件那麼1000萬的2表關聯結果是240毫秒。
如果帶上條件那麼1000萬的3表關聯結果是390毫秒。
以上一切的執行都是在OLTP資料庫上直接執行的,只是因為用到了資料庫自帶的列式而已。
這中間沒有ETL,不需要CDC技術棧,不需要依賴時間戳。不需要資料加工,不需要資料清洗,也不需要製作成大寬表。以上這些不需要的總節約時間,單位都是以小時計的。更不用說這個SQL的執行時間,MapReduce的任務還沒分解呢,我這裡已經出結果了。
Hadoop在大家都是爛硬體的時代,依靠多機器全表IO打贏了單機器的全表IO(如果單機是用索引的話,那連20年前的單機也打不贏)。而對於現在HTAP或者說超融合的多模資料庫來說,比如MySQL的HeatWave等列式儲存的優勢(這裡包括MySQL Oracle PostgreSQL TiDB和OceanBase Polardb等等,不一一列舉了),使得聚合運算場景上也是可以輕鬆分析。列數儲存的分析對行式儲存的分析優勢明顯,何況還少了巨大的中間環節的過程。有點降維打擊的意思。
之所以不少系統還是用OLTP+OLAP的原因,主要是線上的資料庫本身不支援列式儲存,所以必須要有CDC傳輸的過程。或者擔心OLAP的場景亂用影響OLTP,那麼就把資料複製一份,實時同步,單獨執行OLAP。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/637517/viewspace-3002425/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關係型資料庫和非關係型資料庫的區別資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- NoSQL:從關係型資料庫到非關係型資料庫SQL資料庫
- 關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫的簡單對比資料庫
- 關係型資料庫的理解資料庫
- PostgreSQL關係型資料庫SQL資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- 大資料與Hadoop之間是什麼關係?大資料Hadoop
- 關係型資料庫,何以稱為“關係”資料庫
- 如何將資料從Hadoop匯出到關係型和NoSQL資料庫?HadoopSQL資料庫
- OO資料庫和關係型資料庫資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- 關係型資料庫理論資料庫
- 非關係型資料庫:Cassandra資料庫
- redis—非關係型資料庫Redis資料庫
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫介紹及優劣勢比較資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- MapReduce 與 關係型資料庫的區別資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 平時常見關係型資料庫資料庫
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- 反DDD模式之關係型資料庫模式資料庫
- 對關係型資料庫侷限性的重新思考資料庫
- 最受歡迎的 NoSQL 和關係型資料庫SQL資料庫
- 關係型資料庫:使用正規化建立資料庫(轉)資料庫
- 大資料和Hadoop什麼關係?為什麼大資料要學習Hadoop?大資料Hadoop
- 關係型資料庫和NOSQL資料庫的優缺點介紹資料庫SQL