TerarkDB宣稱不使用塊壓縮,這樣做的優勢真的很大嗎?
01-21
最近開始關注國產存儲引擎 TerarkDB ,可以從這兩個博客看到塊壓縮相關的文字:
1. TerarkDB架構介紹2. TerarkDB v0.13測試報告塊壓縮是資料庫甚至很多跟存儲相關的產品都在用的技術,TerarkDB不使用塊壓縮的意義有其宣傳的那麼大嗎?
作為資料庫,在系統資源(cpu, 內存, ssd, 磁碟 ...) 一定的前提下,我們希望:
1. 存儲的數據更多:採用壓縮,這個世界上有各種各樣的壓縮演算法……2. 訪問的速度更快:更快的 壓縮(寫)/解壓(讀) 演算法,更大的緩存……幾乎所有的壓縮演算法都嚴重依賴上下文:
- 位置相鄰的數據,一般情況下相關性更高,內在冗餘度更大
- 上下文越大,壓縮率的上限越大(當然,有個極限)
對於普通的以數據塊/文件為單位的壓縮,傳統的(流式)數據壓縮演算法工作得不錯,時間長了,大家也都習慣了這種數據壓縮的模式。基於這種模式的數據壓縮演算法層出不窮,不斷有新的演算法被實現出來。
對於資料庫,在計算機世界的古代,為 io 優化的 Btree 一直是不可撼動的,為磁碟優化的 Btree block/page size 比較大,正好讓傳統數據壓縮演算法能得到較大的上下文,於是,基於block/page的壓縮也就自然而然地應用到了各種資料庫中,在這個古代,內存的性能、容量,與磁碟的性能、容量,涇渭分明,各種應用對性能的需求也比較小,大家都相安無事。
現在,我們有了ssd,PCIe ssd,3d xpoint ……,內存也越來越大,塊壓縮的缺點也日益突出:- 塊選小了,壓縮率不夠,塊選大了,性能無法忍
- 更要命的是,塊壓縮,節省的只是更大更便宜的磁碟、ssd
- 更貴更小的內存不但沒有節省,反而更浪費了(雙緩存問題)
於是,對於很多實時性要求較高的應用,只能關閉壓縮……
TerarkDB 的壓縮,完全拋棄了塊壓縮,使用「全局壓縮」,這是一個理念上的突破,對於資料庫,「全局壓縮」不但提高了壓縮率,更重要的是:- 內存的利用率更高——因為沒有雙緩存問題
- 對於每個 Query,只解壓需要的數據,從而 Query 延遲更低,更穩定(無慢Query問題)
再加上 TerarkDB 的索引壓縮,大家可以展開豐富的想像了……
相關問題: 如何評價國產高性能存儲引擎 TerarkDB ? - 大數據TerarkDB不用壓縮快的話,我覺得優勢會降低,存儲是需要空間的。
推薦閱讀:
※簡單的時間複雜度問題.一到log這就不會了. 誰能給我講講啊?
※數據結構的那些排序演算法總是記不住,這個真的背的嗎?
※C 和 C++ 值得深入學習嗎?
※C++ 自己寫一個更好的 string 需要什麼步驟?