MongoDB由浅入深.ppt

上传人:b****1 文档编号:1399051 上传时间:2022-10-22 格式:PPT 页数:45 大小:1.80MB
下载 相关 举报
MongoDB由浅入深.ppt_第1页
第1页 / 共45页
MongoDB由浅入深.ppt_第2页
第2页 / 共45页
MongoDB由浅入深.ppt_第3页
第3页 / 共45页
MongoDB由浅入深.ppt_第4页
第4页 / 共45页
MongoDB由浅入深.ppt_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

MongoDB由浅入深.ppt

《MongoDB由浅入深.ppt》由会员分享,可在线阅读,更多相关《MongoDB由浅入深.ppt(45页珍藏版)》请在冰豆网上搜索。

MongoDB由浅入深.ppt

技术交流廖诚,2022/10/22,1,议题,什么是NoSQL?

为什么要用NoSQL?

MongoDB是什么?

谁在用MongoDB?

MongoDB部署架构MongoDB内部数据结构MongoDB简单应用,2,什么是NoSQL?

NoSQL是NotOnlySQL的缩写,而不是NotSQL,它不一定遵循传统数据库的一些基本要求,如SQL标准、ACID属性、表结构等。

相比传统数据库,叫它分布式数据管理系统更贴切,数据存储被简化更灵活,重点被放在了分布式数据管理上。

3,什么是NoSQL?

关系数据库的表结构(学生、地址、成绩、科目):

4,什么是NoSQL?

NoSQL的表结构(学生、地址、成绩、科目):

5,什么是NoSQL?

相对应表中一条文档视图:

6,什么是NoSQL?

相对应表中一条文本视图:

7,为什么要用NoSQL?

大数据的特征Volume-数据量巨大,对TB、PB数据级的处理,已经成为基本要求。

Variety-数据多样性,能处理结构化、非结构化数据,能处理Web数据,甚至语音、图像、视频数据。

Velocity-数据实时性,在客户每次浏览页面,下订单的过程中,都会对用户进行实时的产品推荐,购买决策已经变得非常实时。

8,为什么要用NoSQL?

大数据的性能要求Highperformance-高并发读写,高并发、实时动态数据查询和修改。

HugeStorage-海量数据的高效存储和访问,类似SNS网站,海量用户信息的高效、实时存储和查询。

HighScalability&HighAvailability-高可扩展性和高可用性,需要拥有快速横向扩展能力、提供7*24小时不间断服务。

9,为什么要用NoSQL?

关系数据库处理大数据的弱势面对高并发读写的需求,数据库读写压力巨大,硬盘IO无法承受。

面对海量数据,数据库能存储的记录数量有限,SQL查询效率极低。

横向扩展艰难,无法通过快速增加服务器节点实现,系统升级和维护造成服务不可用。

10,为什么要用NoSQL?

NoSQL处理大数据的优势数据库结构简单,数据间无关系性,这自然就带来了很高的读写性能,且易扩展。

灵活的数据模型,可以随时存储自定义的数据格式。

而在关系数据库里,增删字段是件麻烦的事。

尤其大数据量的表,增加字段简直就是一个噩梦。

通过复制模型可实现高可用性,可以分布部署在低廉的PC集群上。

支持动态增加、删除服务器节点,随时控制硬件投入成本。

11,MongoDB是什么?

MongoDB简介一个分布式文件存储数据库,由C+语言编写的开源项目。

一个NoSQL中,功能最丰富、最像关系数据库的产品。

它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据模型。

它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,而且还支持索引、MapReduce等功能。

12,MongoDB是什么?

MongoDB主要特点高性能、易部署、易使用,存储数据方便。

模式自由,支持动态查询、完全索引、文档内嵌查询。

面向文档,以K/V形式存储数据,Key用于唯一标识,而Value则可以是各种复杂的数据类型。

支持主/从服务器间的数据复制和故障恢复。

自动分片,以支持云级别的服务伸缩性,可动态添加、删除额外的服务器。

13,MongoDB是什么?

MongoDB支持的数据类型布尔ture|false整数123浮点12.3字符串helloworld对象ID用newObjectId()来声明日期用newDate()来声明时间戳数组apple,banana,pear内嵌文档name:

Joe,age:

13,phone:

home:

123,moblie:

456RegExp正则表达式/a-f/,14,MongoDB是什么?

MongoDB适用场景网站动态数据,需要实时的插入,更新与查询。

可以做高性能的持久化缓存层。

存储大尺寸,低价值的数据。

高伸缩性的集群场景。

文档化结构的数据存储及查询。

15,谁在用MongoDB?

16,谁在用MongoDB?

17,MongoDB部署架构,ReplicaSets架构图,Primary,Secondary-1,Secondary-2,.,18,MongoDB部署架构,ReplicaSets角色介绍Primary主服务器,写操作只能在其身上发生,通过保存操作日志(oplog),然后将数据同步到多个Secondary上。

Secondary从服务器,热机备份主服务器上的数据,分担主机读压力,当主机发生故障不能工作,随时待命接管主机工作。

19,MongoDB部署架构,主/从服务器间数据同步图,20,MongoDB部署架构,主/从服务器间数据同步介绍红色箭头表示数据只能写到主机上,然后再同步到多个从机上。

蓝色箭头表示数据可以从主机或从机任意一个上读。

各个主机与从机之间,通过心跳包检测机制,同步彼此之间的状态。

21,MongoDB部署架构,Sharding集群架构图,22,MongoDB部署架构,Sharding集群架构角色介绍ShardServer-mongod实例,存储实际数据的模块。

ConfigServer-mongod实例,存储集群的元数据,如分片信息、数据块映射等。

RouteServer-mongos实例,客户端访问路由(统一接入点),查询优化,数据合并、排序、裁剪,请求推送等。

23,MongoDB部署架构,Sharding机制图,24,MongoDB部署架构,Sharding是什么?

分片是指将数据拆分,将其分散到不同服务器上的过程。

通过分片能够增加更多的服务器,来应对不断增加的负载和数据。

MongoDB何时需要分片?

机器的磁盘不够用。

单个mongod服务已经不能满足写数据的性能需求。

想将大量的数据放在内存中提高性能。

25,MongoDB部署架构,MongoDB怎么分片?

指定一个key来进行分片,按key的范围将数据存放到多个chunk上,每个chunk的大小有限制。

这些chunk分散保存在多个分片节点上。

每个分片节点可以是单个mongod服务,也可以是一个ReplicaSets,后者可以实现数据的热备份。

当一个chunk超过其限制的最大体积时,会自动分裂成两个小的chunk。

当chunk在分片节点中分布不均衡时,会自动引发chunk迁移操作。

26,MongoDB部署架构,一个分片例子如上文students集合,如果选择“_id”作为片键,则第一片存放学号从1100的文档,第二片存放学号从101200的文档,第三片存放学号从201300的文档。

“1”,“100”Shard1,“101”,“200”Shard2,“201”,“300”Shard3,27,MongoDB部署架构,Sharding服务角色图,28,MongoDB部署架构,Sharding服务角色介绍config服务器保存了两个映射关系,一个是key区间的数据都存放在那些chunk上的映射关系,另一个是chunk都存放在哪些分片节点上的映射关系。

客户端统一访问路由节点mongos,来进行数据操作。

路由节点先访问config服务器获取信息,找到数据真正存放位置,然后再对其进行操作。

29,MongoDB部署架构,Sharding服务角色介绍路由节在写数据时,还会判断当前chunk是否超出限定大小,如果是就将其分裂成两个chunk。

对于按分片key进行的数据查询,路由节点会查到具体数据存储位置,然后再进行相关的工作。

对于不按分片key进行的数据查询,路由节点会把操作发给所有分片,然后再对返回结果进行合并、排序等。

30,MongoDB内部数据结构,在文件系统中的存储形式MongoDB会给每个数据库预分配大小逐渐增长的文件集。

文件集序号依次为0,1,2.,大小依次是64M,128M,256M,512M,1G,2G,然后就一直是2G的创建下去(32位系统最大到512M)。

文件集在内部会被切分成多个数据域,数据域之间使用双向链表连接。

不同数据域的存储类别用名字空间区分,如每个集合有自己独立的名字空间,每个索引也有自己独立的名字空间。

31,MongoDB内部数据结构,名字空间与数据域的关系,32,MongoDB内部数据结构,名字空间与数据域的关系每个名字空间可以有不同的数据域,且在磁盘上不必连续。

图中还有一个特殊的名字空间freelist,存放着不再使用的数据域,如删除集合或索引产生的数据域。

当名字空间分配新的数据域时,会先查找空闲列表,看看是否有适合大小的数据域可用。

索引数据也保存在数据域中,其结构被组织成B-Tree形式。

在每一个数据域中,保存了具体一行行BSON格式的数据。

33,MongoDB内部数据结构,对每一个域来说,其头部包含了一些元数据,比如自己的位置,上一个域和下一个域的位置,,34,MongoDB内部数据结构,域中第一条和最后一条数据记录的位置,剩下的部分用于存储具体的数据。

35,MongoDB内部数据结构,名字空间与数据域的关系对于每个数据库,都有一个名字空间文件“dbname.ns”。

在名字空间文件中,保存的是一个哈希表,存储了每个名字空间的元数据,包括其大小,域数,第一个域位置,最后一个域位置,被删除的域的链表、索引信息等,如下图:

36,MongoDB内部数据结构,37,MongoDB简单应用,MongoDB读操作WHERE#select*fromstudentswherename=Joedb.students.find(name:

Joe)FIELDS#selectname,agefromstudentswhereage=33db.students.find(age:

33,name:

1,age:

1)#selectname,agefromstudentsdb.students.find(,name:

1,age:

1),38,MongoDB简单应用,MongoDB读操作SORT#select*fromstudentsorderbyagedb.students.find().sort(age:

1)#select*fromstudentsorderbysexasce,agedescdb.students.find().sort(sex:

1,age:

-1)SLICE#select*fromstudentsskip2limit3db.students.find().skip

(2).limit(3)#select*fromstudentswheresex=maleandage18andagedb.students.find(sex:

“male”,age:

$gt:

18,$lt:

30)比较操作对比:

$gt()、$lt(=)、$lte(=)、$ne(!

=),39,MongoDB简单应用,MongoDB读操作IN#select*fromstudentswhereagein(18,28)db.students.find(age:

$in:

18,28)#select*fromstudentswhereagenotin(18,28)db.students.find(age:

$nin:

18,28)COUNT#selectcount(*)fromstudentswhereage18db.students.find(age:

$gt:

18).count()OR#select*fromstudentswhereage=18orage=28db.students.find($or:

age:

18,age:

28),40,MongoDB简单应用,MongoDB写操作INSERT#insertintostudentsvalue()db.students.insert(name:

Jeremy,sex:

male,age:

88)UPDATE#updatestudentssetage=100,sex=0wherena

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1