MongoDB概述及存储结构PPT课件

上传人:无*** 文档编号:253067873 上传时间:2024-11-28 格式:PPT 页数:43 大小:2.35MB
返回 下载 相关 举报
MongoDB概述及存储结构PPT课件_第1页
第1页 / 共43页
MongoDB概述及存储结构PPT课件_第2页
第2页 / 共43页
MongoDB概述及存储结构PPT课件_第3页
第3页 / 共43页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,*,.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,*,.,*,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,*,.,*,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,*,.,*,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,.,mongoDB,的概述与存储结构,汇报人:,2024/11/28,1,.,01,第一章,mongoDB,概述,02,第二章 存储体系结构,背后的故事,硬实力,软实力,Contents,目,录,崛起的法宝,2024/11/28,2,.,背后的故事,1,崛起的法宝,2,第一章,mongoDB,概述,2024/11/28,3,.,背后的故事,Web2.0,来袭,1.,互联网应用用户量剧增,2.,数据量呈几何级数增长,3.,高并发的读写,2024/11/28,4,.,背后的故事,RDBMS,的困境,1.,数据库并发负载高,2.,海量数据存储和访问,3.,数据库数据越来越大,4.,事务管理的负担,5.,对关系型数据库读,/,写实时性的忽略,6.,多表关联查询被弱化,2024/11/28,5,.,背后的故事,NoSQL,的崛起,NoSQL,全称是,Not Only Sql,,指的是非关系型的数据库。,NoSQL,数据库主要应用于,web2.0,的大规模系统,具有模式灵活、最终一致性、面向海量数据、分布式、开源、水平可扩展、配置简单、非关系型等特点。,存储类型,NoSQL,产品,特性,列式存储,Hbase,、,Cassandra,Hypertable,按列存储数据,最大的特点是方便存储结构和半结构化数据,方便做数据压缩,针对某一列或者某几列的查询有非常大的,I/O,优势,键值存储,Redis,、,TokyoCabinet,Tokyo Tyrant,、,Flare,可以通过键快速查询到值。一般来说,存储不管值的格式,照单全收,文档式存储,MongoDB,、,CouchDB,文 档 存 储 一 般 用 类 似,JSON,格式存储,存储的内容是文档类型的,这样也就有机会对某些字段建立索引,实现关系型数据库的某些功能,对象式存储,db4o,Versant,通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据,2024/11/28,6,.,背后的故事,mongoDB,的前世今生,2007,年,10,月,,MongoDB,由,10gen,团队所发展,,2009,年,2,月首度推出,MongoDB,是一个介于关系数据库和非关系数据库之间的产品,MongoDB,是由,C+,语言编写的开源数据库系统,MongoDB,服务端可运行在,Linux,、,Windows,或,OSX,平台,支持,32,位和,64,位应用,2024/11/28,7,.,崛起的法宝,vs RDBMS,2024/11/28,8,.,崛起的法宝,数据模型,MongoDB,数据库是一个面向集合且模式自由的文档类型数据库。,1.,面向集合,面 向 集 合 是 指 数 据 被 分 组 存 在 在 数 据 集 中 , 被 称 为 一 个 集 合,(,Collencton=table,)。集合类似于关系型数据库的表(,table,),不同于表的是,集合不需要定义任何模式,集合在存储文档,一个文档类似于关系型数据库的一条记录。在,MongoDB,中,要操作一个表并不需要创建它,可以直接往集合中插入数据,如果集合不存在,它会自动创建这个集合。,2.,模式自由,模式自由就是对存储在,MongoDB,数据库中的数据,我们不需要知道它是什么,结构(可以是任何的文档)。,3.,文档型,文档型存储的数据是键值对的集合,键是字符串,值可以是数据类型集合中,的任意类型,包括数组和文档。我们把这个数据格式称为,BSON,(,Binary,Serialized Document Notation,),2024/11/28,9,.,崛起的法宝,功能性,1.,完整的索引支持:可以对文档创建索引,甚至还可以对内嵌文档以及数组创建索引。,MongoDB,的查询优化器会自动分析查询语句,然后生成一个高效的查询集合。,2.,动态查询:,MongoDB,的查询指令使用,JSON,形式,使查询表达式变得非常丰富,还可以非常容易地查询文档中的内嵌对象和数组。,3.,查询监视:,MongoDB,提供了很多性能监视工具,用于分析数据库操作的性能。,2024/11/28,10,.,崛起的法宝,功能性(续),4.,复制及自动故障转移:,MongoDB,数据库支持服务器之间的复制,从节点可以复制主节点的数据,主节点的所有对数据的操作都会同步到从节点。从节点的数据跟主节点的数据是完全一样的,以作备份。主节点发生故障之后,从节点可以升级为主节点,也可以通过从节点对故障主节点进行数据恢复。,5.,高效地传统存储方式:支持二进制数据及大型对象(如视频),可以将图片文件甚至视频转换成二进制的数据存储到数据库中。,6.,自动分片以支持云级别的伸缩性: 可以水平扩展数据库集群,动态添加片(服务器)。,2024/11/28,11,.,崛起的法宝,其他招式,1.,拓展功能强大,2.,便于管理,3.,适用于多种场合,2024/11/28,12,.,硬实力,1,软实力,2,第二章 存储结构,2024/11/28,13,.,HDD,SSD,随机访问,(IOPS),125,12000,(100x),顺序读写,(Throughput),100MB/s,200MB/s,(2x),VS.,硬实力,磁盘,数据的存储总离不开磁盘,因此,mongodb,的数据存储设备当然也只能是磁盘。官方建议采用,SSD,固态硬盘。,.,mongod,Data,fileSSD,Journal,HDD,Log,HDD,优化的,IO,部署方案,.,数据,IO,:随机访问为主,x:,12,DiskLoc:,xx,Read:,DiscLoc:,xx,DisckLoc:,xx,1,2,3,.,无冗余,写性能一般,写入速度慢,条带化,+,镜像,性能好,+,数据冗余,建议的,RAID Level,.,硬实力,存储引擎,存储引擎是数据库管理系统的一个重要组成部分。它的主要职责就是负责把数据存储到硬盘和把数据从硬盘检索出来。,MySQL,和,Riak,均支持多个不同的存储引擎。不同的存储引擎对不同的应用需求有特别的优化。如某个存储引擎可以是专为高并发写设计的,而另一个则是为高压缩率设计从而达到节省磁盘空间的目标。,mongoDB,默认采用的存储引擎是操作系统底层提供的内存映射文件(,MMAP,)(至今也只有一种)。,2024/11/28,18,.,硬实力,内存映射,物理内存,0,10000,硬盘,480,200,480,虚拟内存,10000,0,200,mmap(),Page fault, 10ms,页面不在内存,缺页中断,10ms,页面已在内存,50us,1,2,3,4,.,硬实力,故障恢复,复制集,.,一个典型的集群结构如下:,Shards,每一个,shard,包括一个或多个服务和存储数据的,mongod,进程(,mongod,是,MongoDB,数据的核心进程),典型的每个,shard,开启多个服务来提高服务的可用性。这些服务,/mongod,进程在,shard,中组成一个复制集。,硬实力,负载均衡,2024/11/28,21,.,软实力,数据类型,null,布尔,ture|false,整数,123,浮点,12.3,字符串,“hello world”,对象,ID,用,new ObjectId,()来申明。,日期,用,new Date,()来申明,时间戳,数组,“apple”,”blanan”,”pear”,内嵌文档,“username” : “jone”, “age”: 13, “contact” : “home”:”123”,”moblie”:”456”,RegExp,正则表达式,/a-z/,2024/11/28,22,.,数字型表示,MongoDB,对整型数字的存储分两个级别,一个,32,位的,一是,64,位的。浮点数,MongoDB,仅支持,64,位的双精度浮点数。,整数表示法:,64,位浮点数表示法:,0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001,mongo,内部,所有数字都是用,long,存储,所以单个数字是,8,字节,2024/11/28,23,.,字符型表示,MongoDB,的所有字符均采用,UTF-8,编码。,UTF-8,(,8-bit Unicode Transformation Format,)是一种针对,Unicode,的可变长度,字符编码,,又称万国码。由,Ken Thompson,于,1992,年创建。现在已经标准化为,RFC 3629,。,UTF-8,用,1,到,6,个,字节,编码,UNICODE,字符,。,2024/11/28,24,.,日期表示,日期类型存储是从标准纪元开始的毫秒数,不存储时区。,JavaScript,中,,Date,对象用作,MongoDB,的日期类型,由于,JavaScript,本身的特性,创建一个,Date,对象时,通常会调用,new Date(),而不是使用,Date(),。因为调用,Date(),实际返回的是对日期的字符串表示,而不是真正的,Date,对象。,格式:,“date”:new Date(),2024/11/28,25,.,ObjectID,详解,不同的机器都能用全局唯一的同种方法方便的生成它。,ObjectId,使用,12,字节的存储空间,其生成方式如下:,4e931cb6,edcd88,1e19,00017f,时间戳 机器,ID PID,计数器,时间戳保证秒级唯一,机器,ID,保证设计时考虑分布式,避免时钟同步,,PID,保证同一台服务器运行多个,mongod,实例时的唯一性,最后的计数器保证同一秒内的唯一性。,2024/11/28,26,.,字符串表示,由于字符采用的,UTF-8,编码,目的就是为了实现字符串的可变格式和可变长度。,0,标识字符,串长度,字符串内容,参考:, =,长度,(4,字节,) +,字符串,(n,字节,) + (1,字节,),2024/11/28,27,.,BSON,格式存储,例:,a:12,BSON,结构如下:,Len | vtype |key|0| v | E,长度,| value,类型,| key |0 | value|,结束符号,4| 1 | 1 |1| 2 |1 = 10,字节,2024/11/28,28,.,软实力,文件,在,MongoDB,内部,每个数据库都包含一个,.ns,文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。所以如果系统中有一个叫做,test,的数库,那么构成,test,这个数据库的文件就会由,test.ns,,,test.0,,,test.1,等等组成。其中*,.ns,是包含命名空间的文件,保存该数据库数据的相关信息。,*.0,和,*.1,是数据文件。,32,位系统的,MongoDB,服务器每一个,Mongod,实例只能使用,2G,的数据文件。这是由于地址指针只能支持,32,位。,2024/11/28,29,.,命名空间,在数据文件内部,每个数据库都是按照命名空间组织的,一种类别的数据与其他类别的分开存放。每个集合的文档都有自己的命名空间,索引也是。命名空间的元数据存放在数据库的,.ns,文件中。,每个命名空间的数据都被分成若干组,放到数据文件的某一区域内,这个区域称为数据域。在图 中可以看到数据库,foo,有,3,个数据文件,,其中第,3,个是预分配的空文件。前两个数据文件被分成几个数据域,属于几个不同的命名空间。,2024/11/28,30,.,软实力,存储过程,下图展示了数据库是如何跟底层系统打交道的,2024/11/28,31,.,虚拟地址空间,2024/11/28,32,.,内部文件格式,在名字空间文件中,保存了每个名字空间的存储信息元数据,包括其大小,块数,第一块位置,最后一块位置,被删除的块的链表以及索引信息,2024/11/28,33,.,块结构,各个,Extent(,块,),采用双链表的形式连接,2024/11/28,34,.,块和记录,各个文档数据也是采用双链表的形式连接,2024/11/28,35,.,块相关特性,1.,每一条记录在块内从,4,的倍数的字节处开始,2.,块的大小不会动态扩增,3.,尽量数据不跨块,但若记录的大小大于一个块的大小,必然会跨块,4.,相似记录计量保持在同一个块中,2024/11/28,36,.,软实力,选择查询,MySQL:,SELECT * FROM user,Mongo:,db.user.find(),MySQL:,SELECT * FROM user WHERE name = foobar,Mongo:,db.user.find(name : foobar),2024/11/28,37,.,MySQL:,INSERT INTO user (name, age) values (foobar,25),Mongo:,db.user.insert(name : foobar, age : 25),if you want add a column email on MySQL,you must :,ALTER TABLE user.,But in Mongo,you can just:,db.user.insert(name : foobar, age : 25, email : foo),软实力,插入,2024/11/28,38,.,MongoDB,在执行插入时,首先,会将插入的数据转换成,BSON,格式;然后,,MongoDB,数据库会对,BSON,进行解析,并且检查是否存在“,_id”,键(,_id,键在插入数据库时,MongoDB,会自动生成)。,MongoDB,还对文档的大小做了限制。,1.8,之前的版本,文档不能超过,4MB,;,1.8,之后的版本支持,16MB,。除了这些之外,没有别的数据校验,就是简单的将文档原样存入数据库中。这样做的坏处是允许插入无限数据;好处就是不会受到注入式攻击,让数据库更加安全。,MongoDB,在记录长度变化后,发现当前记录所在空间后面没有空余的空间可供其变长。那么这条记录就会被删除然后移动到数据集的最后。,2024/11/28,39,.,MySQL:,DELETE * FROM user,Mongo:,db.user.remove(),MySQL:,DELETE FROM user WHERE age ; $gte : = ; $lt : ; $lte : = ; $ne : !=,软实力,删除,2024/11/28,40,.,删除原理,位置通过,DiskLoc,数据结构进行存储,存储了数据文件编号和块在文件中的位置,删除的块或者域都会在,DletedList,中标记,并不是直接抹掉。,2024/11/28,41,.,MySQL:,UPDATE user SET age = 36 WHERE name = foobar,Mongo:,db.user.update(name : foobar, $set : age : 36),MySQL:,UPDATE user SET age = age + 3 WHERE name = foobar,Mongo:,db.user.update(name : foobar, $inc : age : 3),软实力,更新,2024/11/28,42,.,谢谢观看!,2024/11/28,43,.,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!