MongoDB由浅入深.ppt
- 文档编号:1399051
- 上传时间:2022-10-22
- 格式:PPT
- 页数:45
- 大小:1.80MB
MongoDB由浅入深.ppt
《MongoDB由浅入深.ppt》由会员分享,可在线阅读,更多相关《MongoDB由浅入深.ppt(45页珍藏版)》请在冰豆网上搜索。
技术交流廖诚,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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MongoDB 由浅入深