天天看點

記憶體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有什麼局限?

(1)LevelDB不是一個SQL資料庫,沒有關系型的存儲模型,不支援SQL語句,不支援索引;

(2)同時隻能有一個程序(當然,這個程序可以是多線程的)通路一個特定的資料庫;

(3)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行的資料量很小,這些資料是能夠完全放入記憶體。

如果僅限于方案調研,上面的内容應該夠用了;如果想了解LevelDB内部的細節,未來再撰文吧。

本文轉自“架構師之路”公衆号,58沈劍提供。