![](/img/trans.png)
[英]Are the contents in a LMDB always stored BOTH in disk AND memory?
[英]In memory databases with LMDB
我有一個項目,它使用 BerkelyDB 作為多達數億條小記錄的鍵值存儲。
它的使用方式是將所有值插入到數據庫中,然后使用順序訪問和隨機訪問對它們進行迭代,所有這些都來自單個線程。
使用 BerkeleyDB,我可以創建“永遠不會保留在磁盤上”的內存數據庫。 如果數據庫小到可以放入 BerkeleyDB 緩存,則永遠不會將其寫入磁盤。 如果它大於緩存,則將創建一個臨時文件來保存溢出。 此選項可以顯着加快速度,因為它可以防止我的應用程序在關閉數據庫時將千兆字節的死數據寫入磁盤。
我發現 BerkeleyDB 寫入性能太差,即使在 SSD 上,所以我想切換到LMDB 。 但是,根據文檔,似乎沒有創建非持久性數據庫的選項。
如果我根本不關心持久性或並發訪問,我應該使用什么配置/選項組合來獲得 LMDB 的最佳性能? 即讓它像一個帶有臨時后備磁盤存儲的“內存數據庫”?
只需使用 MDB_NOSYNC 並且永遠不要自己調用mdb_env_sync() 。 此外,您還可以使用 MDB_WRITEMAP。 操作系統最終仍會將臟頁刷新到磁盤; 您可以使用 /proc/sys/vm/dirty_ratio 等來控制該行為。
來自這篇文章: https : //lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/
vm.dirty_ratio 是在所有內容都必須提交到磁盤之前可以用臟頁填充的系統內存的絕對最大量。 當系統到達這一點時,所有新的 I/O 都會阻塞,直到臟頁被寫入磁盤。
如果臟比率太小,那么您將看到頻繁的同步磁盤寫入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.