第十二讲-NoSQL数据库技术大数据时代关系数据库的瓶颈NoSQL的优势CAP理论NoSQL数据模型及分类NoSQL应用现状重点介绍几个NoSQL随着网民参与互联网产品和应用的程度越来越深,互联网将更加智能,互联网的数据量也将呈爆炸式增长一、大数据时代•大交易数据:来自电商的数据,包括B2B、B2C、C2C、团购等•大交互数据:来自社交网络的数据,SNS、微博等•两类数据的有效融合将是大势所趋,这种融合更能增强企业的商业洞察力一、大数据时代体量Volume多样性Variety价值密度Value速度Velocity非结构化数据的超大规模和增长•占总数据量的80~90%•比结构化数据增长快10倍到50倍•是传统数据仓库的10倍到50倍大数据的异构和多样性•很多不同形式(文本、图像、视频、机器数据)•无模式或者模式不明显•不连贯的语法或句义•大量的不相关信息•对未来趋势与模式的可预测分析•深度复杂分析(机器学习、人工智能Vs传统商务智能(咨询、报告等)实时分析而非批量式分析•数据输入、处理与丢弃•立竿见影而非事后见效大数据的4V特征“大量化(Volume)、多样化(Variety)、快速化(Velocity)、价值密度低(Value)”就是“大数据”的显著特征,或者说,只有具备这些特点的数据,才是大数据。一、大数据时代•大数据时代下的系统需求•Highperformance–高并发读写的需求高并发、实时动态获取和更新数据•HugeStorage–海量数据的高效率存储和访问的需求类似SNS网站,海量用户信息的高效率实时存储和查询•HighScalability&&HighAvailability–高可扩展性和高可用性的需求需要拥有快速横向扩展能力、提供7*24小时不间断服务一、大数据时代•关系数据库如何应对大数据•Highperformance–高并发读写的需求问题:数据库读写压力巨大,硬盘IO无法承受解决方案:Master-Slave,主从分离分库、分表,缓解写压力,增强读库的可扩展性二、关系数据库的瓶颈•关系数据库如何应对大数据•HugeStorage–海量数据的高效率存储和访问的需求问题:存储记录数量有限,SQL查询效率极低解决方案:分库、分表,缓解数据增长压力二、关系数据库的瓶颈•关系数据库如何应对大数据•HighScalability&&HighAvailability–高可扩展性和高可用性的需求问题:横向扩展艰难,无法通过快速增加服务器节点实现,系统升级和维护造成服务不可用解决方案:Master-Slave,增强读库的可扩展性MMM——Master-MasterReplicationManagerforMySQL二、关系数据库的瓶颈•解决方案的问题1.分库分表缺点:(1)受业务规则影响,需求变动导致分库分表的维护复杂(2)系统数据访问层代码需要修改2.Master-Slave缺点(1)Slave实时性的保障,对于实时性很高的场合可能需要做一些处理(2)高可用性问题,Master就是那个致命点,容易产生单点故障3.MMM缺点本身扩展性差,一次只能一个Master可以写入,只能解决有限数据量下的可用性二、关系数据库的瓶颈•关系数据库如何应对大数据•MMM架构二、关系数据库的瓶颈DB分类IDname性别001张三男002李四女namescore张三90李四75InfotableScoretableIDname性别score001张三男90002李四女75关系型非关系型关系型vs非关系型什么是key-value型?keyvalueID:001Name:张三ID:001性别:男ID:002Name:李四ID:002性别:女………………………………什么是文档型?Adocumentdatabaseis,atitscore,akey/valuestorewithonemajorexception.Insteadofjuststoringanyblobinit,adocumentdbrequiresthatthedatawillbestoreinaformatthatthedatabasecanunderstand.TheformatcanbeXML,JSON,BinaryJSON(MongoDB),orjustaboutanything,aslongasthedatabasecanunderstandit.例如--MongoDBusetaojindb.user.find(){_id:ObjectId(4ec320a11d90d0521b973342),name:taojin,pwd:123456}/data/db目录下-rw-------1rootroot64MNov1814:05taojin.0-rw-------1rootroot128MDec2110:32taojin.1-rw-------1rootroot16MNov1814:05taojin.ns什么是列式存储型?001002张三李四男女例如:Hbasehbase(main):002:0create'scores',’id',’info'hbase(main):003:0put‘scores’,’001‘,’info:name:','1'hbase(main):004:0put‘scores’,’001‘,’info:性别‘,’男'hbase(main):005:0put‘scores’,’001‘,’info:scores‘,’90’WhatisHBase?StorageSystemHigh-Availability&&High-PerformanceDistributedColumn-OrientedMulti-Dimensional行式数据库面对查询需求,数据库必须被大量膨胀才能满足性能需求数据是按行存储的没有索引的查询使用大量I/O建立索引和物化视图需要花费大量时间和资源列式数据库数据类型一致,数据特征相似——高效压缩每一列由一个线索来处理——查询的并发处理数据是按列存储——每一列单独存放数据即是索引只访问查询涉及的列——大量降低系统IOE.什么是内存型?内存数据库是指一种将全部内容存放在内存中,而非传统数据库那样存放在外部存储器中的数据库。例如:Redis&&Memcache常用在Mysql前面,用以分摊前端的部分读的压力。NoSQL数据库类型•易扩展NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。甚至有多种NoSQL之间的整合。•灵活的数据模型NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。三、NoSQL的优势•高可用NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。•大数据量,高性能NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。三、NoSQL的优势•什么是NoSQL?NoSQL是NotOnlySQL的缩写,而不是NotSQL,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。相比传统数据库,叫它分布式数据管理系统更贴切,数据存储被简化更灵活,重点被放在了分布式数据管理上。三、NoSQL的优势•分布式数据系统的CAP原理的三要素:•一致性(Consistency)•可用性(Availability)•分区容忍性(Partitiontolerance)•CAP原理:在分布式系统中,这三个要素最多只能同时实现两点,不可能三者兼顾•对于分布式数据系统,分区容忍性是基本要求•对于大多数web应用,牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。四、CAP原理四、CAP原理•NoSQL运动两个核心理论基础:•Google的BigTableBigTable提出了一种很有趣的数据模型,它将各列数据进行排序存储。数据值按范围分布在多台机器,数据更新操作有严格的一致性保证。•Amazon的DynamoDynamo使用的是另外一种分布式模型。Dynamo的模型更简单,它将数据按key进行hash存储。其数据分片模型有比较强的容灾性,因此它实现的是相对松散的弱一致性:最终一致性。五、NoSQL数据模型及分类•NoSQL运动两个核心理论基础:五、NoSQL数据模型及分类•第一种分类方法:五、NoSQL数据模型及分类类型部分代表特点列存储HbaseCassandraHypertable顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。文档存储MongoDBCouchDB文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。key-value存储TokyoCabinet/TyrantBerkeleyDBMemcacheDBRedis可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)图存储Neo4JFlockDBInfoGrid图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。对象存储db4oVersant通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。xml数据库BerkeleyDBXMLBaseX高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。•第二种分类方法:•参见《NoSQLDataModelingTechniques》五、NoSQL数据模型及分类•第二种分类方法:参见《NoSQLDataModelingTechniques》•Key-Value存储:OracleCoherence,Redis,TokyoCabinet•类BigTable存储:ApacheHBase,ApacheCassandra•文档数据库:MongoDB,CouchDB•全文索引:ApacheLucene,ApacheSolr•图数据库:neo4j,FlockDB五、NoSQL数据模型及分类•市场需求五、NoSQL应用现状•使用情况五、NoSQL应用现状•BigTable•Dynamo•Cassandra•HBase•Redis•MongoDB六、几种主流NoSQL数据库•BigTable简介bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、GoogleEarth、GoogleFinance等。•数据模型Bigtable是一个稀疏的、分布式的、持久化存储的多维度排序Map。Map的索引是行关键字、列关键字以及时间戳;Map中的每个value都是一个未经解析的byte数组。(row:string,column:string,time:int64)-string六、几种主流NoSQL数据库——BigTable•数据模型一个存储Web网页的例子的表的片断•行名:”com.cnn.”•contents列族:存放的是网页的内容•anchor列族:存放引用该网页的锚链接文本。•“anchor:cnnsi.com”列表示被cnnsi.com引用•“anchhor:my.look.ca”列表示被my.look.ca引用(”com.cnn.”,”anchor:my.look.ca”,t8)-”CNN.com”六、几种主流NoSQL数据库——BigTable•技术要点•基