rocksDB定義
快速存儲系統,充分挖掘 Flash or RAM 硬件的讀寫特性,支持單個 KV 的讀寫以及批量讀寫。本質:犧牲了一部分讀的性能和增加了合併的開銷,換取了高效的寫性能。
LSM-Tree(Log-Structured-Merge-Tree)的理解
- 簡述:內存中構建“小樹”,到一定的規模,Merge到磁盤的“大樹”。
- 多level的文件格式:最熱最新的數據L0層,最冷最老的數據LN層的佈局,磁盤通過B樹索引。
- B樹+“有序文件集”批量寫入(定義爲同level)
- 數據按key有序,合併不同file、level上的數據時,類似merge-join。
基本文件格式
- memtable:內存文件數據格式,新數據進內存。
- sstfile:內容是有序的。
- logfile:
放大因子
- 寫放大:例如,用戶寫入了10字節,但實際寫到磁盤的有100字節。
- 讀放大:例如,用戶要讀取一個page,但實際下面讀取了3個pages。
- 空間放大:數據庫可能是100 MB,但實際佔用了200 MB的磁盤空間。