mongodb——mongo笔记*

原创
2017/01/23 16:36
阅读数 128

参考文档:MongoDB 教程      MongoDB 3.4 中文文档

  1. 客户端驱动版本和服务器驱动版本要一致,要不然会报错误:Connection reset by peer。参考: MongoDB错误和使用总结2013-02-16(持续更新)    java.net.SocketException四大异常解决方案
  2. mongodb添加用户
#管理员root账户
db.createUser({user: "root",pwd: "123456",roles: [ "root", "userAdminAnyDatabase", "userAdmin", "dbOwner" ]})
#ops manager的数据库用户
db.createUser({user: "mongodbms",pwd: "123456",roles: [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterMonitor" ]})
#为test库添加读写权限的用户
db.createUser({
    user: "user1",
    pwd: "123456",
    roles: [ { role: "readWrite", db: "test" } ]
})

注意使用db.auth()时,用户名密码都需要用引号引起来。
mongodb内置角色:Built-In Roles

  1. mongodb中replica set的主备切换
  • 首先排除不需要竞选primary的secondary实例,进入不需要竞选的实例(mongod实例)中,执行如下命令
#冰冻此mongod实例,60秒内不参加内部选举工作
myShard_0:SECONDARY> rs.freeze(60)
  • shutdown此rs的primary节点
myShard_0:PRIMARY> rs.stepDown(15)

执行完成之后,会报错重连,此时连接后的状态就是SECONDARY了,等待选出primary节点即可。
参考:mongodb 复制集主节点切换方法

  1. mongodb中查看每一条记录的执行时间
  • 在shard的primary节点中运行
#获得当前profile的设置
db.getProfilingLevel()
#不记录操作耗时
db.setProfilingLevel(0)
#记录慢查询(耗时大于100ms的操作)
db.setProfilingLevel(1)
#记录所有的操作
db.setProfilingLevel(2)
  • 运行完成之后,查看操作耗时
#查询耗时大于500的操作
db.system.profile.find({millis:{$gt:500}})

参考:mongodb可以通过profile来监控数据 (mongodb性能优化)

  1. 从mongo的安装可以知道,mongo命令主要有mongod:启动集群实例,mongos:启动管理客户端连接的实例,mongo:进入mongo的命令行。
  2. 在mongodb的shard集群中,基于2dsphere,没法在find命令中使用:db.sz_user({loc:{$near:{……}}),这是mongodb的一个bug,会报错:use geoNear command rather than $near query,但是在非shard集群中是可以在find中使用$near。shard集群中使用runCommand是可以的,但是runCommand在高并发时,会停顿几秒,使用db.sz_user.aggregate($geoNear)能解决此问题。所以一句话,在shard集群中,$near没法用,runCommand高并发性能有问题,$geoNear才能完美解决此问题。
    参考:MongoDB geospatial query with find()
  3. 如果mongodb集群开启了shard,大量插入数据的时候,有可能trunks分配不是很均衡,但是等集群空闲的时候,会自动均衡所有的trunks。
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部