




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MongoDB应用与实践之优化篇
常见连接问题合理配置连接资源1.threadperconnection网络模型如图:1.png每个连接对应一个线程,每个线程需要分配1M内存资源大量连接的创建与销毁数据库开销较大2.连接资源控制实例限制最大连接数。MongoDB启动时,可通过maxConns参数控制实例的最大连接数。限制连接池大小,客户端连接数据库时,可通过maxPoolSize配置连接池大小。例如:mongoClient=newMongoClient("mongodb://root:****@host1:port1,host2:port2/admin?replicaSet=repl00&maxPoolSize=100");登录失败问题默认情况下,MongoDB不开启鉴权,出于安全考虑,建议开启数据库认证。开启安全认证后,连接数据库时则需要提供安全认证库,如图php连接中配置db=>’xxx’(xxx表示认证库通常为admin);2.png命令行登录:
mongodb30/bin/mongo-uxyz-pxyz10.142.1.1:7003/abc(abc为业务库)--authenticationDatabaseadmin(admin为认证库)。另外mongodb不同版本客户端通常不兼容故不同版本数据库请采用对应版本客户端登陆否则可能出现不可预知的问题游标超时设置数据库连接的生命周期可由驱动指定。以PHP举例:连数据库时,通过socketTimeoutMS(全局级别)与cursorTimeoutMS(cursor级别)控制超时时间。SCRAM-SHA-1认证模式说明优势更强的加密散列函数SHA-1
Client和Server端双向认证3.png问题SCRAM-SHA-1认证过程中需要生产一串叫做server-nonce的随机字符串。SCRAM-SHA-1认证过程中需要生产一串叫做server-nonce的随机字符串。在Linux平台下是通过/dev/urandom设备来生成,该设备生成的随机效果较好但性能相对较差。使用这个设备涉及到用户态至内核态的切换,为了避免高并发读返回同样的随机串在内核中使用了spinlock来做控制。解决方式弃用SCRAM-SHA-1选择MONGODB-CR。客户端:配置MONGODB-CR认证模式,命令行登录举例:db30/bin/mongo-uxyz-pxyz10.142.1.1:7003/abc--authenticationDatabaseadmin--authenticationMechanismMONGODB-CR服务端:系统库admin下system.version集合currentVersion设置为3。查询优化读优先级控制(readPrefence)primary只读主节点(默认),适合读实时性要求高的业务primaryPreferred主节点优先,适合高并发写入的业务secondary只读从节点,实际业务基本不推荐secondaryPreferred读从库优先,常见业务优先推荐模式nearest就近原则,以ping响应速度为准选择可读主从库通常情况下,配置secondaryPreferred即可,高并发写入建议配置primaryPreferred(高并发写入情况下,从节点可能会被oplogapply阻塞)。索引优化1.常见索引类型unique(唯一索引)由数据库维护数据一致性高并发可能存在性能问题hashed(哈希索引)仅支持单个字段,不保证唯一性sparse(稀疏索引索引仅包含拥有索引字段的文档相对解压索引空间geo(地理位置索引)分为2d索引(二维平面)及2dsphere(球面)索引TTL(过期索引)依据过期时间,由数据库定期清理过期数据。text(文本索引)支持字符串内容的文本搜索查询,其字段值可以是字符串或者字符串元素数组。(text对资源消耗非常大且开源版本不支持,建议采用其他方案)。2.索引说明高并发场景下,唯一索引可能极大降低数据库性能,建议程序里优先处理。
索引创建时强烈建议添加{background:true}属性,例如:db.test.ensureIndex({"column1":1},{"unique":true,"sparse":true,background:true}){background:true}表示在后台构建索引,避免写锁阻塞数据库。3.索引最左前缀原则索引查询以索引创建顺序为准,与查询字段无关,索引检索遵循最左前缀原则,满足业务需求的情况下,索引越少越好,尽量避免一个查询一个索引。如图:索引{a:1,b:1,c:1}可以满足1、2、3及4这四类查询。4.png4.读懂查询计划explain()用于查看命令的执行情况:5.pngwinningPlan查询优化器选中的执行计划详情:IXSCAN:表示查询进行了索引扫描,可从indexName字段查看查询计划真实选中的索引信息。COLLSCAN:全集合扫描,执行计划出现COLLSCAN,表示该查询没有合适索引。SORT:表示查询过程需要进行排序,可能的情况是查询没有走索引或索引不是最优。rejectedPlans查询优化器丢弃的候选执行计划列表,当优化器没有多个可选索引的情况下,此列表显示为空。干掉慢查询避免使用Ctrl+c:对于MongoDB多数情况采用Ctrl+c并不会真正终止对数据的操作,建议优先使用db.currentOp()获取想要终止执行命令的opid,然后通过db.killOp(opid)终止具体操作。考虑使用cursor.maxTimeMS(N):根据业务具体情况设置数据库操作的执行时间(单位:毫秒)。N毫秒如果操作不返回结果,数据库自动终止该操作。查询优化Find优化按需获取字段,限制返回数据量,减少数据库及网络开销。
db.test.find({name:/i/},{_id:0,birthday:1}).limit(10)返回birthday字段并限制返回10条记录。控制查询条件:
db.test.find({id:{$in:[1,2,3,4,5,6,7,8,9……...]}}),最好限制in条件的个数,巨量条件可分批执行。业务端排序:
db.test.find({name:/i/},{_id:0}).sort({birthday:1}),高并发情景下sort操作最好由业务端程序进行。Insert优化增加冗余字段以空间换时间
商品数量*单价=商品总价,记录商品信息时,可添加总价字段以减小数据库的计算开销。超长文本优先压缩或HASH处理
小说类文本优先程序端压缩;url类文本建议hash计算后存储。不常检索的大字段可独立拆分存储。批量插入请考虑bulkWrite()。update、delete优化批量更新与删除
•尽量走索引:减少更新查找的时间开销
•分批处理:分批多次操作以降低数据库负载
•适当sleep:批量操作每条记录产生一条日志,日志需同步至从库,适当休眠可避免同步延迟。记录存在更新,不存在则插入
建议使用{upsert:true},{upsert:true}可保证操作的原子性。
db.test.update({"name":"lidan"},{"name":"lidan","sex":"male"},{upsert:true})优化之分页查询普通分页查询db.test.find({name:”lidan”}).skip(10000).limit(3)优点:使用简单粗暴缺点:大偏移量查询时会对性能产生较大影响一种新的思路条件查询+sort+limit+取上一页最后一条记录后:db.test.find({name:"li",num:{$gt:305}}).limit(3)优点:高效的顺序分页缺点:跳跃分页第一次效率相对较低6.png数组说明数组尾部追加元素时:oplog仅记录追加的元素及位置。
数组非尾部插入元素时,oplog将记录完整的数组字段信息。
对数组建立索引时,数据相对于对数组每一个元素创建索引,如数组元
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出租车企业车辆融资租赁合作协议范本
- 仓储物流场地租赁合同补充协议书
- 养老护理工作总结汇报
- 高端餐饮品牌独家授权租赁合同范本
- 高效叉车操作员劳动合同服务标准
- 2025年国际贸易实务知识测试试题及答案
- 2025年心理健康教育课程评估试题及答案
- 2025年城市规划基础理论知识考试试题及答案
- 毕业个人实习总结
- 拆迁安置房交易及后期配套设施建设合同
- 2025年云南省高考物理试卷
- 公交公司物业管理制度
- 县级医院收支管理制度
- 三人合伙股东合作协议书
- 理论联系实际谈一谈如何维护政治安全?参考答案1
- 2025届广东省东莞中学七年级数学第二学期期末联考试题含解析
- 2024吉林省农村信用社联合社招聘笔试历年典型考题及考点剖析附带答案详解
- 2024-2025学年度部编版一年级语文下学期期末试卷(含答案)
- DB13(J)-T 8496-2022 城市污水处理厂提标改造技术标准
- 建筑施工临时用电安全教育培训课件
- 生物医学电子学智慧树知到期末考试答案章节答案2024年天津大学
评论
0/150
提交评论