您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > MongoDB概述与存储结构
大数据处理系统——存储管理mongoDB1大数据的存储平台大多采用NoSQ数据库系统,它能充分利用分布式计算机平台的特点,具有更好的存储和访问效率。NoSQL的崛起2020/6/232NoSQL全称是NotOnlySql,指的是非关系型的数据库。NoSQL数据库主要应用于web2.0的大规模系统,具有模式灵活、最终一致性、面向海量数据、分布式、开源、水平可扩展、配置简单、非关系型等特点。存储类型NoSQL产品特性列式存储Hbase、CassandraHypertable按列存储数据,最大的特点是方便存储结构和半结构化数据,方便做数据压缩,针对某一列或者某几列的查询有非常大的I/O优势键值存储Redis、TokyoCabinetTokyoTyrant、Flare可以通过键快速查询到值。一般来说,存储不管值的格式,照单全收文档式存储MongoDB、CouchDB文档存储一般用类似JSON格式存储,存储的内容是文档类型的,这样也就有机会对某些字段建立索引,实现关系型数据库的某些功能对象式存储db4oVersant通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据mongoDB简介31.MongoDB是一个介于关系数据库和非关系数据库之间的产品2.MongoDB是一个开源的、模式自由的、面向文档存储的、分布式的数据库3.MongoDB是由C++语言编写的开源数据库系统4.MongoDB服务端可运行在Linux、Windows或OSX平台,支持32位和64位应用数据模型4MongoDB数据库是一个面向集合且模式自由的文档类型数据库。1.面向集合面向集合是指数据被分组存在在数据集中,被称为一个集合(Collencton==table)。集合类似于关系型数据库的表(table),不同于表的是,集合不需要定义任何模式,集合在存储文档,一个文档类似于关系型数据库的一条记录。在MongoDB中,要操作一个表并不需要创建它,可以直接往集合中插入数据,如果集合不存在,它会自动创建这个集合。2.模式自由模式自由就是对存储在MongoDB数据库中的数据,我们不需要知道它是什么结构(可以是任何的文档)。3.文档型文档型存储的数据是键值对的集合,键是字符串,值可以是数据类型集合中的任意类型,包括数组和文档。我们把这个数据格式称为BSON(BinarySerializedDocumentNotation)功能性51.完整的索引支持:可以对文档创建索引,甚至还可以对内嵌文档以及数组创建索引。MongoDB的查询优化器会自动分析查询语句,然后生成一个高效的查询集合。2.动态查询:MongoDB的查询指令使用JSON形式,使查询表达式变得非常丰富,还可以非常容易地查询文档中的内嵌对象和数组。3.查询监视:MongoDB提供了很多性能监视工具,用于分析数据库操作的性能。功能性64.复制及自动故障转移:MongoDB数据库支持服务器之间的复制,从节点可以复制主节点的数据,主节点的所有对数据的操作都会同步到从节点。从节点的数据跟主节点的数据是完全一样的,以作备份。主节点发生故障之后,从节点可以升级为主节点,也可以通过从节点对故障主节点进行数据恢复。5.高效地传统存储方式:支持二进制数据及大型对象(如视频),可以将图片文件甚至视频转换成二进制的数据存储到数据库中。6.自动分片以支持云级别的伸缩性:可以水平扩展数据库集群,动态添加片(服务器)。其他特征71.拓展功能强大2.便于管理3.适用于多种场合MongoDB的适用场景MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。(1)网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。(3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。8MongoDB的适用场景(4)高伸缩性的场景:MongoDB非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce引擎的内置支持。(5)用于对象及JSON数据的存储:MongoDB的Bson数据格式非常适合文档化格式的存储及查询。9MongoDB与MSSQLServer的语句对照——选择查询MySQL:SELECT*FROMuserMongo:db.user.find()MySQL:SELECT*FROMuserWHEREname='foobar'Mongo:db.user.find({'name':'foobar'})2020/6/2310MySQL:INSERTINTOuser(`name`,`age`)values('foobar',25)Mongo:db.user.insert({'name':'foobar','age':25})ifyouwantaddacolumn`email`onMySQL,youmust:ALTERTABLEuser….ButinMongo,youcanjust:db.user.insert({'name':'foobar','age':25,'email':'foo@bar.com'})MongoDB与MSSQLServer的语句对照——插入1112MongoDB在执行插入时,首先,会将插入的数据转换成BSON格式;然后,MongoDB数据库会对BSON进行解析,并且检查是否存在“_id”键(_id键在插入数据库时MongoDB会自动生成)。MongoDB还对文档的大小做了限制。1.8之前的版本,文档不能超过4MB;1.8之后的版本支持16MB。除了这些之外,没有别的数据校验,就是简单的将文档原样存入数据库中。这样做的坏处是允许插入无限数据;好处就是不会受到注入式攻击,让数据库更加安全。MongoDB在记录长度变化后,发现当前记录所在空间后面没有空余的空间可供其变长。那么这条记录就会被删除然后移动到数据集的最后。MySQL:DELETE*FROMuserMongo:db.user.remove({})MySQL:DELETEFROMuserWHEREage30Mongo:db.user.remove({'age':{$lt:30}})$gt:;$gte:=;$lt:;$lte:=;$ne:!=MongoDB与MSSQLServer的语句对照——删除13删除原理14位置通过DiskLoc数据结构进行存储,存储了数据文件编号和块在文件中的位置,删除的块或者域都会在DletedList中标记,并不是直接抹掉。MySQL:UPDATEuserSET`age`=36WHERE`name`='foobar'Mongo:db.user.update({'name':'foobar'},{$set:{'age':36}})MySQL:UPDATEuserSET`age`=`age`+3WHERE`name`='foobar'Mongo:db.user.update({'name':'foobar'},{$inc:{'age':3}})MongoDB与MSSQLServer的语句对照——更新15大数据处理系统——分析Hive基于分布式计算平台上的数据分析工具包括ApachePig、Hive、ApacheKylin、Rhadoop等。16Hive定义Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。Hive没有专门的数据格式。Hive可以很好的工作在Thrift之上,控制分隔符,也允许用户指定数据格式。17Hive的适用场景Hive构建在基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive在几百MB的数据集上执行查询一般有分钟级的时间延迟。因此,Hive并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive查询操作过程严格遵守HadoopMapReduce的作业执行模型,Hive将用户的HiveQL语句通过解释器转换为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。18Hive的设计特点支持索引,加快数据查询。不同的存储类型,例如,纯文本文件、HBase中的文件。将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。可以直接使用存储在Hadoop文件系统中的数据。内置大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF函数来完成内置函数无法实现的操作。类SQL的查询方式,将SQL查询转换为MapReduce的job在Hadoop集群上执行。19hive的技术架构20hadoop和mapreduce是hive架构的根基。Hive架构包括如下组件:CLI(commandlineinterface)、JDBC/ODBC、ThriftServer、WEBGUI、metastore和Driver(Complier、Optimizer和Executor),这些组件我可以分为两大类:服务端组件和客户端组件。服务端组件:Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。21客户端组件:CLI:commandlineinterface,命令行接口。Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hivewebinterface),使用前要启动hwi服务。22Hive常用优化方法join连接时的优化:当三个或多个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个mapreduce。join连接时的优化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大。原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算在where字句中增加分区过滤器。当
本文标题:MongoDB概述与存储结构
链接地址:https://www.777doc.com/doc-6103561 .html