1、MongoDB 应用与优化进阶实例增长趋势图业务应用规模27002600250024002300220021002000实例数量 :2570+日访问量 :263亿+业务覆盖率:90%+DBA人数 : 1.5人 无多文档事务事务及多表关联查询需求 业务快速迭代,需求频繁变动行业 单集群并发过大无法支撑业务增长 数据量增长预期TB及以上存储需求 期望要求99.999%数据库高可用场景特性介绍特性介绍部署架构部署架构目录最佳实践最佳实践特性介绍特性介绍高性能文档化强压缩一致性高可用分布式特性介绍特性介绍传说中的“数据丢失”切换后的 RollBack特性介绍特性介绍传说中的“数据丢失”切换后的 Rol
2、lBack特性介绍特性介绍关于“写一致性”关于写策略 Write Concern w: value, j: boole, wtimeout: n - w写入到指定个数或特定的实例(0、n、majority 或 Tag)- j写操作已确认写入 journal 日志- wtimeout写入请求等待确认的超时时间特性介绍特性介绍关于写策略 Write Concern w: 2, j:true, wtimeout: 5000 区别不同版本主从差异特性介绍特性介绍关于“写一致性”关于写策略 Write Concern原理特性简介特性简介部署架构部署架构目录最佳实践最佳实践部署架构部署架构副本集(Repl
3、ica Set) 最小资源 自动选主 维护简单 其他扩展部署架构部署架构分布式集群(mongos) 运维复杂 读写扩展 弹性容量 自动均衡 数据切分部署架构部署架构关于mongos 的chunk部署架构部署架构关于mongos 的shard key- HASH 分片分片数据分布相对相对均匀(写分散)高效等值查询场景-片键考量片键考量 基数(Cardinality) 频率( Frequency)部署架构部署架构关于mongos 的shard key- RANGE分片分片适合于范围查询(读局部)- 片键考量片键考量 基数(Cardinality) 频率( Frequency) 单调(Monoton
4、ically)部署架构部署架构关于mongos 的shard key- ZONES 分片分片自定义区域区域分片- 适合场景适合场景 基于硬件性能差异的数据切分存储 特定地理位置数据与应用服务最近- 注意事项注意事项 区域覆盖的范围包含下界不含其上界 区域不可共享范围亦不能有交叉范围部署架构部署架构mongos 使用限制 shard key 值不允许更新亦不可在线变更值不允许更新亦不可在线变更shard key 单文档单文档update 、delete 、remove 条件必须带条件必须带shard key count求分片集合总记录数不准可用求分片集合总记录数不准可用aggreagte试试试试
5、 不支持不支持group操作可用操作可用aggregate 替代替代 不支持使用不支持使用 geoSearch 命令的地理位置查询操作命令的地理位置查询操作特性简介特性简介部署架构部署架构目录最佳实践最佳实践最佳实践最佳实践 常见认证问题常见认证问题 相关查询优化相关查询优化 其他使用事项其他使用事项最佳实践最佳实践认证问题 - 合理配置连接 线程线程-连接连接 网络模型网络模型 每个连接需分配1M的堆内存 大量连接创建与销毁开销大 连接资源控制连接资源控制 限制最大连接maxConns 配置连接池maxPoolSize 调整cursorTimeoutMillis最佳实践最佳实践认证问题 最新
6、认证模式的坑 SCRAM-SHA-1的优势的优势 更强的加密散列函数SHA-1 Client与Server端双向认证 引发问题引发问题 高并发短连接负载飙高 临时解决临时解决client:authMechanism=MONGODB-CRserver:system.version- currentVersion:3最佳实践最佳实践 常见认证问题常见认证问题 相关查询优化相关查询优化 其他使用事项其他使用事项最佳实践最佳实践查询优化 - 读优先级控制(readPreference) readPreference primary primary Preferred secondary seconda
7、ry Preferred nearest最佳实践最佳实践查询优化 索引类型及创建最佳实践最佳实践查询优化 理解索引最左前缀原则 哪些查询可能走索引哪些查询可能走索引1、2、3、4 查询包含最左索引字段查询包含最左索引字段 以索引创建顺序为准 与查询字段顺序无关 单个索引覆盖最多查询单个索引覆盖最多查询最佳实践最佳实践查询优化 分页查询 普通分页查询普通分页查询db.test.find( name : li ).skip(10000).limit(3) 优点优点: 使用简单粗暴效率低 一种新的思路一种新的思路db.test.find(_id:$gt:3, name : li ).limit(3) 优点优点: 顺序分页总体效率较高 缺点缺点: 跳跃分页第一次效率低最佳实践最佳实践查询优化 批处理与更新操作 bulkWrite(,order:false) insertMany(, order:false) update(,upsert:true) findAndModify(,upsert:true)最佳实践最佳实践 常见连接问题常见连接问题 相关查询优化相关查询优化 其他使用事项其他使用事项最佳实践最佳实践其他事项-数组更新最佳实践最佳实践其他事项-数组查询Q&A