加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB比较常见问题有哪些?一文带你了解怎样处理

发布时间:2023-08-25 14:59:30 所属栏目:系统 来源:
导读:在使用MongoDB过程中,可能会遇到多种问题,例如mongod服务无法正常启动。对此这篇文章就给大家来分享一些MongoDB中常见问题及解决方法,需要的朋友可以了解看看。

1 非正常关闭服务或关机后 mongod服务无法正常
在使用MongoDB过程中,可能会遇到多种问题,例如mongod服务无法正常启动。对此这篇文章就给大家来分享一些MongoDB中常见问题及解决方法,需要的朋友可以了解看看。
 
1 非正常关闭服务或关机后 mongod服务无法正常启动
 
在使用中发现mongodb 的服务很容易因为非正常关闭而启动不了,不过解决也很容易
 
删除data目录下的 *.lock文件,再运行下 /mongodb_binpath/mongod -repair -f config文件路径 再启动即可
 
也可以在/etc/init.d/mongod 服务启动的文件中加入 启动前删除该文件 如下:
 
start() {
 
rm -f /usr/mongodb/data/master/mongod.lock
 
/usr/mongodb/bin/mongod --config /usr/mongodb/config/master.conf
 
}
 
2、server-side JavaScript execution is disabled
 
完整信息:JavaScript execution failed: group command failed: { "ok" : 0, "errmsg" : "server-side JavaScript execution is disabled" }
 
解决方法:mongod.conf 这个配置文件里 noscripting:false 如果true 就是禁止
 
3、 Decimal转换成BsonValue值异常
 
BsonValue 暂不支持 Decimal类型,转换前强制转换类型,
 
if (type==typeof(Decimal))
 
{
 
return Convert.ToDouble(value);
 
}
 
如果用MongoDB,最好不要用decimal类型,否则在序列化的时候也有问题,可用double
 
4、MONGO Replica 频繁插入大数据的问题
 
MONGO Replica 频繁插入大数据的问题,当在复制集中频繁插入大数据时有可能出现 “error RS102 too stale to catch up"出现这个错误的原因是SECONDARY即副节点的复制速度跟不上了,当需要批量频繁向副本集中写入数据时最好先移除副本节点,待插入完后重新同步。
 
5 Mongo集群没有primary但有secondary时连接不上且不能读数据
 
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
 
shell
 
1 repset:SECONDARY> db.getMongo().setSlaveOk(); #要在primary上执行
 
2 rs.slaveOk()
 
其他客户端
 
从secondary 读数据
 
如果应用程序没有设置相应的ReadReference也可能不能进行读取操作
 
MongoClientSettings set = new MongoClientSettings();
 
List<MongoServerAddress> servers = new List<MongoServerAddress>();
 
servers.Add(new MongoServerAddress("192.168.129.129", 37017));
 
servers.Add(new MongoServerAddress("192.168.129.129", 37018));
 
servers.Add(new MongoServerAddress("192.168.129.129", 37019));
 
set.Servers = servers;
 
//设置副本集名称
 
set.ReplicaSetName = "rs0";
 
//设置超时时间为3秒
 
set.ConnectTimeout = new TimeSpan(0, 0, 0, 3, 0);
 
MongoClient client = new MongoClient(set);
 
MongoServer server = client.GetServer();
 
MongoDatabase db = server.GetDatabase("test");
 
MongoCollection coll = db.GetCollection("test");
 
注:设置驱动的ReadReference也可以通过MongoDB连接字符串配置:mongodb://example1.com,example2.com,example3.com/?readPreference=secondary。通过连接字符串指定的read preference是针对整个连接。
 
set.ReadPreference = new ReadPreference(ReadPreferenceMode.PrimaryPreferred);
 
将ReadPreferenceMode设置成Secondary或SecondaryPreferred
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章