1 在开始设计系统时候就必须考虑性能问题,因为系统开发上线后出现性能问题再补救的代价很大。
2 必须优化问题的根源
3 被优化的系统与多个系统进行了关联,需要考虑优化后的影响
4 当有很多参数影响性能时,可以一次更改一个参数,这样比较容易判断哪个参数对系统的性能影响。
5 需要检查是否是硬件问题造成的性能下降
6 开始又花钱,必须考虑如果优化没有达到效果,反而出现更大问题,需要对优化操作进行回退。
创建索引:如果写入较多,尽量不要添加索引
限定返回数:limit()
只查询使用到的字段
使用capped集合:比普通集合读写效率高,但是大小固定,只能插入不能删除(只能删除整个文档)
# mongostat命令可以查看Mongo实例的统计信息: mongostat -u \'admin\' -p \'123\' --authenticationDatabase \'admin\' # 查看实例运行状态 db.serverStatus() # 查看数据库的状态信息 db.stats()
使用limit限制返回条数
避免使用skip跳过大量数据,因为skip是将一个一个文档加载到了内存。可以根据上次结果计算计算下一次查询位置
尽量不使用$where,因为这个操作符不适用索引
不要适用mapReduce做实时查询(因为交互很慢)
AND先查询结果小的再查询大的
OR先查询大的后查询小的
对于金融类产品,对金钱要求较高的,需要启用getlasterror,会返回上一个命令的执行状态,当然配合fsync参数可以阻塞应用,更能确保数据的成功写入,但是会极大降低性能。
Mongo也提供了第二种写入方式确保安全:使用Write Conern写入安全机制。mongo提供了四种安全写入机制:
非确认式写入:默认方式,该方式不返回响应结果,命令为:{writeConcern: {w: 0}}
确认式写入:会返回失败的错误信息,命令为:{writeConcern: {w: 1}}
日志写入:一般的写入完成指写入到内存中,并没有持久化到硬盘,该模式在记录保存到journal日志后才返回响应结果,命令为:{writeConcern: {w: 1, j:true}}
复制集确认式写入:写操作不仅要得到主节点的写入确认,还要得到从节点的写入确认,,命令为:{writeConcern: {w: 2}}
本文地址:https://www.stayed.cn/item/393
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我