內存KV緩存/數據庫,可以選擇它? | 1分鐘系列
互聯網業務,絕大部分場景,會使用緩存服務。
但有時候,確實會使用到進程內存緩存/數據庫,這個時候,LevelDB就能派上用場了。
啥是LevelDB?
LevelDB是Google開發的,一個速度非常塊的KV存儲庫(storage library),它支持字符串的key與字符串的value,并且這種映射關系按key排序(ordered mapping)。
LevelDB有什么特點?
(1)key和value可以是字符串或者字節流;
(2)數據默認按key排列,有序存儲;
畫外音:調用方可以重載排序方法,以實現自定義排序。
(3)簡單易用,基本操作只有3種:
- Put(key, value)
- Get(key)
- Delete(key)
(4)提供原子批量修改接口;
(5)支持數據快照;
(6)支持數據自動壓縮;畫外音:使用的是snappy壓縮算法。
(7)開源,文檔很詳盡,Google出品很可靠;
LevelDB有什么局限?
- LevelDB不是一個SQL數據庫,沒有關系型的存儲模型,不支持SQL語句,不支持索引;
- 同時只能有一個進程(當然,這個進程可以是多線程的)訪問一個特定的數據庫;
- LevelDB只是一個lib庫,沒有實現什么client-server網絡通訊什么的,當然用戶可以自己將lib包裝一層,實現自己的server;
LevelDB的性能如何?
內存緩存的特點就是快。
Google也進行了一系列測試:測試庫共100w行記錄,每條記錄16字節的key,100字節的value,壓縮后的value大概50字節。
寫性能
- 順序寫:平均每次操作耗時1.765微秒,即支持每秒大概55w次順序寫操作;
- 順序寫+每次都刷盤:平均每次操作耗時268.409微妙,即支持每秒大概3700次的刷盤寫操作;
- 隨機寫:平均每次操作耗時2.460微秒,即支持每秒大概40w次隨機寫操作;
- 更新寫:平均每次操作耗時2.380微秒,性能和隨機寫差不多;
讀性能
- 隨機讀:平均每次操作耗時16.677微秒,即支持每秒大概6w次隨機讀操作;
- 順序讀:平均每次操作耗時0.476微秒,即支持每秒大概210w次順序讀操作;
- 逆序讀:平均每次操作耗時0.724微秒,即支持每秒大概130w次逆序讀操作;
上述性能都是在沒有打開“壓縮”功能下的結果,如果打開“壓縮”選項,性能會有所提升。
畫外音:Google非常誠實的提到,由于100w行的數據量很小,這些數據是能夠完全放入內存。
【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】