TerarkDB宣稱不使用塊壓縮,這樣做的優勢真的很大嗎?

最近開始關注國產存儲引擎 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 需要什麼步驟?

TAG:資料庫 | 操作系統 | 演算法 | 數據結構 | 存儲引擎資料庫 |