【MongoDB】如何將MongoDB改造成內存數據庫

日前有測試需求將MongoDB改成內存數據庫。我們知道MongoDB有一個In-Memory存儲引擎,但是社區版不能用。所以我們自己想辦法將MongoDB改造成內存數據庫,經過探索,有三種方式。
研究版本:mongo-3.4

方式一:使用tmpfs作爲文件系統

方式二:使用ramfs作爲文件系統

這兩種方式的思路都差不多,使用一個內存模擬文件系統,由於替換了磁盤文件系統,數據就保留在內存中。

方式三:修改源碼設置in_memory參數

其實wiredtiger本身就支持將數據保留在內存中不刷盤,MongoDB的內存引擎估計也是利用wt的這一特性。wiredtiger.in文件中,wiredtiger_open()函數會傳入配置信息config,函數前面的註釋詳細解釋了有哪些配置項,其中就列出了in_memory配置,如下圖說明。
這裏寫圖片描述

如果修改源碼傳入in_memory=true編譯還是會報錯,提示incompatible argument in-memor。
這裏寫圖片描述

報上述錯誤是因爲開源版本對這個參數進行了檢查,如果設置了就會傳回錯誤碼,修改方式很簡單,令它不返回錯誤碼就行了。
這裏寫圖片描述

就這樣我們將MongoDB改成了內存數據庫。
由上至下的文件位置分別在:
src/third_party/wiredtiger/src/include/wiredtiger.in
src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
src/third_party/wiredtiger/src/conn/conn_ckpt.c

最近重新使用這個內存數據庫,發現報出新的錯誤,提示in_memory與log不能同時設置,這個log的設置默認爲true,如果指定nojournal,那麼會置爲false。不過先檢查後重置,所以報錯。
這裏寫圖片描述

這裏寫圖片描述

解決方法是在檢查之前就加入log=(enabled=false)

這裏寫圖片描述

然後啓動./mongod –dbpath {path} –nojournal

很奇怪之前不知是怎麼啓動成功的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章