LinkedIn開源PalDB,一個只讀的鍵值存儲數據庫
英文原文:LinkedIn Open Sources PalDB, a Read-only Key-value Store
LinkedIn 開源了 PalDB,一個可嵌入的鍵值對存儲數據庫,比 LevelDB 快 8 倍,并且內存占用比 hashset 少數個量級。
PalDB 是一個由 LinkedIn 開源并使用 Java 編寫的一次寫入鍵值存儲數據庫。當存儲創建后所有的操作都是禁止的,它是只讀的。這樣做的目的是提升讀操作的性能并降低內存占用。LinkedIn 的建議是使用它來存儲 side data,他們對于 side data 的定義是“一個過程以完成其工作而需要的額外的只讀數據。例如,被自然語言處理算法所使用的一系列已經停止使用的詞匯就是 side data”。
PalDB 是可嵌入的,它不使用模式并將數據保存在二進制文件之中。它提供了隨機數據訪問的 API。
據 LinkedIn 所說,它優化了讀操作,性能可與類似于 HashMap 和 HashSet 這樣的常駐內存的數據結構一較高下,同時需要的內存顯著減少,這些特性是公司在設計它時苦苦追求的。例如,一個含有 100M 鍵的 hashset 需要超過 500MB 的內存而 PalDB 只需要大約 80MB。或者,35M 個用戶 ID 使用 hashset 存儲需要 1.8GB 的內存而 PalDB 只需要 290MB。在 PalDB 中使用 Snappy 來壓縮數據的話將會使用更少的內存。
在速度方面,LinkedIn 的性能測試顯示 PalDB 擁有 2M 讀/秒的性能,或者說比 HashSet 快 6 倍,比 LevelDB 或 RocksDB 快 8 倍,這個測試環境是 MacBook Pro 3.1 GHz 和一個 10M-鍵索引。
PalDB 優化了存儲訪問。將數據存儲在磁盤上將會導致相當差的表現。盡管沒有限制數據的大小,索引的大小限制為 2GB。此外,重要的是要知道 PalDB 不是線程安全的。