MongoDB - 读写性能

数据库请求流程

应用端

应用端视角里(MongoDB驱动程序与MongoDB进行交互),一次数据库请求流程如下:
应用端

  • 选择节点
    在复制集读操作里,选择节点会受readPreference参数影响
  • 排队等待
    总连接数大于最大连接数maxPoolSize,连接满了如何解决:优化查询性能,提高服务端资源等
  • 连接与认证
    等待创建连接和认证将比直接从连接池获取连接更耗时,所以应该设置minPoolSize一次性创建足够的连接,避免突发的大量请求

数据库端

数据库端

wiredTiger的ticket:大概有点像semaphore?

  • 排队等待
    ticket是和系统的资源相关的,增大ticket并不会优化排队等待,所以我们其实是需要优化CURD
  • 合并结果
    在mongos进行结果合并,尽量使用带片键的查询条件减少参与查询的分片数

执行请求

执行请求(读)的具体过程如下图,造成性能问题的主要原因就是不能命中索引和内存排序

执行请求读

执行请求(写),MongoDB默认是{j:false},即不用先刷盘,直接写内存缓存就能返回了,操作如下图:
执行请求写

  • 磁盘速度必须比写入速度快才能保证(写频繁情况下的)性能

性能瓶颈总结

  • 应用端:选择入口节;等待数据库连接;创建连接和完成认证
  • 服务端:排队等ticket;执行请求;合并执行结果
  • 网络:应用/驱动->mongos;mongos->片
posted @   rachel_aoao  阅读(886)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示