文库网
ImageVerifierCode 换一换
首页 文库网 > 资源分类 > PDF文档下载
分享到微信 分享到微博 分享到QQ空间

玩转 MongoDB 从入门到实战.pdf

  • 资源ID:16624609       资源大小:7.90MB        全文页数:37页
  • 资源格式: PDF        下载积分:20文币
微信登录下载
快捷下载 游客一键下载
账号登录下载
三方登录下载: QQ登录 微博登录
二维码
扫码关注公众号登录
下载资源需要20文币
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

玩转 MongoDB 从入门到实战.pdf

1、玩转 MongoDB 从入门到实战12玩转 MongoDB 从入门到实战序言阿里云智能资深技术专家阿里云 NoSQL 数据库负责人杨成虎(叶翔)2016 年开始大量的用户反馈希望阿里云能提供 MongoDB 云服务。同年,MongoDB 正式发布了 3.2 版本,存储引擎重构到 WiredTiger 之上。其稳定性,功能性相比以往的版本都有了大幅度的提升。我和同事们经过一番调研,确定时机成熟,随即敲定了将 MongoDB 放到阿里云上,作为一方阿里云产品提供商业服务,并且成立了相应的 MongoDB 研发团队。在整个产品的上线研发过程中,对 MongoDB 的学习愈加深入,就愈加的喜爱它。其灵

2、活的JSON 数据处理,弹性的 Sharding,高可靠的 ReplicaSet 等能力可以极大的简化业务系统复杂度,提升研发效率,不愧于“程序员最喜爱的数据库”称号。而运行于云之上的 MongoDB,被赋予了生命周期管理,自动备份管理等云原生的企业级能力。阿里云与 MongoDB,云原生与开源数据库的姻缘就此开启。2019 年,阿里云与 MongoDB 达成战略合作,作为云厂商独家支持 MongoDB 4.0 以及后续最新版本的服务,与 MongoDB 的关系从开源社区到商业合作全面覆盖。同年,MongoDB 4.2 版本发布,具备了分布式事务的处理能力,覆盖传统关系型数据库的事务能力。近期

3、,阿里云 MongoDB的云原生技术也从生命周期的托管逐步升级到资源池化与存储计算分离的云原生架构。利用云原生技术架构,让传统数据库具备了系统资源灵活弹性升级的云化能力,帮助用户便捷的实现数字化转型升级,降低企业 TCO 成本。但是我们也发现,中文的 MongoDB 学习资料并不多。国内很多的用户对 MongoDB 的使用也常有一些误解,例如错误的认为数据库会丢失,且不可靠。也并不清楚 MongoDB 现已具备了强大的事务处理能力。在市场中急需这样的一本书帮助大家更深入的学习 MongoDB,在生产系统中更好的使用它,为业务赋予更高的价值。本次书籍的编写者,有来自阿里云的研发工程师,也有 Mo

4、ngoDB公司的原厂架构师,还有来自社区的支持者。合众人之力完成了本次书籍编写,也感谢阿里云的开发者社区,使本书得以顺利出版。欢迎广大读者能加入到开源社区,源于开源、回馈开源。34玩转 MongoDB 从入门到实战走进 MongoDB 05目录MongoDB 聚合框架 11复制集使用及原理介绍 16分片集群使用及原理介绍 25ChangeStreams 使用及原理 34事务功能使用及原理介绍 47MongoDB 最佳实践一 56MongoDB 最佳实践二 63微信关注公众号:阿里云数据库第一时间,获取更多技术干货阿里云开发者“藏经阁”海量免费电子书下载56玩转 MongoDB 从入门到实战走进

5、 MongoDB定位上,MongoDB 介于 Memcached 和关系型数据库之间,扩展性和性能上,MongoDB 更接近于 Memcached,功能上,MongoDB 更接近于关系型数据库。在生产环境中,MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。我们先来看左边。当 MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另外两个从节点,会自动和主节点同步,保持数据的更新。在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。我们再来看右边,当 MongoDB 被部署为一个分片

6、集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。那集群中的数据是如何分布的呢?这些元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。(二)MongoDB 基本概念与关系数据的对应关系关系型数据通常有数据库和表的概念,对应在 MongoDB 里有数据库和集合关系;数据库有主表和子表

7、,对应 MongoDB 通常使用内嵌的子文档或内嵌数组;关系型数据里有 Index 索引,MongoDB 也有类似概念;关系数据库里一条数据称为一行,MongoDB 称为一个文档 Document;关系型数据库里面的列,对应到 MongoDB 成为一个字段 Field;关系数据库里面经常使用 Join 连接操作,对应 MongoDB 通常使用内嵌方式解决,如果使用Linking 方式,对应使用$Lookup 操作符也可支持左外链接;关系型数据库里面还有视图,对应 MongoDB 也有只读视图和按需物化视图;关系型数据库里面会有 ACID 的多记录事务,对应的 MongoDB 里面会有 ACID

8、 的多文档事务。(三)MongoDB 的数据层次结构 MongoDB 里面数据主要分为三层,文档(Documents),集合(Collections),和数据库(Databases),多个文档是存储在一个集合中,多个集合存放在一个数据库里,每个集群里面可能会有多个数据库。例如:数据库(Database):Products集合(Collections):Books,Movies,Music一、MongoDB 的相关概念作者|张春立Depth of FunctionalityScalability&PerformanceMemcachedMongoDBRDBMSMongoDB 的功能定位Repli

9、ca SetReadWriteApplicationApplicationMongoDMongoDMongoDShard ClusterReadWriteApplicationDriverMongoSConfigServersShard(replica set)MongoDB 部署模型(一)MongoDB 部署模型RDBMSMongDBMongoDB 基本概念与关系数据的对应关系DatabaseDatabaseTableCollectionParent-Child TablesNested Sub-Documentor ArrayIndexIndexRowDocumentColumnFieid

10、JoinEmbeddingLinking,SlookupViewRead-OnlyViewOn-DemandMaterializedViewMulti-RecordACIDTransactionMulti-DocumentACIDTransaction78玩转 MongoDB 从入门到实战运行 MongoDB/bin/mongod-dbpath/data/dbMongoDB 安装的 bin 目录 MongoDB 数据文件的位置数据库和集合的组合,构成 MongoDB 的命名空间:Products.BooksProducts.MoviesProducts.Music*数据库名最长不能超过 64

11、个字节,命名空间最长不能超过 120 字节*FCV=4.4,命名空间长度限制为 255 字节(四)MongoDB 的数据结构MongoDB 采用 JSON 文档结构:JSON 的全称:JavaScript Object NotationJSON 的格式:支持如下数据格式字符串:e.g.,“Thomas”数字:e.g.,29,3.7)布尔:True/false空值:Null数组:e.g.,88.5,91.3,67.1对象:Object安装你的第一个 MongoDB 系统第一个命令:下载第二个命令:解压第三个命令:改个目录名访问 MongoDB创建复制集练习1.创建数据目录:3.连接 MongoD

12、B 服务:4.指定复制集配置2.启动三个 MongoDB 服务创建分片集群练习有以下 5 个步骤:1.创建 Config Server 复制集2.创建一个或多个分片(每个分片为一个复制集)3.启动 Mongos(一个或多个)4.访问 Mongos,把分片添加到集群5.选择片键,启用分片以上就完成整个分片集群的部署。生产环境部署建议生产环境当中,大家应该遵循生产环境部署的一些最佳实践。比如:1.容量规划:计算资源,存储容量,IOPS,Oplog,网络带宽2.高可用:部署复制集或分片集群3.节点个数:复制集部署奇数个节点,避免脑裂4.应用生产环境的最佳实践,如:使用主机名而不是 IP文件系统(Li

13、nux 环境推荐 XFS)禁用 NUMA禁用 THP调高资源限制SwappinessReadaheadTcp_Keepalive_Time时钟同步安全配置上图是 MongoDB 数据类型的一些列表,常见类型 MongoDB 几乎都支持。(五)MongoDB 采用 BSON 格式保存数据firstName:Thomas,lastName:Smith,age:29二、集群部署MongoDB 数据类型TypeNumberAliasDouble1“double”String2“string”Object3“object”Array4“array”Binary data5“binData”Undefin

14、ed6“undefined”Objectld7“objectld”Boolean8“bool”Date9“date”TypeNumberAliasDouble1“double”String2“string”Object3“object”Array4“array”Binary data5“binData”Undefined6“undefined”Objectld7“objectld”Boolean8“bool”Date9“date”Null10“null”DBPointer12“dbPointer”JavaScript13“javascript”Regular Expression11“rege

15、x”Symbol14“symbol”JavaScript(with scope)15“javascriptWithScope”32-bit integer16“int”Timestamp17“timestamp”64-bit integer18“long”Decimal12819“deciml”Min key-1“minKey”Max key127“maxKey”插入新文档insertOnedb.products.insertOne(item:card,qty:15 );insertManydb.products.insertMany(_id:10,item:large box,qty:20,

16、_id:11,item:small三、基本操作curl-O https:/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgz$./bin/mongo MongoDB 安装的 bin 目录 MongoDB shell version:4.4.2.Server has startup warnings:2020-12-15T04:23:25.268+0000 I CONTROL initandlisten2020-12-15T04:23:25.268+0000 I CONTROL initandlisten*WARNING:

17、Access control is not enabled for the database.mkdir rs1 rs2 rs3mongo/connect to the default port 27017rs.initiate()/初始复制集rs.add(:27018)/增加一个节点配置rs.add(:27019)/增加一个节点配置rs.status()mongod-replSet rs-dbpath./rs1-port 27017-fork-logpath./rs1/mongod.logmongod-replSet rs-dbpath./rs2-port 27018-fork-logpat

18、h./rs2/mongod.logmongod-replSet rs-dbpath./rs3-port 27019-fork-logpath./rs3/mongod.logtar xzvf mongodb-linux-x86_64-rhel70-4.4.2.tgzmv mongodb-linux-x86_64-rhel70-4.4.2 mongodb第四个命令:没了!910玩转 MongoDB 从入门到实战删除文档删除集合和数据库使用 Drop 删除集合使用 DB.Drop()来删除一个集合集合中的全部文档都会被删除.集合相关的索引也会被删除更新操作Update 操作需要执行参数参数包括查询参

19、数更新参数Update 更新数组操作$Push:增加一个对象到数组底部$PushAll:增加多个对象到数组底部.$Pop:从数组底部删除一个对象$Pull:如果匹配指定的值或条件,从数组中删除相应的对象.$PullAll:如果匹配列表中的任意值,从数组中删除相应的对象.$PullAll:如果匹配列表中的任意值,从数组中删除相应的对象$AddToSet:如果不存在则增加一个值到数组使用 Upsert:True 更新或插入如果希望没有就添加,指定 Upsert:True 参数默认情况下如果没有匹配的对象,就不会执行更新使用 Find 查询数据文档使用 Find 查询数据文档Find 是 Mongo

20、DB 的基础查询命令Find 返回数据的游标(Cursor)Find 是 MongoDB 的基础查询命令Find 返回数据的游标(Cursor)SQL 查询条件对照查询操作符使用 DropDatabase 删除数据库使用 DB.dropDatabase()来删除数据库数据库相应文件也会被删除,磁盘空间将被释放deleteOnedb.orders.deleteOne(_id:ObjectId(563237a41a4d68582c2509da);db.orders.deleteOne(expirationTime:$lt:ISODate(2015-11-01T12:40:15Z);deleteMa

21、nydb.orders.deleteMany(client:Crude Traders Inc.);removedb.collection.remove(,)db.colToBeDropped.drop()use tempDBdb.dropDatabase()show collections/No collectionsshow dbs/The db is gonedb.movies.find(year:1975 )/单条件查询db.movies.find(year:1989,title:Batman )/多条件 and 查询db.movies.find($or:year:1989,title

22、:Batman )/多条件 or 查询db.movies.find($and:title:Batman,category:action )/and 查询db.movies.find(title:/B/)/按正则表达式查找db.movies.find(year:1975 )/单条件查询db.movies.find(year:1989,title:Batman )/多条件 and 查询db.movies.find($or:year:1989,title:Batman )/多条件 or 查询db.movies.find($and:title:Batman,category:action )/and

23、查询db.movies.find(title:/B/)/按正则表达式查找a=1-a:1a 1-a:$ne:1a 1-a:$gt:1a=1-a:$gte:1a a:$lt:1a a:$lte:1a=1 AND b=1-a:1,b:1或$and:a:1,b:1a=1 OR b=1-$or:a:1,b:1a IS NULL-a:$exists:falsea IN(1,2,3)-a:$in:1,2,3$lt:存在并小于$lte:存在并小于等于$gt:存在并大于$gte:存在并大于等于$ne:不存在或存在但不等于$in:存在并在指定数组中$nin:不存在或不在指定数组中$or:匹配两个或多个条件中的一个

24、$and:匹配全部条件db.movies.update(title:Jaws,$inc:budget:5 ,upsert:true )“_id”:ObjectId(5847f65f83432667e51e5ea8),title:Jaws,budget:5/insert datadb.movies.insert(title:Batman,category:action,adventure,imdb_rating:7.6,budget:35,title:Godzilla,category:action,adventure,sci-fi,imdb_rating:6.6,title:Home Alon

25、e,category:family,comedy,imdb_rating:7.4)db.movies.update(title:Batman,$set:imdb_rating:7.7 )查询蝙蝠侠更新 IMDB 评分字段如果找不到“大白鲨”就增加一个“大白鲨”电影box,qty:55,_id:12,item:medium box,qty:30 );Insertdb.collection.insert(,writeConcern:,ordered:)1112玩转 MongoDB 从入门到实战Type$project$group$eq/$gt/$gte/$lt/$lte$and$or$not$in

26、选择需要的或排除不需要的字段$map/$reduce/$filter$multiply/$divide/$substract/$add$year/$month/$dayOfMonth/$hour/$minute/$second.$range$sum/$avg$push/$addToSet$geoWithin/$intersect$first/$last/$max/$min.MongoDB 聚合框架一、基本概念二、基本使用作者|张春立(一)什么是聚合框架聚合框架(Aggregation Framework)是用于在一个或几个集合上进行的一系列运算从而得到期望的数据集的运算框架。从效果而言,聚合框

27、架相当于 SQL 查询中的:GROUP BYLEFT OUTER JOINAS但聚合框架的作用不限于此(二)管道(Pipeline)和步骤(Stage)管道(Pipeline):聚合框架对数据进行处理的过程;与 Linux 管道有类似之处;步骤(Stage):步骤(Stage)是指管道中的一步操作。每个步骤:接受一系列文档(原始数据);在这些文档上进行一系列运算;生成下一个步骤所需的文档;(一)使用形式(二)常用步骤(stage)运算符 1(三)子运算符聚合框架的基本使用,在 MongoDB 聚合框架里面最重要的一个参数就是 Pipeline,Pipeline 是一个数组的形式,在数组里面每一

28、个元素表示一个对应的步骤,然后把整个Pipeline 传给数据库进行执行,然后就按照这些步骤进行执行,最后把结果返回给客户端。聚合框架的基本使用,在 MongoDB 聚合框架里面最重要的一个参数就是 Pipeline,Pipeline 是一个数组的形式,在数组里面每一个元素表示一个对应的步骤,然后把整个Pipeline 传给数据库进行执行,然后就按照这些步骤进行执行,最后把结果返回给客户端。在每一个步骤里面还包含很多的子运算符,在$Match 里面经常会用到了 EQ,表示某个条件相等,$GT 大于$GTE 大于等于等;还有$And/$All 这些逻辑运算符,还有表示地理位置的,例如$Geowi

29、thin/$Intersect,表示地理位置运算的运算符,$Project 阶段步骤,可能会用到$Map,$Reduce 来对数组的每个元素进行处理。还有进行加减乘除的,例如$Multiply、$Divide、$Subtract、$Add 等;进行日期运算的像$Year、$Month 等子的运算符,在$Group 里面经常进行聚合操作,例如子运算符经常会用到$Sum 来进行汇总、$Avg 求平均值、$Push、$AddToSet 来对数组进行操作。(三)常用步骤(stage)运算符 2MongoDB 里面连接 Join 操作只有左外连接,因为 Join 这种操作上是违反 MongoDB设计的初

30、衷的,这样操作经常要对两个表的不同数据进行连接操作,这些数据在物理存储的时候,通常不是在相邻的区域里面,读取的效率比较低。此外 MongoDB 是一个分布式的环境,校验操作的左右两边如果都是一个分片的表,当进行 Join 操作的时候,左边有一个又有一条数据,它可能在分片一上要连接的一个数据可能在分片二上,下一条数据可能又是另外一种情况,这种情况下数据库很难保证整个操作的性能。基于这些原因,MongoDB 只提供左外连接,并且要求 From 表不能是分片表,左边的表主表可以是分片表,在 SQL 里面会使用类似于左边这样的一个查询语句。原因二:读取效率低下;原因三:分布式环境;在 SQL 里面还会

31、使用 Group BY 类似于左边这样的一个运算符,对应的在 MongoDB 里面是使用聚合运算 Aggregate。还有其他的常用步骤运算符$Unwind 可以展开数组,例如在数组中有三个元素,到了$Unwind 后就会展开成三个文档,形成三条记录。$GraphLookUp 可以进行图搜索,$Facet 和$Bucket,进行分面搜索。(五)为什么只有左外连接?原因一:反范式设计;聚合框架管道和步骤的示意,一个原始的数据集,有很多的数据,中间有对应的结果,1 和 2 是每一个阶段执行的结果,最后处理作为最终的一个结果集返回中间结果1原始数据集处理步骤1管道中间结果2处理步骤2结果集处理步骤3

32、聚合框架给应用程序。每一次的处理过程对应的一个处理的步骤,这些步骤按照顺序整合起来,就是聚合框架的管道,从原始的数据集经过每一个步骤的处理,整个处理的方式和流程,就是 MongoDB 聚合框架。pipeline=$stage1,$stage2,.$stageN;db.aggregate(pipeline,options);SELECT FIRST_NAME AS 名 LAST_NAME AS 姓 FROM UsersWHERE GENDER=男SKIP 100LIMIT 20db.users.aggregate($match:gender:女,group:_id:DEPARTMENT emp_

33、qty:$sum:1 ,$match:emp_qty:It:10;TypeNumberAlias$match过滤WHERE$project投影AS$sort排序ORDER BY$group分组GROUP BY$skip/$limit结果限制SKIP/LIMIT$lookup左外连接LEFT OUTER JOIN云算符作用SQL等价运算符$unwind展开数组N/A$graphLookup图搜索N/A$facet/$bucket分面搜索N/A右表左表左表右表单机JOIN分片2分片1分片31314玩转 MongoDB 从入门到实战db.products.aggregate($facet:price

34、:$bucket:.,year:$bucket:.)db.students.aggregate($unwind:score)name:张三,score:subject:语文,score:84name:张三,score:subject:数学,score:90name:张三,score:subject:外语,score:69db.students.aggregate($unwind:$score,$sort:name:1,score.score:-1name:张三,score:subject:数学,score:90name:张三,score:subject:语文,score:84name:张三,s

35、core:subject:外语,score:69$Unwind 的操作符,这里有示例一条数据,Name 等于张三,张三的成绩放在 Score 这个数组里面,分别对应有三个元素,第一个是语文成绩,第二个是数学成绩,第三个是外语成绩。如果只使用$Unwind 的操作符,就会把这一个数据一条文档展开成三个文档,分别是语文、数学和外语的成绩,进一步在$Unwind 的下面加一个$Sort 的操作符,按照姓名 Name 进行排序,在 Name 相同的情况下,按照 Score 进行降序。可以看到返回的第一条结果就是张三并且是他科目当中成绩最高的,数学的得分在三科目当中最高,所以数学的成绩会排在最前面。(二

36、)分面搜索分面搜索(faceted search)用于对结果文档进行分类以缩小搜索结果。例如:还有常用的像分面搜索,例如逛一些论坛,或者是博客网站的时候,经常会看到帖子或者是文章,会按照不同的地区,不同的内容板块,不同的类别,不同的标签来进行统计。每一个内容板块对应到 MongoDB 里,可以把它认为一个是 Bucket。例一:有很多的商品,我们希望按照商品的价格来进行分类统计,想按照价格在 010 之间,1020 之间,还有 2030,3040 以及大于 40 的,希望能够统计每一个区间里面商品的个数,对应可以用 Aggregation,然后使用$Bucket 这样的阶段操作符。$Bucke

37、t 主要有这几个参数,第一个是 GroupBy,也就是要进行分组,使用$Price,基于价格字段进行分组。第二个参数是 Boundaries,在进行分组的时候,每个分割的区间有 00:00、2:00、3:00、4:00 这几个分区的点,其他的放在 Default,它的值是 Other.针对每一个分组的操作,要执行$Sum,求和的操作,返回的结果放在 Count 里面。例二:商品按照不同的价格区间来进行分组的同时还希望商品按照年份来进行分组。在 MongoDB 里面,可以通过$Facet 查询操作来完成这样的统计,可先按照 Price 也就是价格进行一个$Bucket 的操作,此外除了 Pric

38、e 之外,还按照年份进行另外一个的运算。如果有其他的一个统计的需要,可以继续加在后面,通过一个$Facet 的操作,就可以把商品按照不同的维度进行分类统计。(三)图搜素可以使用$GraphLookUp 操作符来进行图搜索。0,10)120条10,20)20条Other10条1890,1901)80条1901,1920)30条Unknown40条价格数据年份三、进阶使用(一)$unwind查找个人最好成绩科目;name:张三,score:subject:语文,score:84,subject:数学,score:90,subject:外语,score:69右表Top:World:Chinese S

39、implified(30,507)相关类别:地区(13,604)地区(610)桶(bucket)体育(270)健康(798)儿童与青少年(259)参考(2,316)商业(5,940)家庭(125)Regional:Asia China(1,830)World:Chinese Traditional(10,498)World:Taiwanese(54)新闻(464)游戏(566)社会(1,647)科学(983)艺术(1,028)计算机(1,727)购物(429)0,10)120条10,20)20条20,30)300条30,40)500条40,)10条价格db.products.aggregate

40、($bucket:groupBy:$price,boundaries:0,10,20,30,40,default:Other output:count:$sum:1 )$graphLookup(from表暂不支持分片)A认识aDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleA与a互相熟识游泳围棋音乐电脑1516玩转 MongoDB 从入门到实战对于敏感数据,把数据的敏感字段放到视图之外,查询的结果里面就不会包含视图之外的字段,视图还是只读的。结合上 MongoDB 里基于角色的权限授权,可以按角色去控制数据的访问,保护这些敏感的数据,让没有获得授

41、权的人通过访问视图不能够访问到敏感的信息。创建视图的命令对应的是 CreateView,其中包含的参数视图的名称和对应的聚合表达式,这里使用的是$Project,排除_ID,保留 First_Name、Last_Name、Gender、Email、Phone。(三)删除删 除 视 图 的 话 和 删 除 一 个 集 合 是 类 似 的,我 们用“DB.+视图的名称+.Dorp()”就可以删除视图。/delete viewdb.contact_info.drop()复制集使用及原理介绍一、MongoDB 副本集概念及创建作者|夏德军(夏周)(一)MongoDB 副本集的概念官方概念:副本集是一组

42、 MongoDB 的进程去维持同样的一份数据集,通过 MongoDB 的复制协议保证主备之间的数据一致性。如上图所示,MongoDB 有两种部署方式,一个是 Standalone 部署模式,另外一个是副本级,有不同角色的节点,像 Primary 节点和 Secondary 节点。生产环境不建议部署 Standalone 模式。(二)使用 MongoDB 副本集的原因关键词:可用性、拓展性、维护性可用性(三)MongoDB 副本集成员角色副本集里面有多个节点,每个节点拥有不同的职责。在看成员角色之前,先了解两个重要属性:属性一:Priority=0当 Priority 等于 0 时,它不可以被副

43、本集选举为主,Priority 的值越高,则被选举为主的概率更大。属性二:Vote=0不可以参与选举投票,此时该节点的 Priority 也必须额外的副本结合高可用机制提升 MongoDB 实例可用性。扩展性通过 Secondary 节点配合 Driver 扩展 MongoDB 实例读能力。维护性通过滚动的方式 MongoDB 实例进行维护,尽量减少业务所受到的影响,比如版本升级与可能会影响用户流量的 Compact 操作。Write ReadsClientApplicationDriverMongoDNotRecommendRecommendWrite ReadsClientApplicat

44、ionDriverPrimarySecondarySecondaryReplicationReplication1.主节点故障高可用机制自动选举新主3.滚动方式进行实例维护,比如升级版本2.客户端读取Secondary节点数据扩展读能力Write ReadsClientApplicationDriverPrimarySecondarySecondaryReplicationReadsReplication#db.createView(,)db.createView(contact_info,patients,$project:_id:0,first_name:1,Iast_name:1,gen

45、der:1,email:1,phone:1 )#views are shown along with other collectionsshow collections#views metadata is stored in the system.views collectiondb.system.views.find()四、视图(一)视图的概念:基于一个或多个其他集合创建预定义聚合查询类似于 SQL 中的视图作用:数据抽象保护敏感数据的一种方法将敏感数据投影到视图之外只读结合基于角色的授权,可按角色访问信息(二)创建视图1718玩转 MongoDB 从入门到实战为 0,即它也不能被选举为主。

46、members:_id:0 host:localhost:27017,arbiterOnly:false,buildIndexes:true,hidden:false,priority:1,tags:,slaveDelay:NumberLong(0),votes:1 ,_id:1,host:localhost:27018,arbiterOnly:false,buildIndexes:true,hidden:false priority:1,tags:,slaveDelay:NumberLong(0),votes:1 ,成员角色:Primary:主节点,可以接受读写,整个副本集某个时刻只有一个。

47、Secondary:只读节点,分为以下三个不同类型:Hidden=False:正常的只读节点,是否可选为主,是否可投票,取决于 Priority,Votes 的值;Hidden=True:隐藏节点,对客户端不可见,可以参与选举,但是 Priority 必须为 0,即不能被提升为主;Delayed Secondary:延迟只读节点,会延迟一定的时间(SlaveDelay 配置决定)从上游复制增量,常用于快速回滚场景。Arbiter:仲裁节点,只用于参与选举投票,本身不承载任何数据,只作为投票角色。(四)如何获取 MongoDB 副本集创建云上实例MongoDB 的运维门槛较高,需要对相关原理有比

48、较深刻的理解,才能运维好 MongoDB 副本集实例;推荐更便捷、可靠的方式:使用 MongoDB 云服务,一站式的解决方案。阿里云 MongoDB 具有社区版不具备的高级功能,如审计日志、按时间点恢复等,详情如下:阿里云 MongoDB:https:/ 4.4 新增的功能。使用工具 Mtools:MongoDB 官方工程师个人作品,功能强大;包含:实例部署,日志解析/可视化,数据迁移等功能;Github:https:/ mtools 部署副本集,一条命令:执行 Mlaunch,Init 然后指定 Binarypath 还有一些副本集相关参数,Mtools 会一键创建副本集,具体命令执行演示如

49、下:mlaunch init-binarypath/usr/local/Cellar/mongodb-community/4.4.0/bin-replicaset-nodes 3-name replset44-dir/work/mtools_data/data mlaunch init-binarypath/usr/local/Cellar/mongodb-community/4.4.0/bin -replicaset-nodes 3-namereplset44-dir/work/mtools_data/data2launching:/usr/local/Cellar/mongodb-comm

50、unity/4.4.0/bin/mongod on port 27017launching:/usr/local/Cellar/mongodb-community/4.4.0/bin/mongod on port 27018launching:/usr/local/Cellar/mongodb-community/4.4.0/bin/mongod on port 27019replica set replset44 initialized.mongo-eval rs.status()MongoDB shell version v4.2.0connecting to:mongodb:/127.0


注意事项

本文(玩转 MongoDB 从入门到实战.pdf)为本站会员(侯志华)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(点击联系客服),我们立即给予删除!




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

文库网用户QQ群:731843829  微博官方号:文库网官方   知乎号:文库网

Copyright© 2025 文库网 wenkunet.com 网站版权所有世界地图

经营许可证编号:粤ICP备2021046453号   营业执照商标

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png