golang数据库 MongoDB 性能优化与监控(12)

Golang 2023/04/23 Golang, MongoDB

一 性能优化原则

  • 1 在开始设计系统时候就必须考虑性能问题,因为系统开发上线后出现性能问题再补救的代价很大。

  • 2 必须优化问题的根源

  • 3 被优化的系统与多个系统进行了关联,需要考虑优化后的影响

  • 4 当有很多参数影响性能时,可以一次更改一个参数,这样比较容易判断哪个参数对系统的性能影响。

  • 5 需要检查是否是硬件问题造成的性能下降

  • 6 开始又花钱,必须考虑如果优化没有达到效果,反而出现更大问题,需要对优化操作进行回退。

二 常见mongo的sql优化方案

  • 创建索引:如果写入较多,尽量不要添加索引

  • 限定返回数: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

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。