@[TOC]LevelDB概述
特性
- 他是一個key、value存儲數據庫。
- 數據按照key的字典序進行排序,也可以重載這個排序方法
- 提供基本的增刪查API:Put(key,value), Get(key), Delete(key)
- 支持針對多條操作的原子batch操作
- 只允許單個進程訪問
- LevelDb的寫操作要大大快於讀操作,而順序讀寫操作則大大快於隨機讀寫操作。(因爲一次寫入操作只涉及一次磁盤順序寫和一次內存寫入,所以這是爲何說LevelDb寫入速度極快的主要原因。)
對比Redis的不同點:
- Redis是純內存型的數據庫,而LevelDB大部分數據放在磁盤中
- Redis提供了server-client進程,而LevelDB不提供,LevelDB只是一個引擎。
RocksDB對比LevelDB的改進點:
- RocksDB增加了Column Family,每個CF單獨有一顆LSM-Tree和多個MemTable。
- RocksDB支持多線程Compaction,而LevelDB是單線程Compaction的,在多CPU情況下RocksDB更加友好。
- 壓縮方面RocksDB可採用多種壓縮算法,除了LevelDB用的snappy,還有zlib、bzip2,RocksDB在多層採用不同的壓縮算法,0-2層不壓縮,最後一層用zlib,其它層用snappy壓縮。
- 每個Column Family的memtable與sstable都是分開的,所以每一個Column Family都可以單獨配置,所有Column Family共用同一個WAL log文件,可以保證跨Column Family寫入時的原子性
- leveldb中,memtable在內存中核心s的數據結構爲skiplist,而在rocksdb中,memtable在內存中的形式有三種:skiplist、hash-skiplist、hash-linklist