玩转MongoDB 从入门到实战.pdf
《玩转MongoDB 从入门到实战.pdf》由会员分享,可在线阅读,更多相关《玩转MongoDB 从入门到实战.pdf(37页珍藏版)》请在咨信网上搜索。
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 最佳实践二 6356玩转 MongoDB 从入门到实战走进 MongoDB定位上,MongoDB 介于 Memcached 和关系型数据库之间,扩展性和
5、性能上,MongoDB 更接近于 Memcached,功能上,MongoDB 更接近于关系型数据库。在生产环境中,MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。我们先来看左边。当 MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另外两个从节点,会自动和主节点同步,保持数据的更新。在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。我们再来看右边,当 MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读
6、写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。那集群中的数据是如何分布的呢?这些元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。(二)MongoDB 基本概念与关系数据的对应关系关系型数据通常有数据库和表的概念,对应在 MongoDB 里有数据库和集合关系;数据库有主表和子表,对应 MongoDB 通常使用内嵌的子文档或内嵌数组;关系型数据里有 Index 索引,Mo
7、ngoDB 也有类似概念;关系数据库里一条数据称为一行,MongoDB 称为一个文档 Document;关系型数据库里面的列,对应到 MongoDB 成为一个字段 Field;关系数据库里面经常使用 Join 连接操作,对应 MongoDB 通常使用内嵌方式解决,如果使用Linking 方式,对应使用$Lookup 操作符也可支持左外链接;关系型数据库里面还有视图,对应 MongoDB 也有只读视图和按需物化视图;关系型数据库里面会有 ACID 的多记录事务,对应的 MongoDB 里面会有 ACID 的多文档事务。(三)MongoDB 的数据层次结构 MongoDB 里面数据主要分为三层,文
8、档(Documents),集合(Collections),和数据库(Databases),多个文档是存储在一个集合中,多个集合存放在一个数据库里,每个集群里面可能会有多个数据库。例如:数据库(Database):Products集合(Collections):Books,Movies,Music一、MongoDB 的相关概念作者|张春立Depth of FunctionalityScalability&PerformanceMemcachedMongoDBRDBMSMongoDB 的功能定位Replica SetReadWriteApplicationApplicationMongoDMong
9、oDMongoDShard ClusterReadWriteApplicationDriverMongoSConfigServersShard(replica set)MongoDB 部署模型(一)MongoDB 部署模型RDBMSMongDBMongoDB 基本概念与关系数据的对应关系DatabaseDatabaseTableCollectionParent-Child TablesNested Sub-Documentor ArrayIndexIndexRowDocumentColumnFieidJoinEmbeddingLinking,SlookupViewRead-OnlyViewOn
10、-DemandMaterializedViewMulti-RecordACIDTransactionMulti-DocumentACIDTransaction78玩转 MongoDB 从入门到实战运行 MongoDB/bin/mongod-dbpath/data/dbMongoDB 安装的 bin 目录 MongoDB 数据文件的位置数据库和集合的组合,构成 MongoDB 的命名空间:Products.BooksProducts.MoviesProducts.Music*数据库名最长不能超过 64 个字节,命名空间最长不能超过 120 字节*FCV=4.4,命名空间长度限制为 255 字节(
11、四)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.连接 MongoDB 服务:4.指定复制集配置2.启动三个 MongoDB 服务创建分片集群练习有以下 5 个步
12、骤:1.创建 Config Server 复制集2.创建一个或多个分片(每个分片为一个复制集)3.启动 Mongos(一个或多个)4.访问 Mongos,把分片添加到集群5.选择片键,启用分片以上就完成整个分片集群的部署。生产环境部署建议生产环境当中,大家应该遵循生产环境部署的一些最佳实践。比如:1.容量规划:计算资源,存储容量,IOPS,Oplog,网络带宽2.高可用:部署复制集或分片集群3.节点个数:复制集部署奇数个节点,避免脑裂4.应用生产环境的最佳实践,如:使用主机名而不是 IP文件系统(Linux 环境推荐 XFS)禁用 NUMA禁用 THP调高资源限制SwappinessReada
13、headTcp_Keepalive_Time时钟同步安全配置上图是 MongoDB 数据类型的一些列表,常见类型 MongoDB 几乎都支持。(五)MongoDB 采用 BSON 格式保存数据firstName:Thomas,lastName:Smith,age:29二、集群部署MongoDB 数据类型TypeNumberAliasDouble1“double”String2“string”Object3“object”Array4“array”Binary data5“binData”Undefined6“undefined”Objectld7“objectld”Boolean8“bool”
14、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“regex”Symbol14“symbol”JavaScript(with scope)15“java
15、scriptWithScope”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,_id:11,item:small三、基本操作curl-O https:/fastdl.mon
16、godb.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:Access control is not enabled for the database.
17、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-logpath./rs2/mongod.logmongod-replSet rs-dbpath./rs3-
18、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 操作需要执行参数参数包括查询参数更新参数Update 更新数组操作$Push:增加一个对象到数组底部$PushAll:增加多
19、个对象到数组底部.$Pop:从数组底部删除一个对象$Pull:如果匹配指定的值或条件,从数组中删除相应的对象.$PullAll:如果匹配列表中的任意值,从数组中删除相应的对象.$PullAll:如果匹配列表中的任意值,从数组中删除相应的对象$AddToSet:如果不存在则增加一个值到数组使用 Upsert:True 更新或插入如果希望没有就添加,指定 Upsert:True 参数默认情况下如果没有匹配的对象,就不会执行更新使用 Find 查询数据文档使用 Find 查询数据文档Find 是 MongoDB 的基础查询命令Find 返回数据的游标(Cursor)Find 是 MongoDB 的基
20、础查询命令Find 返回数据的游标(Cursor)SQL 查询条件对照查询操作符使用 DropDatabase 删除数据库使用 DB.dropDatabase()来删除数据库数据库相应文件也会被删除,磁盘空间将被释放deleteOnedb.orders.deleteOne(_id:ObjectId(563237a41a4d68582c2509da);db.orders.deleteOne(expirationTime:$lt:ISODate(2015-11-01T12:40:15Z);deleteManydb.orders.deleteMany(client:Crude Traders Inc
21、.);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:Batman )/多条件 or 查询db.movies.find($and:title:Ba
22、tman,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 查询db.movies.find(title:/B/)/按正则表达式查找a=1-a:1a 1-
23、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:匹配两个或多个条件中的一个$and:匹配全部条件db.movies.update(title:Jaws,$inc:bud
24、get: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 Alone,category:family,comedy,imdb_rating:7.4)db.mov
25、ies.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选择需要的或排除不需要的字段$map/$reduce/$filter$multiply/$di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 玩转MongoDB 从入门到实战 MongoDB 入门 实战
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Stan****Shan】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Stan****Shan】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。