加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

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

发布时间:2021-12-12 09:21:40 所属栏目:教程 来源:互联网
导读:在使用MongoDB过程中,可能会遇到多种问题,例如mongod服务无法正常启动。对此这篇文章就给大家来分享一些MongoDB中常见问题及解决方法,需要的朋友可以了解看看。 1 非正常关闭服务或关机后 mongod服务无法正常启动 在使用中发现mongodb 的服务很容易因为非
 在使用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

(编辑:晋中站长网)

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

    热点阅读