永发信息网

如何将MongoDB改造成内存数据库

答案:1  悬赏:60  手机版
解决时间 2021-11-15 18:26
如何将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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
驾照,科目一考完要多长时间才能考科目二,或
身上老是不停的流汗是什么原因?
跨度8米,5条5*5角铁焊接的铁笼能承受500斤重
三角形一边是1另一边是2一个角为30℃,另一角
电脑开机蓝屏出现stop:OXOOOOOOF4(OxOOOOO003
系统之家win7旗舰版sp1和sp3有何区别
山丘熊猫纸看起来是淡黄色的,和平时用的心相
排球场地址好找么,我有些事要过去,
汽车第一次加气需要注意什么
彭水高谷的经纬度各为多少
女生和男生聊天喜欢发表情说明什么
音乐会上,既有 的流行歌曲,也有 的世界名曲
33344打一成语是什么
煎鸡蛋时,如何才能让鸡蛋不变形,而且很好吃
林黛玉的年龄....
推荐资讯
如何抓鸽子
关于pr软件的安装。
同步发电机是怎么励磁的
魏太帝曹嵩真的是被陶谦杀害的吗?
mov eax,fa eax = ?(十进制)
快餐店一般用什么工具蒸米,量大,还好吃。是
陕西汉中到四川广汉距离有多长
北方民居和南方民居有何不同
世界田径挑战赛和世界田径锦标赛的区别
芜湖东到合肥第一个服务区多远
如何将网页中的图片超链接到Excel 中?然后一
淮杨莱的特点,与杭帮莱特点,有什么不同之处
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?