MongoDB的使用
1、使用navicat连接
为了方便开发,采用navicat连接。需要注意的是navicat只有新版才能连接mongodb,我这里用的最新版本v15。没有安装最新版navicat的盆友,阔以参照下面链接下载安装:
https://www.jianshu.com/p/3af7fccc22c7
测试连接:
查看文档时,有几个很有用的功能按钮:
基础的使用比较简单,可查看相关使用教程,比如菜鸟教程:https://www.runoob.com/mongodb/mongodb-tutorial.html
2、注意事项
针对使用中遇到的问题,这里列出几点注意事项:
1)索引
a. 合理创建索引
一定要合理创建索引, 有很多人都被宣传片迷惑,认为mongo的读取速度本身就应该很快,所以从mysql转过来后,就连创建索引都忘了,当表(collection) 很大时,不创建索引是非常影响性能的。
比如:db.users.createIndex({open: 1, close: 1}, {background: true})
b. 创建索引导致数据阻塞
在前台建索引时需要占用一个写锁(而且不会临时放弃),如果集合的数据量很大,建索引通常要花比较长时间,特别容易引起问题。
解决的方法很简单,MongoDB 提供了两种建索引的访问,一种是 background 方式,不需要长时间占用写锁,另一种是非 background 方式,需要长时间占用锁。使用 background 方式就可以解决问题。
例如,为超大表 users 建立索引
千万不要使用:
db.users.createIndex({open: 1, close: 1})
而应该使用:
db.users.createIndex({open: 1, close: 1}, {background: true})
2)只返回想要的列
大表查询时,只返回你想要的列。特别是单collection字段数据量比较大时,非常容易引起性能问题。
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
3)避免使用array
MongoDB 的 Array 字段是比较独特的一个特性,它可以在单个 document 里存储一些简单的一对多关系。
但是,我们尽量避免在model里面使用Array类型的字段,因为使用了Array,查询时,不可避免的会使用in操作,in操作无法利用索引,这个在关系型数据库里面也是存在的,大表操作一定要避免。
比如:这里的value就是一个Array类型的字段
1 { 2 "_id": ObjectId("60ae5841e72f0000e3001c74"), 3 "level": 2, 4 "pid": "60ae5116e72f0000e3001c51", 5 "value": [ 6 { 7 "key": "v1", 8 "name": "法院名称", 9 "value": "法院" 10 }, 11 { 12 "key": "v2", 13 "name": "指标名称/值", 14 "value": "余额(万元)" 15 }, 16 { 17 "key": "v3", 18 "name": "指标名称/值", 19 "value": "到账/发放总额(万元)" 20 } 21 ], 22 "type": "json", 23 "isDelete": NumberInt("0") 24 }
4)一次返回所有数据
尽量一次返回所有需要的数据,避免GET_MORE,避免游标操作,当用户进行查询迭代时,mongo会首先返回一个数据块供你迭代,当你迭代的数据超过这个数据块时,mongoid 发起 GET_MORE 命令移动游标获取下一个数据块,而就是这个移动游标的操作就非常慢,特别是你返回的列比较多的时候,性能非常低。每次返回的数据块的大小是由batchSize控制的,可以通过修改它的默认值进行控制。
5)事务
mongodb不支持事务,所以你一定要考虑清楚,权衡利弊。
参考链接: https://www.cnblogs.com/l1pe1/p/7871859.html