ImageVerifierCode 换一换
格式:PPT , 页数:69 ,大小:1.22MB ,
资源ID:10263810      下载积分:16 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/10263810.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(Mongodb技术分享PPT.ppt)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Mongodb技术分享PPT.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2,#,Mongodb,分享,钟秋,2015-11-27,1,2,1.,背景,2.MongoDB,入门,3.,索引,4.,复制,5.,分片,6.,管理与监控,7.,使用优化案例,主要内容,2,2025/4/30 周三,1.,背景,1.1,从集中式到分布式,1.2,从,sql,到,nosql,1.3,分布式一致性问题,1.4 CAP,和,BASE,理论,3,2025/4/30 周三,1.1,从集中式到分布式,集中式的问题:,计算、存储能力瓶颈,单点问题,分布式的问题:,通信异常,网络分区,三态,节点故障,一致性,

2、4,2025/4/30 周三,1.2,从,SQL,到,NoSQL,SQL,建立在严格的关系模型基础之上,通常支持复杂的事务操作,提供严格的数据一致性、完整性约束,并且支持关联查询等。,复杂事务,关联查询等特性影响读写性能,同时限制了关系型数据库的分布式扩展能力。,NoSQL,non-relational,not only sql,是对,SQL,的补充:,高并发读写,海量数据,高可扩展和高可用性,还无法替代,SQL:,复杂事务,严格的一致性,读写实时性,join,与,SQL,不同,,NoSQL,没有统一的标准,种类繁多(,key-value,,列式,文档,图),根据业务选择适合的,5,2025/

3、4/30 周三,1.3,分布式一致性问题,强一致性,弱一致性,最终一致性,鱼和熊掌:分布式系统中数据一致性和系统性能之间的关系,6,2025/4/30 周三,1.4 CAP,和,BASE,理论,CAP,C,:,Consistency,A,:,Availability,P,:,Partitiontolerance,分布式系统中,,P,是基础,所以,一般只能在,C,、,A,之间进行取舍。,MongoDB,处于哪一部分?,BASE,BasicallyAvailable,,,Softstate,,,Eventuallyconsistent,7,2025/4/30 周三,2.MongoDB,入门,2.1

4、什么是,MongoDB,2.2,存储引擎与版本选择,2.3 mongo shell,2.4 mongodb,数据模型,2.5,数据类型,2.6 bson,2.7 GridFS,2.8,模式设计,2.9 CRUD,8,2025/4/30 周三,2.1,什么是,MongoDB,MongoDB,是面向文档的,无模式,(schema-less),的,支持二级索引,支持冗余、自动故障转移,支持数据分片、负载均衡,易扩展,能为海量数据提供支撑的非关系型数据库。,MongoDB,不支持跨多个文档的复杂事务,但保证单文档操作原子性。,MongoDB,不支持联接(,join,)。,MongoDB,不支持,MV

5、CC,(,3.x wiredTiger,引擎支持)。,9,2025/4/30 周三,2.2,存储引擎,版本,2.8(3.0),开始支持插件式存储引擎,MMAPv1,WiredTiger,(,since 3.0,),10,2025/4/30 周三,2.2,存储引擎,-MMAPv1(1),读写锁,不支持,MVCC,Version 2.2:,只支持进程级锁,一个,Mongod,实例一个锁。,2.2,Version 2.8:,支持库级锁,一个,db,一把锁。,3.0.0,Version,支持,collection,级别的锁。,内存,内存映射文件,交由操作系统管理,不能,手动配置管理,无强制内存量要求,

6、缓存索引、热数据等,11,2025/4/30 周三,2.2,存储引擎,-MMAPv1(2),Journal,日志,Journal,日志,是,MongoDB,的预写日志,WAL(,类似,Mysql,的,Redo log),。,因为,Journal,日志文件是磁盘上连续分配的空间,,MongoDB,在运行时通过顺序追加的方式记录,通过顺序,IO,来改善写性能。同时,后台会定时刷写,Journal,日志文件以将写操作持久化到数据文件。通过这种两次写的方式,当,Mongodb,因为一次非正常退出(比如崩溃),重启,mongod,进程后会根据,journal,下的文件来恢复数据以达到数据一致,防止数据丢

7、失。同时,一次正常的退出时,MongoDB,会刷写并删除,journal,目录下所有文件。,journal,除了故障恢复的作用之外,还可以提高写入的性能,通过批量提交(,batch-commit,)的方式减少,IO,次数,一般默认,100ms,刷新一次到,journal,,可通过下面参数修改:,mitIntervalMs,值越低,刷新输出频率越高,,journal,的持久性也就越高,(,故障意外情况下丢失的数据越少,),,但同时意味着更多的磁盘,IO,。,2.0,以上版本默认开启的,可以通过,nojournal=true,或,-nojournal,关闭,但建议开启。,Journal,文件是以“

8、j._”,开头命名的,且是,append only,的,如果,1,个,journal,文件满了,1G,大小,,mongodb,就会新创建一个,journal,文件来使用,一旦某个,journal,文件所记载的写操作都被使用过了,,mongodb,就会把这个,journal,文件删除。通常在,journal,文件所在的文件夹下,只会存在,23,个,journal,文件,除非你使用,mongodb,每秒都写入大量的数据。,使用,smallfiles,这个运行时选项可以将,journal,文件大小减至,128M,大小。,12,2025/4/30 周三,2.2,存储引擎,-MMAPv1(3),数据文

9、件,每个,db,有,1,个,.ns,(,namespace,)和若干个数据文件,(.n),构成,数据文件随着数据的增多而增多,默认从,64M,开始,数据文件每新增一次,大小为上一个数据文件的,2,倍,上限为,2GB,。这样的设计有利于防止数据量较小的数据库浪费过多的空间,同时又能保证数据量较大的数据库有相应的空间使用。,MongoDB,会使用预分配方式来保证写入性能的稳定(可通过,noprealloc,关闭,但不建议)。预分配在后台进行。预分配使得,MongoDB,始终保持额外的空间和空余的数据文件,从而避免了数据增长过快而带来的分配磁盘空间引起的阻塞,。,13,2025/4/30 周三,版本

10、3.0,起引入,只支持,64,位系统,还不是默认的存储引擎,需要手动指定。在即将到来的,3.2,版本将成为默认引擎。,storageEngine=wiredTiger,读写锁,通过,MVCC,实现文档级别锁(更细粒度,的锁,大大提高并发读写性能),以前的微分片,分库分表及其他为提高,MMAPv1,并发率而实现的变通方案将,不再需要,2.2,存储引擎,-WiredTiger(1),MVCC(snapshot,copyOnWrite),14,2025/4/30 周三,2.2,存储引擎,-WiredTiger(2),内存,可配置缓存大小,(,默认为,1GB,或物理内存的一半,),wiredTige

11、rCacheSizeGB=10,压缩,wiredTigerCollectionBlockCompressor=snappy/zlib,wiredTigerIndexPrefixCompression=true,wiredTigerJournalCompressor=snappy/zlib,高效的压缩算法,相比先前版本数据占用更少空间,15,2025/4/30 周三,2.2,存储引擎,-WiredTiger(3),Snapshots,和,Checkpoints,Snapshot,代表缓存中数据的一个一致性状态下的视图快照。,WiredTiger,会以一种一致性的方式将,snapshot,写到磁盘

12、的所有数据文件上,这些持久化的数据被称为一个,checkpoint,。,当一个,checkpoint,在写入过程中,上个,checkpoint,会保留,如果在这个过程中,系统崩溃,则可以恢复到上一个,checkpoint,的状态。,Checkpoint,在此扮演的角色类似一个恢复点(,recover point).,一旦一个新的,checkpoint,写入完成并可访问,则会释放上次的,checkpoint,。,Mongodb,每,60,秒或者每,2GB journal,的时候创建一个,checkpoint,(即将,snapshot,写到磁盘),Journal,100MB,避免故障重启后丢失上次

13、checkpoint,之后的数据,16,2025/4/30 周三,2.2,存储引擎,-WiredTiger(4),数据文件,db.collection.stats().wiredTiger.uri,17,2025/4/30 周三,2.2,版本选择,Mongodb,版本:,x.y.z,X,是主要版本,.,功能上要么不变要么就做很大的改动。,Y,是发行版本号,.,这种版本经常更新功能,包括一些新的特性并且常常不向后兼容。偶数是稳定版本,奇数是开发版本。,Z,版本号是用来修改,BUG,和安全性。,历史版本:,2.6.4,当前使用版本:,3.0.1,和,3.0.3,(,WiredTiger,存储引擎

14、建议升级到,3.0.7,即将发布的新版本:,3.2.0,Document Validation,partial indexes,readConcern:level:,left outer join,(企业版),18,2025/4/30 周三,2.3 mongo shell,DBQuery.shellBatchSize=100,注意数值字面量默认是双精度类型,help,19,2025/4/30 周三,2.4 mongodb,数据模型,和关系型数据库的一个类比:,20,2025/4/30 周三,2.4 mongodb,数据模型,一个,MongoDB,实例可以承载多个数据库,它们之间可视为完全独

15、立的,每个数据库都有独立的权限控制,各自的数据文件。,集合就是一组文档,集合可以看作没有模式,(shema-less),的表。,特殊集合:,Capped Collection,TTL Collection,文档是,MongoDB,中数据的基本单元,类似于关系数据库中的行。,多个键及其关联的值有序地放置在一起便是文档,类似映射,散列或字典。,文档的键是字符串(不能含有,0,.,$,),文档中的值不仅可以是字符串,也可是其他类型。,文档中的键,/,值对是有序的,不同序则是不同文档。,键是区分大小写的,否则为不同文档。,文档不能有重复的键,否则非法。,21,2025/4/30 周三,2.5,数据类型

16、基本类型和,$type,db.collection.find(field:$type:8 );,尽量不要在同一字段上混合类型。,注意,js(mongo shell),等一些弱类型语言数值,默认都视为浮点数,在使用时记得做类型转换。,22,2025/4/30 周三,2.5,数据类型,比较排序,当比较不同,BSON,类型的值时,,MongoDB,使用如下的比较排序,从低到高为:,注意:在,3.0.0,中,,Date,对象排在,Timestamp,对象之前。先前版本中,,Date,和,Timestamp,对象是同等的。,23,2025/4/30 周三,2.5,数据类型,-null,_id:,1,c

17、ancelDate:null,_id:,2,-,db.test.find(cancelDate:null),_id,:,1,cancelDate,:null,_id,:,2,-,db.test.find(cancelDate:$type:,10,),_id,:,1,cancelDate,:null,-,db.test.find(cancelDate:$exists:false),_id,:,2,24,2025/4/30 周三,2.5,数据类型,-,内嵌文档和数组,通过内嵌冗余文档、数组的方式解决一些事务和,join,查询的需求。,数组元素和内嵌文档字段也可以建索引。,在文档中使用数组的时候,同

18、时在文档中维护数组的长度。,数组元素经常动态增减且元素过多的,不要使用内嵌数组的方式。,数组不是,HashSet,,尽量不要使用数组来排重。,25,2025/4/30 周三,2.5,数据类型,-ObjectId,_id,的默认类型,时间戳,(4byte,秒级,)+,机器标识,(3byte)+PID(2byte)+,计数器,(3byte),尽量客户端生成,减轻服务端压力,26,2025/4/30 周三,2.5,数据类型,-,自定义,_id,findAndModify,CAS,Return new,27,2025/4/30 周三,2.5,数据类型,-,自定义,_id,1,),简单的方式(,Simp

19、leMongoIdGenerator,),:,一次获取一个,28,2025/4/30 周三,2.5,数据类型,-,自定义,_id,2,)池化的方式(,PooledMongoIdGenerator,):一次获取多个,29,2025/4/30 周三,2.6 BSON,Binary Json,,传输和存储所使用的格式,16MB,更快的遍历速度,操作更简单,扩充的数据类型,无类似,sql,注入风险,优化,无需遍历定位,基于记录的长度进行,seek,数据存储有类型,长度可能变化的字段尽量靠后,固定不变的数字使用字符串,30,2025/4/30 周三,2.7 GridFS,大于,16M,小于,16M,的二

20、进制数据,使用,BinData,31,2025/4/30 周三,2.8,模式设计,-,相关因素,设计需要思考和平衡的因素:,程序本身的需求,查询,更新等维护,不变数据,易变数据,数据天然的逻辑层次,数据规模,mongodb,的性能特点,单文档原子操作,文档增长,capped collection,数据获取模式,随机访问,范围查询,是否排序,32,2025/4/30 周三,2.8,模式设计,-,范式与反范式,范式与反范式,文档引用,手动引用,DBRefs,内嵌文档,数组,优缺点,内嵌文档,数据更直观,更接近对象的定义。连续存储,一次获取,读取性能好。一个文档,单文档能保证原子事务。内嵌减少文档数

21、量,减少文档本身的杂项开支。,数据存在大量冗余,更新维护数据代价大。,文档引用,减少冗余,数据一致性完整性易维护,不支持,join,,需要多次查询获取,采用何种设计,综合前面提到的,3,个因素做权衡,33,2025/4/30 周三,2.9 CRUD,基本操作,增删改查,db.collection.find(,query,projection,),Return a cursor,Projection(,如果可以,索引覆盖查询,),db.collection.findOne(,query,projection,),CAS(findAndModify),db.collection.insert(,w

22、riteConcern:,ordered:),批量写入,var,bulk=db.inventory.initializeUnorderedBulkOp();bulk.insert();bulk.execute();,db.collection.remove(,),db.collection.update(,upsert:,multi:,writeConcern:),默认,multi:false,update,未使用操作符针对特定字段修改的话,默认行为是覆盖整个文档,聚合:,基本的聚合函数,,pipeline,map-reduce,结果超过,bson,大小限制(,16MB),或过程中使用内存超过

23、限制(,100MB),,使用,map-reduce,,并且结果输出到临时表。,执行计划,之前:,db.coll.find().explain(),现在:,db.coll.explain(verbose).update(query,update),queryPlanner(default,,预估,),executionStats,(执行不应用,,winning plan,),allPlansExecution,(执行不应用,,all plan,),操作符,(Operators),尽量不要用,$where(javascript,,不能使用索引,),34,2025/4/30 周三,2.9 CRUD,

24、游标,(cursor),Batch,第一批,:101documents or 1MB,之后,:4M,batchSize(),limit,DBQuery.Option.noTimeout(,默认,10min or exhaust),tailable cursor,capped collection,DBQuery.Option.tailable,DBQuery.Option.awaitData,写关注,(WriteConcern),w,、,j,Unacknowledged,w=0,read uncommited,Acknowledged,w=1,默认,,read uncommited,Journ

25、aled,w=1,j=true,rollback,,,read uncommited,Replica Acknowledged,w=2,w=majority,(推荐),wtimeout,35,2025/4/30 周三,3.,索引,3.1,索引概述,3.2,索引的类型,3.3,索引的属性,3.3,索引的创建、管理,3.4,索引交集,3.5,覆盖查询,3.6,如何发现问题,36,2025/4/30 周三,3.1,索引概述,查询、排序都需要,Sort:32M,程序中大部分的读取超时可能都和缺乏,/,不当索引有关。服务器端,CPU,,内存,磁盘,IO,使用率暴增也可能和没有索引相关。,避免在业务高峰创

26、建索引,在线创建使用,background,参数避免阻塞其他操作。,注意版本,2.6,,,secondary,是在前台创建索引。,不要在选择性低的字段创建索引,不要创建无意义或重复的索引。,不走索引的情况,$nin,$ne,前导正则匹配形式的正则表达式,Javascript,(,$where,),hint(),37,2025/4/30 周三,3.2,索引的类型,单键索引,复合索引,复合索引注意创建顺序:选择性,范围查询,排序,前缀的查询,索引顺序,决定索引是否支持直接排序操作,(,而不需要额外附加一个排序阶段,),多键索引,数组上的索引,当查询中的值和该数组中的任一值相匹配时,索引匹配成功,文

27、本索引,全文检索,db.reviews.ensureIndex(comments:text),$text,哈希索引,使用被索引键的值的哈希值来维护索引,db.active.ensureIndex(a:hashed),支持相等查询,不支持范围查询,地理空间索引,38,2025/4/30 周三,3.3,索引的属性,TTL,索引,db.collection.ensureIndex(date_field:1,expireAfterSeconds:3600),Since 2.2,Background check interval:1min,唯一索引,db.members.ensureIndex(user

28、id:1,unique:true),duplicatekey exception,,,w=1,稀疏索引,不会索引那些不包含被索引键的文档,db.collection.ensureIndex(a:1,sparse:true),部分索引,3.2,db.restaurants.createIndex(cuisine:1,name:1,partialFilterExpression:rating:$gt:5 ),39,2025/4/30 周三,3.4,索引的创建、管理,创建,db.collection.createIndex(orderDate:1,zipcode:-1,background:tru

29、e),查询,db.collection.getIndexes(),删除,db.pets.dropIndex(cat:-1 ),db.collection.dropIndexes(),将删除,_id,以外的所有索引,修改,删除后重建,重建所有索引,db.collection.reIndex(),不要在线上使用,结束索引创建过程,db.currentOp(),,,db.killOp(),2.4,只能,kill background,的索引,40,2025/4/30 周三,3.5,索引交集,Since 2.6,使用多个索引的交集来匹配查询,在,2.6,之前只能使用一个索引,执行计划,:,Comple

30、xPlan,注意查询和排序不能分别使用不同的索引,41,2025/4/30 周三,3.5,索引覆盖查询,覆盖查询不需要单独一次文档检索,直接查询索引就可返回结果。,索引键一般都小于被索引的文档,而且索引一般都在内存中直接可用或者在磁盘上顺序存储。,在查询中的所有键都是索引的一部分,并且所有结果集中返回的键也都在同一个索引中。,Explain:indexOnly,fetch,42,2025/4/30 周三,3.6,如何发现问题,执行计划,explain,Stage:COLLSCAN,IXSCAN,FETCH(nscannedObjectsnscanned),SORT(scanAndOrder=t

31、rue),db.currentOp,慢查询日志,db.setProfilingLevel(,level,slowms,),Level:0-none,1-slow,2-all,show profile or db.system.profile.find(),mongostat,idx miss(2.x),db.serverStatus().indexCounters,2.x,43,2025/4/30 周三,4.,复制,(Replication),4.1,复制备份,4.2,复制基本介绍,4.3 oplog,4.4,复制节点,4.4,选举,4.5 read-preference,与,write-co

32、ncern,4.6,复制集数据的一致性,4.7 rollback,与脏读,44,2025/4/30 周三,4.1,复制备份,复制,可以离线多长时间?,复制集,高可用:,24*7,冗余,故障自动,failover,,多数据中心部署,对用户透明的系统维护升级,备份,可以丢失多少数据?,数据文件,灾难恢复,程序,bug,数据损坏,人为误操作,复制具备一定备份的功能,但不能替代备份,45,2025/4/30 周三,4.2,复制集基本介绍,复制,复制是在多台服务器之间同步数据的过程,复制的目的,failover,(故障转移,故障切换,故障恢复),andredundancy,(数据冗余),避免单点,用于灾

33、难时恢复,报表处理,提升数据可用性,读写分离,分担读压力,MongoDB,中的复制,复制集是由一组,mongod,实例组成的,这些,mongod,主要分为两个角色:,Primary,主节点只能有一个,所有的写请求都是在它上面完成的。主节点会将所有变动(数据,索引等)记录到,oplog,(类似,mysql,的,binlog,)中以支持复制的实现。,Secondary,从节点接收从主节点上传来的操作,(oplog,的记录,),并重放,以此来保证其与主节点的数据集一致。,46,2025/4/30 周三,4.2 oplog,类似,mysql,的,binlog,定容集合,(capped collecti

34、on),local.oplog.rs,没有索引,顺序写,循环滚动,primary,记录所有引发数据变动的操作,,secondary,异步复制并在自己机器上重放这些操作以与,primary,保持数据一致。,tailable cursor,为了提高复制的效率,复制集中所有节点之间会互相进行心跳检测(通过,ping,)。每个节点都可以从任何其他节点上获取,oplog,。,oplogSizeMB,默认,5%avaliable,幂等,可能产生大量记录,rs.printReplicationInfo(),47,2025/4/30 周三,4.3,复制节点,Primary,Secondary,priority

35、0,不能成为,primary,,复制数据,可以提供读,可以参与投票,可以用作备用节点,hidden:true,priority:0,对于客户端程序,mongos,不可见,复制数据,不能成为,primary,,可以投票,可用作报表节点或备份节点,slaveDelay:3600(s),hidden:true,priority:0,延时复制主节点数据,对于客户端程序,mongos,不可见,不能成为,primary,,可以投票,Delay,时间必须大于或者等于你的维护窗口。必须小于,oplog,的存储能力,可以帮助我们在人为误操作或是其他意外情况下恢复数据,Arbiter,仲裁节点,/,投票节点,不

36、复制数据,加入打破投票僵局(偶数成员时,无法形成多数票),Max:12members(3.x up to 50),7votes,48,2025/4/30 周三,4.4,选举,副本集使用选举来决定哪个副本集成员将成为,primary,。选举发生在副本集启动后,任何时候,primary,变为不可用。,primary,是副本集中唯一可以接受写操作的成员。如果一个,primary,变为不可用,选举允许副本集恢复正常操作而不需要人工干预。选举是故障转移过程的一部分,49,2025/4/30 周三,4.4,选举,Heartbeat,复制集成员每两秒向复制集中其他成员进行心跳检测,影响选举的因素,心跳检测:

37、如果某个节点在,10,秒内没有返回,那么它将被标记为不可用。,优先级:,优先级设置影响选举。成员将更宁愿投票给优先级值更高的成员。,优先级为,0,的节点将不能成为主节点,也不会发起选举。,副本集不会举行选举只要当前,primary,拥有最高的优先级值或者没有,secondary,拥有更高优先级并且其操作日志记录的最新操作时间与,primary,的,oplog,记录的最新记录相差小于,10,秒的时候。,如果一个更高优先级成员并且其操作日志所记录最新操作时间和当前,primay,节点记录的时间相差小于,10,秒的时候,副本集就会举行一次选举以提供一次机会给更高优先级节点成为,primary.,Op

38、time,optime,是成员最近一次从,oplog,应用的上一次操作的,timestamp,。一个副本集成员不能成为,primary,除非它在副本集所有可见的成员中拥有更高的(也就是最新的),optime,连接,如果复制集中的某个节点不能连接上其他多数节点,那么它将不能升职为主节点。在选举中,多数是指多数投票而不是多数节点个数。,如果复制集是由三个节点组成的,且三个节点均可投票,只要其中两个节点能够互相沟通那么复制集就能选举出新的主节点。如果有两个节点不可用了,那么剩下的节点将为从节点,因为它不能与复制集中多数节点进行沟通。如果两个从节点不可用了,剩下的主节点将降职为从节点。,网络隔离,网络

39、隔离影响了选举中多数选票的结构。如果主节点不可用了,且每个相互隔离的网络中都没有多数选票的出现,那么复制集将不会选举出新的主节点。复制集将变为只读的。,为了避免这种情况的出现,我们需要将多数节点置于主数据中心,少数节点放于其他数据中心,50,2025/4/30 周三,4.4,选举,当复制集中没有主节点可用的时候将触发选举:,新复制集的初始化。,一个从节点无法与主节点进行连接。当从节点们无法与主节点进行沟通的时候将会触发选举。,主节点辞职了。(,rs.stepDown(300),),51,2025/4/30 周三,4.4,选举,-Bully,算法,Bully(,欺负算法,),最初集群有,5,个节

40、点,节点,5,是一个公认的协调者。,假设节点,5,挂了,并且节点,2,和节点,3,同时发现了这一情况。两个节点开始竞选并发送竞选消息给,ID,更大的节点。,节点,4,淘汰了节点,2,和,3,,节点,3,淘汰了节点,2,。,这时候节点,1,察觉了节点,5,失效并向所有,ID,更大的节点发送了竞选信息。,节点,2,、,3,和,4,都淘汰了节点,1,。,节点,4,发送竞选信息给节点,5,。,节点,5,没有响应,所以节点,4,宣布自己,当选并向其他节点通告了这一消息。,52,2025/4/30 周三,4.4,选举,-,降级,选举还有个前提条件,参与选举的节点数量必须大于副本集总节点数量的一半,如果已经

41、小于一半了所有节点保持只读状态,53,2025/4/30 周三,4.5 Read-Preference,与,WriteConcern,复制集中的,WriteConcern,w,2,Replica Acknowledged,默认,w=2,Read-Preference,Primary,只读主,primaryPreferred,优先主,主不可用读从,Secondary,只读从,secondaryPreferred,优先从,从挂读主,Nearest,网络延时最小,54,2025/4/30 周三,4.6,复制集数据的一致性,数据读写的强一致性,默认,读写都在,primary,WriteConcern,

42、w=1,Read-Preference,:,Primary,或者配置,w,参数,使得写操作在应用到所有从节点上才算成功完成(影响写性能),WriteConcern,:,w=n,Read-Preference,:,secondaryPreferred,最终一致性,在从节点读,同时不要求写操作应用到从节点上才算成功,WriteConcern,:,w=1,Read-Preference,:,secondaryPreferred,55,2025/4/30 周三,4.7 rollback,回滚,(rollback),发生在主节点的写操作没能成功在从节点上应用就辞职的情况下。当主节点重新以一个从节点身

43、份加入复制集时,它将对这部分数据进行“回滚”,使得其上的写操作与复制集中其他成员保持一致。,/rollback,300MB,56,2025/4/30 周三,5.,分片,(Sharding),5.1,分片基本介绍,5.2,片键,5.3 chunk,5.3 config,5.4 mongos,57,2025/4/30 周三,5.1,分片基本介绍,什么是分片,(sharding)?,通过分割数据,负载到多个机器来解决单机存储能力,以及读写性能等瓶颈,达到横向扩展的目的,分片针对的基本单位是集合,58,2025/4/30 周三,5.1,分片基本介绍,集群结构和基本流程,config,mongos,sh

44、ard(mongod/replica set),没有分片的集合存在哪?,59,2025/4/30 周三,5.2 chunk,什么是数据块,(chunk),chunk,的分裂,chunk,的默认大小,chunk,的迁移均衡,迁移触发阈值,60,2025/4/30 周三,5.3,片键,什么是片键,设计片键需要注意的问题,小基数片键,写热点,范围查询,片键字段需要索引,记录不能为空,不能修改,哈希片键,61,2025/4/30 周三,5.4 config,配置服务器,(config),的作用,保存了集群的信息,元信息保存了集群的状态和组织结构,.,元信息包含每个分片保存的数据块信息以及每个数据块的范

45、围,mongos,会缓存这些信息用来做读写的路由分发,.,Chunk,分裂、迁移后都会更新维护,config,上的元信息,管理分布式锁,配置服务器的可用性,如果集群中一个或者两个配置服务器不可用,集群的元信息将变为可读,你还可以从分片中读写信息,但是数据块的迁移以及数据块的分裂在所有配置服务器都恢复可用之前不能够进行,.,如果所有的三个配置服务器都不可用,在重启,mongos,之前集群依然可用,.,但是一旦试图重启,mongos,集群将不能提供任何服务,.,62,2025/4/30 周三,5.5 mongos,mongos,的作用,控制读写操作的路由分发(包括未分片集合数据),路由分发过程,根

46、据片键路由到部分分片,广播所有分片,控制,chunk,的分裂、迁移、均衡,分裂(大小,限制),迁移、均衡(迁移阙值,均衡时间窗口),63,2025/4/30 周三,6.,管理与监控,3.1,备份与恢复,mongodump,mongorestore,ops manager,3.2,导入与导出,mongoimport,mongoexport,3.3,安全,auth,-noscripting,或,security.javascriptEnabled,3.4,监控,mongostat,mongotop,mms,64,2025/4/30 周三,7.,使用优化案例,7.1,优化索引,7.2,优化数组,co

47、unt,7.3,优化整型,_id,生成方式,7.4 secondary,同步索引操作,bug,7.5,滥用数组导致的问题,7.6,副本集分布式一致性配置引发的性能问题,65,2025/4/30 周三,7.4 secondary,同步索引操作,bug,问题,A,系统一次上线过程中,同时进行了索引优化(删除有问题的索引,新建索引)。在这个过程中,系统所在,mongod,服务器负载飙升。,https:/jira.mongodb.org/browse/SERVER-13304,分析,db.currentOp,发现很多长时间运行的读操作,未使用索引。,Primary,上检查对应读操作执行计划,发现都走索

48、引。,停掉,secondary,,恢复正常。检查程序,发现配置的读写分离。读操作访问的是,secondary,。,登入,secondary,检查对应集合索引,发现在主上执行的创建索引操作并没有成功同步到,secondary,上。,解决,在从上手动建立对应缺失索引。,66,2025/4/30 周三,7.5,数组使用不当导致的问题,问题,B,系统关注、粉丝、喜欢相关接口性能低下。,分析,系统使用内嵌数组记录关注与粉丝列表、以及喜欢列表。,由于关注、粉丝、喜欢的数据变化都比较大(会频繁,add,元素到数组),这可能导致在添加的过程中,文档预分配空间不足,需要重新分配,影响写入性能。,关注、粉丝、喜欢

49、数量增加将有可能超过,BSON,大小限制。,关注、粉丝、喜欢排序分页获取,查找、删除指定元素无法高效实现。,程序中使用数组的,$addToSet,进行排重。,解决,改变数据结构,取消内嵌数组,使用单独的表逐行记录。,67,2025/4/30 周三,7.6,副本集分布式一致性配置引发的性能问题,问题,C,系统写入性能不好,各接入系统调用其写入接口频繁报读取超时。,分析,系统最大表数据,1000,多万,数据文件大小几,GB,,数据量不大。,对应副本集配置:,1primary+2secondary+1arbiter,在对应副本集上进行监控:,primary,上写操作并发不高,20-60ops,,没有

50、读取操作,无阻塞的操作,secondary,上有读取量但也不高,也大概只有几十,ops,,没有阻塞的操作,检查程序中写关注和读偏向配置:,REPLICAS_SAFE+secondaryPreferred,写,primary,成功,并且,1,个,secondary,同步对应写操作成功,对应写请求才返回响应给客户端。,读写分离。,在高并发写的情况下,,oplog,增长太快,,secondary,无法迅速同步跟上,primary,,导致需要花费比较长时间才能返回写操作成功,影响写效率。,根据业务介绍,有冷数据处理流程,程序里可能有没有加条件的,update,或,remove,操作,由于,oplog,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服