大数据技术原理与应用

在mooc上学的该课程,目前进度一半多。包括sql、hive、hbase、hdoop等。

5大数据技术原理与应用数据库RDBMS 关系型数据库MySQL、Oracle、DB2、SQL sever…关系型数据库 全是表NoSQL 非关系型数据库项目结构YARN 资源管理和调度器Tez 运行在YARN之上的下一代Hadoop查询处理框架HBase Hadoop上的非关系型的分布式数据库Pig 一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig LatinSqoop 用于在Hadoop与传统数据库之间进行数据传递Oozie Hadoop上的工作流管理系统Zookeeper 提供分布式协调一致性服务Storm 流计算框架Flume 一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统Ambari Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控Kafka 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据Spark 类似于Hadoop MapReduce的通用并行框架大数据概述时代第三次信息浪潮:云计算、物联网、大数据 2010技术支撑存储容量增加CPU处理能力提升网络带宽不断增加计算网络数据产生的方式运营式系统阶段用户原创内容阶段感知式系统阶段概念、影响特性:4Vvolume 大量化数据摩尔定律数据类型:10%结构化数据、90%非结构化数据variety 多样化web 1.0:文本、图像、视频web 2.0:查询日志/点击流、wiki、twitter企业应用:email、文档文件;应用日志;交易记录科学研究:基因组;LHC加入器;地球与空间探索velocity 快速化eg:Google Dremelvalue 价值密度低影响科学:第四范式,实验-理论-计算-数据思维模式改变:全样而非抽样;效率而非精确;相关而非因果。应用eg:拍电视剧、google预测流感关键技术&模式技术层面基础架构支持云计算平台云存储虚拟化网络技术资源监控技术数据采集数据总线ETL工具*数据存储和管理分布式存储分布式数据库big table分布式文件系统GFS*数据处理与分析分布式处理分布式并行处理技术MapReduce数据隐私与安全2大核心技术分布式存储GFS\HDFSBigTable\HBaseNoSQL(键值、列族、图形、文档数据库)NewSQL(如:SQL Azure)分布式处理MapReduce计算模式批处理计算MapReduceSpark流计算S4StormFlume图计算Pregel (google )查询分析计算Dremel(google )HiveCassandraImpala大数据、云计算、物联网关系云计算关键技术虚拟化Linux:hadoopWindows:虚拟机硬件分布式存储分布式计算多租户3种模式公有云eg:百度云私有云eg 电信、联通混合云3种云服务Iaasaws:EC2;salesforcePaassina app engineSaas数据中心冷、电力丰富;地质结构稳定;凉爽舒适。应用政务云、教育云、医疗云、中小企业云物联网概念应用层处理层网络层感知层技术识别与感知(二维码、RFID等)网络与通信数据挖掘与融合联系云计算为大数据提供了技术基础 大数据为云计算提供用武之地云计算为物联网提供海量数据存储能力 物联网为云计算技术提供了广阔的应用空间物联网是大数据的重要来源 大数据技术为物联网数据分析提供支撑大数据处理架构Hadoop概述简介Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力2大核心HDFS:Hadoop Distributed File SystemMapReduce发展简史源自始于2002年的Apache Nutch项目特性高可靠性高效性高可扩展性高容错性成本低运行在Linux平台上支持多种编程语言应用现状互联网领域是其应用的主阵地Apache Hadoop版本演变Hadoop 1.00.20.x最后演化成1.0.x0.21.x0.22.xHadoop 2.00.23.x2.xHadoop各种版本Apache HadoopHortonworksCloudera(CDH:Cloudera Distribution Hadoop)MapR包括HDFS:存储数据MapReduce:处理数据Hbase:分布式数据库安装与使用集群的安装与使用分布式文件系统HDFS简介集群HDFS把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。物理结构主节点Master Node/名称节点NameNode从节点Slave Node/数据节点DataNode目标兼容廉价的硬件设备流数据读写大数据集简单的文件模型强大的跨平台兼容性局限性不适合低延迟数据访问无法高效存储大量小文件不支持多用户写入及任意修改文件概念大小一个块64MB优点支持大规模文件存储简化系统设计适合数据备份2大组件主节点/名称节点数据结构Fslmage:用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。EditLog:记录了所有针对文件的创建、删除、重命名等操作。第二名称节点SecondaryNameNode名称节点的冷备份对Editlog处理从节点/数据节点体系结构命名空间目录文件通信协议构建在TCP/IP协议基础之上的客户端客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端局限性命名空间限制名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制性能瓶颈整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。隔离问题由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。集群的可用性一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。存储原理冗余数据保存方式:多副本具体:通常一个数据块的多个副本会被分布到不同的数据节点上。多副本的优点加快数据传输速度容易检查数据错误保证数据可靠性数据存取策略存放读取就近读取。HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID.数据错误与恢复名称节点出错备份机制,第二名称节点数据节点出错每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。数据出错网络传输和磁盘错误等因素,都会造成数据错误。客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据。读写过程读数据的过程写数据的过程实践分布式数据库HBase概述从BigTable说起BigTable是一个分布式存储系统处理海量数据:用谷歌MapReduce分布式并行计算模型底层数据存储:谷歌分布式文件系统GFS协同服务管理:Chubby特点:广泛应用性、可扩展性、高性能和高可用性等。可扩展到PB级别的数据和上千台机器。应用:谷歌的许多项目都存储在BigTable中,包括搜索、地图、财经、打印、社交网站Orkut、视频共享网站YouTube和博客网站Blogger等起初用于解决典型的互联网搜索问题建立互联网索引1 设计一个网页爬虫。爬虫持续不断地抓取新页面,这些页面每页一行地存储到BigTable2 运行MapReduce,生成索引,为网络搜索应用做准备搜索互联网3 用户发起网络搜索请求4 网络搜索应用查询建立好的索引,从BigTable得到网页5 搜索结果提交给用户HBase简介特点高可用高性能面向列可伸缩主要存储非结构化和半结构化的松散数据。目标处理非常庞大的表。通过水平扩展方式,利用廉价计算机集群处理 由超过10亿行数据和数百万列元素组成的 数据表。why?关系数据库已流行很多年,且Hadoop已有HDFS、MapReduce,为什么需要HBase?Hadoop无法满足大规模数据 实时处理应用 的需求。Hadoop能很好解决大规模数据的离线批量处理问题,但是,受限于Hadoop MapReduce编程框架的高延迟数据处理机制。HDFS面向批量访问模式,不是随机访问模式[传统的通用关系型数据库]无法应对在数据规模剧增时,导致的系统扩展性和性能问题(分库分表也不能很好解决)[传统关系数据库]在数据结构变化时一般需要停机维护;空列浪费存储空间(HBase已经成功应用于:互联网服务领域和传统行业的众多 在线式数据分析处理系统中)HBase、BigTable底层技术对比文件存储系统HBase:HDFSBigTable:GFS海量数据处理HBase:Hadoop MapReduceBigTable:MapReduce协同服务管理HBase:ZookeeperBigTable:ChubbyHBase与传统关系数据库的对比分析数据类型·关系数据库:采用关系模型,具有丰富的数据类型和存储方式·HBase:采用数据模型(更加简单),它把数据存储为未经解释的字符串操作·关系数据库:操作丰富,会涉及复杂的多表连接·HBase:只有简单的插入、查询、删除、清空等,不存在复杂的表与表之间的关系,因为在设计上就避免了复杂的表和表之间的关存储·关系数据库:基于行模式存储·HBase:基于列存储。每个列族都由几个文件保存,不同列族的文件是分离的索引·关系数据库:通常可针对不同列 构建复杂的多个索引,以提高数据访问性能。·HBase:只有一个索引——行键。通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来维护·关系数据库:更新操作时,会用[最新的当前值]去替换[记录中原来的旧值],旧值被覆盖后就不会存在。·HBase:更新操作时,不删除数据旧的版本,而是生成一个新的版本,保留旧版本。可伸缩性·关系数据库:很难实现横向扩展,纵向扩展的空间也比较有限。·HBase、BigTable这些分布式数据库:为实现灵活的水平扩展而开发的,能轻易通过在集群中 增加或者减少硬件数量 来实现性能的伸缩访问接口Native Java API特点:最常规和高效的访问方式场合:适合Hadoop MapReduce作业并行批处理HBase表数据HBase Shell特点:HBase的命令行工具,最简单的接口场合:适合HBase管理使用Thrift Gateway特点:利用Thrift序列化技术,支持C++、PHP、Python等多种语言场合:适合其他异构系统在线访问HBase表数据REST Gateway特点:解除语言限制场合:支持REST风格的Http API访问HBasePig特点:使用[Pig Latin流式编程语言]来处理HBase中的数据场合:数据统计Hive特点:简单场合:当需要以类似SQL语言方式来访问HBase时数据模型概述HBase是一个稀疏、多维度、排序的映射表,这张表的索引:行键、列族、列限定符、时间戳每个值:是一个未经解释的字符串,没有数据类型用户在表中存储数据,每一行都有一个可排序的行键、任意多的列列族支持动态扩展。·可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型。·所有列均以字符串形式存储,用户需要自行进行数据类型转换。HBase中执行更新操作时,并不会删除数据旧版本,而是生成一个新版本,旧版本仍保留(这是和HDFS 只允许追加不允许修改 的特性相关的)概念HBase采用表来组织数据,表由行、列组成,列划分为若干个列族每个HBase表都由若干行组成,每个行由行键(row key)来标识。列族一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单列限定符/列列族里的数据通过列限定符(或列)来定位单元格具体存数据的地方。在HBase表中,通过行、列族、列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]时间戳每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引坐标“四维坐标”,即[行键, 列族, 列限定符, 时间戳]概念视图物理视图面向列的存储数据压缩率高实现原理HBase功能组件库函数链接到每个客户端Master主服务器(1个)负责管理、维护HBase表的分区信息维护Region服务器列表分配Region负载均衡整个集群中,有哪些Region服务器在工作Region服务器(许多个)负责存储不同Region。存储、维护分配给自己的Region,处理来自客户端的读写请求表和Region本只有一个Region,后来不断分裂Region拆分操作非常快,接近瞬间。因为拆分之后的Region读取的仍然是原存储文件,到“合并”过程把存储文件异步地写到独立的文件之后,才会读取新文件Region大小•每个Region默认大小:100MB-200MB(06年以前的硬件配置)每个Region最佳大小:建议1GB-2GB(13年以后的硬件配置)•每个Region的最佳大小:取决于单台服务器的有效处理能力•同一个Region不会被分拆到多个Region服务器•每个Region服务器存储10-1000个RegionRegion的定位Zookeeper文件记录了-ROOT-表的位置根数据表/-ROOT-表记录了.META.表的Region位置信息-ROOT-表只能有一个Region。通过-ROOT-表,就可以访问.META.表中的数据元数据表/.META.表记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息运行机制HBase系统架构客户端包含访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续数据访问过程Zookeeper服务器可帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点失效”问题大量用于:分布式计算,提供配置维护、域名服务、分布式同步、组服务等。Master管理表和Region管理用户对表的增加、删除、修改、查询等操作实现不同Region服务器之间的负载均衡在Region分裂或合并后,负责重新调整Region的分布对发生故障失效的Region服务器上的Region进行迁移Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求Region服务器工作原理用户读写数据过程被分配到相应Region服务器去执行首先被写入到MemStore和Hlog中只有当操作写入Hlog之后,commit()调用才会将其返回给客户端Region服务器会首先访问MemStore缓存,如果找不到,再去磁盘上面的StoreFile中寻找刷新缓存系统会周期性地把[MemStore缓存里的内容]刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记每次刷新都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件每个Region服务器都有一个自己的HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作;如果发现更新,则先写入MemStore,再刷写StoreFile,最后删除旧的Hlog文件,开始为用户提供服务合并StoreFilewhy?每次刷写都生成一个新的StoreFile,数量太多,影响查找速度操作调用Store.compact()把多个合并成一个合并操作比较耗费资源,只有数量达到一个阈值才启动合并Store工作原理Store是Region服务器的核心多个StoreFile合并成一个单个StoreFile过大时,又触发分裂操作,1个父Region被分裂成两个子RegionHLog工作原理作用因分布式环境必须要考虑系统出错,故HBase采用HLog保证系统恢复工作原理[HBase系统]为[每个Region服务器]配置了一个HLog文件,它是一种预写式日志(Write Ahead Log)用户更新数据必须首先写入日志后,才能写入MemStore缓存,并且,直到[MemStore缓存内容对应的日志]已经写入磁盘,该缓存内容才能被刷写到磁盘应用方案HBase实际应用中的性能优化方法行键(Row Key)行键是按字典序存储,因此,设计行键时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。InMemory创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到Region服务器的缓存中,保证在读取的时候被cache命中。Max Version创建表的时候,可以通过HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据的最大版本,如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)。Time To Live创建表的时候,可以通过HColumnDescriptor.setTimeToLive(int timeToLive)设置表中数据的存储生命期,过期数据将自动被删除,例如如果只需要存储最近2天的数据,那么可以设置setTimeToLive(2 * 24 * 60 * 60)。HBase性能监视Master-status(自带)HBase Master默认基于Web的UI服务端口为60010,HBase region服务器默认基于Web的UI服务端口为60030.如果master运行在名为master.foo.com的主机中,mater的主页地址就是http://master.foo.com:60010,用户可以通过Web浏览器输入这个地址查看该页面。可以查看HBase集群的当前状态GangliaUC Berkeley发起的一个开源集群监视项目,用于监控系统性能OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的metrics并进行存储、索引以及服务,从而使得这些数据更容易让人理解,如web化,图形化等Ambari是创建、管理、监视 Hadoop 的集群在HBase之上构建SQL引擎why?在NoSQL数据存储HBase上提供SQL接口1.易使用。使用诸如SQL这样易于理解的语言,使人们能够更加轻松地使用HBase。2.减少编码。使用诸如SQL这样更高层次的语言来编写,减少了编写的代码量。方案Hive整合HBaseHive与HBase的整合功能从Hive0.6.0版本已经开始出现,利用两者对外的API接口互相通信,通信主要依靠hive_hbase-handler.jar工具包(Hive Storage Handlers)。由于HBase有一次比较大的版本变动,所以并不是每个版本的Hive都能和现有的HBase版本进行整合,所以在使用过程中特别注意的就是两者版本的一致性。PhoenixPhoenix由Salesforce.com开源,是构建在Apache HBase之上的一个SQL中间层,可以让开发者在HBase上执行SQL查询。构建HBase二级索引HBase只有一个针对行健的索引。访问HBase表中的行,只有3种方式:通过单个行健访问通过一个行健的区间来访问全表扫描使用其他产品为HBase行健提供索引功能原理:采用HBase0.92版本之后引入的Coprocessor特性Coprocessor构建二级索引2个实现endpoint相当于关系型数据库的存储过程observer相当于触发器在插入数据时同步写入索引表非侵入性:引擎构建在HBase之上,既没有对HBase进行任何改动,也不需要上层应用做任何妥协每插入一条数据需要向索引表插入数据,即耗时是双倍的,对HBase的集群的压力也是双倍的Hindex二级索引(华为)特性多个表索引多个列索引基于部分列值的索引HBase+RedisHBase+RedisCoprocessor构建二级索引Redis做客户端缓存将索引实时更新到Redis等KV系统中,定时从KV更新索引到HBase的索引表中HBase+solrSolr+HBaseSolr保存索引编程实践安装与配置常用Shell命令create:创建表list:列出HBase中所有的表信息put:向表、行、列指定的单元格添加数据scan:浏览表的相关信息get:通过表名、行、列、时间戳、时间范围和版本号来获得相应单元格的值enable/disable:使表有效或无效drop:删除表常用Java API及应用实例NoSQL数据库简介特性灵活的可扩展性灵活的数据模型与云计算机密结合兴起原因关系数据库已经无法满足Web2.0的需求无法满足 海量数据 的管理需求无法满足 数据高并发 的需求动态数据没法提前生成一个静态网页让用户访问,只能是是根据用户请求来实时生成数据;实时生成的数据,对数据库的负载非常高;基本上用关系型数据库是没办法满足高并发需求。无法满足 高可扩展性和高可用性 的需求数据模型的局限性。“One size fits all”模式很难适用于截然不同的业务场景关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。用同一套模型来抽象显然是不合适的Hadoop就是针对数据分析MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型Web2.0关系型数据库的关键特性(完善的事务机制、高效的查询机制)没有发挥。Web2.0网站系统通常不要求严格的数据库事务Web2.0并不要求严格的读写实时性Web2.0通常不包含大量复杂的SQL查询(去结构化,存储空间换取更好的查询性能)NoSQL与关系数据库的比较具体可维护性关系数据库复杂需要专门的数据库管理员(DBA)维护NoSQL数据库复杂虽然没有DBMS复杂,也难以维护一致性关系数据库强一致性严格遵守事务ACID模型,可以保证事务强一致性NoSQL数据库弱一致性放松了对事务ACID四性的要求,而是遵守BASE模型,只能保证最终一致性数据完整性关系数据库易实现比如通过主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性NoSQL数据库很难实现数据库原理关系数据库完全支持完备的关系代数理论作为基础NoSQL数据库部分支持缺乏理论基础数据规模关系数据库很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低NoSQL数据库超大可很容易 通过添加更多设备来 支持更大规模数据数据库模式关系数据库固定需定义数据库模式,严格遵守数据定义和相关约束条件NoSQL数据库灵活不存在数据库模式,可自由灵活定义并存储各种不同类型的数据查询效率关系数据库借助于索引机制可以实现快速查询(包括记录查询和范围查询)NoSQL数据库没有面向复杂查询的索引,虽然NoSQL可使用MapReduce来加速查询,但在复杂查询方面的性能仍然不如RDBMS扩展性关系数据库一般很难实现横向扩展,纵向扩展的空间也比较有限NoSQL数据库设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展可用性关系数据库在任何时候都以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,RDBMS为了保证严格的一致性,只能提供相对较弱的可用性NoSQL数据库很好标准化关系数据库RDBMS已经标准化(SQL)NoSQL数据库NoSQL还没有行业标准,不同的NoSQL数据库都有自己的查询语言,很难规范应用程序接口技术支持关系数据库经过几十年的发展,已经非常成熟,Oracle等大型厂商都可以提供很好的技术支持NoSQL数据库仍然处于起步阶段,还不成熟,缺乏有力的技术支持总结关系数据库以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等应用电信、银行 等领域的关键业务系统,需要保证强事务一致性NoSQL数据库可支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等应用互联网企业;传统企业的非关键业务(比如数据分析)四大类型键值数据库产品Redis、Memcached、Riak、SimpleDB、Chordless、Scalaris数据模型键 是一个字符串对象值 可以是任意类型的数据,比如整型、字符型、数组、列表、集合等应用涉及 频繁读写、拥有简单数据模型 的应用内容缓存 如会话、配置文件、参数、购物车等存储配置、用户数据信息 的移动应用扩展性好,灵活性好,大量写操作时性能高无法存储结构化信息,条件查询效率较低不适用不是通过键而是通过值来查:键值数据库根本没有通过值查询的途径需要存储数据之间的关系:在键值数据库中,不能通过2个或2个以上的键来关联数据需要事务的支持:在一些键值数据库中,产生故障时,不可以回滚使用者百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、StackOverFlow(Redis)、Instagram (Redis)Youtube(Memcached)、Wikipedia(Memcached)列族数据库产品BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS数据模型列族应用分布式数据存储与管理数据在地理上分布于多个数据中心的应用程序可以容忍副本中存在短期不一致情况的应用程序拥有动态字段的应用程序拥有潜在大量数据的应用程序,大到几百TB的数据查找速度快,可扩展性强,容易进行分布式扩展,复杂性低功能较少,大都不支持强事务一致性不适用需要ACID事务支持的情形,Cassandra等产品就不适用使用者Ebay(Cassandra)、Instagram(Cassandra)NASA(Cassandra)、Twitter(Cassandra and HBase)、Facebook(HBase)、Yahoo!(HBase)文档数据库产品MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit数据模型键/值值(value)是版本化的文档应用存储、索引并管理面向文档的数据或者类似的半结构化数据比如,用于后台具有大量读写操作的网站、使用JSON数据结构的应用、使用嵌套结构等非规范化数据的应用程序性能好(高并发),灵活性高,复杂性低,数据结构灵活提供嵌入式文档功能,将经常查询的数据存储在同一个文档中既可以根据键来构建索引,也可以根据内容构建索引缺乏统一的查询语法不适用在不同的文档上添加事务。文档数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。使用者百度云数据库(MongoDB)、SAP (MongoDB)、Codecademy(MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)图形数据库产品Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDB数据模型图结构应用专门用于处理具有高度相互关联关系的数据,比较适合于 社交网络、模式识别、依赖分析、推荐系统以及路径寻找 等问题灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱复杂性高,只能支持一定的数据规模使用者Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)三大基石CAPConsistency一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据Availability可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应;Tolerance of Network Partition分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。BASEBasically Available基本可用,是指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现Soft state“软状态(soft-state)”是与“硬状态(hard-state)”相对应的一种提法。“硬状态”时,可以保证数据一致性,即保证数据一直是正确的。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性。Eventual consistency强一致性当执行完一次更新操作后,后续的其他读操作就可以保证读到更新后的最新数据弱一致性不能保证后续访问,读到的都是更新后的最新数据最终一致性 是弱一致性的一种特例,允许后续的访问操作可暂时读不到更新后的数据,但经过一段时间之后,必须最终读到更新后的数据。最常见的实现最终一致性的系统是DNS(域名系统)。一个域名更新操作根据配置的形式被分发出去,并结合有过期机制的缓存;最终所有的客户端可以看到最新的值。最终一致性类别因果一致性如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将获得A写入的最新值。而与进程A无因果关系的进程C的访问,仍然遵守一般的最终一致性规则“读己之所写”一致性可以视为因果一致性的一个特例。当进程A自己执行一个更新操作之后,它自己总是可以访问到更新过的值,绝不会看到旧值单调读一致性如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值会话一致性它把访问存储系统的进程放到会话(session)的上下文中,只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统保证不会延续到新的会话单调写一致性系统保证来自同一个进程的写操作顺序执行。系统必须保证这种程度的一致性,否则就非常难以编程了如何实现各种类型的一致性?从NoSQL到NewSQL数据库数据库发展OldSQL事务型应用NoSQL互联网应用NewSQL分析性应用NewSQL特性非常好的水平扩展性强一致性事务一致性支持SQL查询支持海量数据存储egAmazon RDS SQL Azure文档数据库MongoDB简介-由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。-旨在为WEB应用提供可扩展的高性能数据存储解决方案。-将数据存储为一个文档,数据结构由键值(key=>value)对组成。-MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。特点提供了一个面向文档存储,操作起来比较简单、容易可设置任何属性的索引 来实现更快的排序有较好的水平可扩展性支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组可以实现替换完成的文档(数据)或者一些指定的数据字段MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言安装简单概念database数据库一个mongodb中可以建立多个数据库。默认数据库为"db",该数据库存储在data目录中单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。collection数据库表/集合集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。存在于数据库中,没固定结构。可插入不同格式和类型的数据document数据记录行/文档文档是一个键值(key-value)对(即BSON)。不需要设置相同的字段,并且相同的字段不需要相同的数据类型field数据字段/域index索引primary key主键,MongoDB自动将_id字段设置为主键访问MongoDB使用 MongoDB shell访问MongoDB使用Java程序访问 MongoDB云数据库概述背景云计算是云数据库兴起的基础概念部署和虚拟化在云计算环境中的数据库优点增强数据库的存储能力,消除人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。特性动态可扩展高可用较低使用代价易用性高性能免维护安全云数据库是个性化数据存储需求的理想选择大企业:海量数据需求中小企业:低成本数据存储动态变化数据存储与其他数据库的关系云数据库没专属的数据模型,RDBMS、NoSQL的数据模型都有。云数据库并非一种全新的数据库技术,而只是 以服务的方式 提供数据库功能许多公司在开发云数据库时,后端数据库都是 直接使用现有的 各种关系数据库或NoSQL数据库产品产品概述AWSDynamo、SimpleDB、RDSGOOGLEGoogle Cloud SQLMicrosoftMicrosoft SQL AzureOracleOracle CloudYahoo!PNUTSVerticaAnalytic Database v3.0 for the CloudEnerpriseDBPostgres Plus in the Cloud阿里阿里云RDS腾讯腾讯云数据库AWSRDS关系数据库SimpleDB键值数据库DynamoDBNoSQL数据库Redshift数据仓库ElastiCache分布式内存缓存GOOGLEGoogle Cloud SQLMicrosoftSQL Azure属于关系型数据库支持存储过程支持大量数据类型支持云中的事务支持局部事务,但是不支持分布式事务系统架构概述简介低成本&高性能的MySQL云数据库方案设计原则保持单一的系统对外入口,并为系统内部维护单一的资源池消除单点故障,保证服务的高可用性保证系统具有良好的可伸缩,能够动态地增加、删减计算与存储节点保证分配给用户的资源也是 弹性可伸缩的,资源之间相互隔离,确保应用和数据安全架构角色Controller服务器管理。实现集群成员管理、元数据存储、MySQL实例管理、故障恢复、备份、迁移、扩容等功能运行了一组Mnesia分布式数据库服务。其中存储了各种系统元数据,eg:集群成员、用户的配置和状态信息,以及用户名到后端MySQL实例地址的映射关系(或称为“路由表”)等当其它服务器组件需要获取用户数据时,可以向Controller服务器发送请求获取数据UMP系统中部署了多台Controller服务器,然后,由Zookeeper的分布式锁功能来帮助选出一个“总管”,负责各种系统任务的调度和监控Proxy服务器提供访问MySQL数据库的服务可使用 已有的MySQL客户端 连接到 Proxy服务器,Proxy服务器通过用户名获取到 用户的认证信息、资源配额的限制(例如QPS、IOPS(I/O Per Second)、最大连接数等),以及后台MySQL实例的地址,然后,用户的SQL查询请求会被转发到相应的MySQL实例上。功能数据路由、屏蔽MySQL实例故障、读写分离、分库分表、资源隔离、记录用户访问日志Agent服务器-部署在运行MySQL进程的机器上-来管理每台物理机上的MySQL实例。功能主从切换、创建、删除、备份、迁移,收集和分析MySQL进程的统计信息、慢查询日志(Slow Query Log)和bin-logWeb控制台提供系统管理界面日志分析服务器存储、分析 Proxy服务器传入的 用户访问日志,并支持实时查询 一段时间内的慢日志和统计报表信息统计服务器定期将[采集到的用户的连接数、QPS数值以及MySQL实例的进程状态]用RRDtool进行统可在 Web界面上可视化展示统计结果也可把统计结果作为 今后实现弹性的资源分配、自动化的MySQL实例迁移 的依据愚公系统全量复制 结合bin-log分析 进行增量复制的工具可在不停机的情况下 动态扩容、缩容和迁移开源组件Mnesia简介是一个分布式数据库管理系统特性支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可线性扩展到至少50个节点。数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点 来改进容错性LVS简介Linux Virtual Server (Linux虚拟服务器),是一个虚拟的服务器集群系统LVS集群采用 IP负载均衡技术 和 基于内容请求分发技术调度器是LVS集群系统的唯一入口点。-调度器具有很好的吞吐率,将请求均衡地转移到不同服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序作用UMP系统借助于LVS来实现集群内部的 负载均衡RabbitMQ工业级的消息队列产品节点间消息通讯ZooKeeper简介协同工作系统作用全局的配置服务器提供分布式锁(选出一个集群的“总管”)监控所有MySQL实例功能容灾what为每个用户创建2个MySQL实例,一个主库,一个从库主从库状态由Zookeeper负责维护how主从切换过程-[Zookeeper]探测到主库故障,通知[Controller服务器]-[Controller服务器]启动主从切换时,会修改“路由表”,即用户名到后端MySQL实例地址的映射关系-把主库标记为不可用-借助于[消息中间件RabbitMQ]通知所有[Proxy服务器]修改用户名到后端MySQL实例地址的映射关系宕机后的主库再次上线过程-在主库恢复时,会把从库的更新复制给自己-当主库的数据库状态 快要达到 和从库一致的状态时,[Controller服务器]就会命令从库停止更新,进入不可写状态,禁止用户写入数据-等到主库更新到和从库完全一致的状态时,[Controller服务器]就会发起主从切换操作,并在路由表中 把主库标记为可用状态-通知[Proxy服务器]把写操作切回主库上,用户写操作可以继续执行,之后再把从库修改为 可写状态读写分离被均衡地发送到主库、从库上执行主库分库分表how1.[Proxy服务器]解析用户SQL语句,提取出 重写和分发SQL语句 所需要的信息2.对SQL语句进行重写,得到多个针对相应MySQL实例的子语句,然后把子语句分发到对应的MySQL实例上执行3.接收来自各个MySQL实例的SQL语句执行结果,合并得到最终结果资源管理采用资源池机制来管理数据库服务器上的CPU、内存、磁盘等计算资源,所有的计算资源都放在资源池内进行统一分配,资源池是为MySQL实例分配资源的基本单位。具体整个集群中的所有服务器会根据其机型、所在机房等因素被划分多个资源池,每台服务器会被加入到相应的资源池中对于每个具体MySQL实例,管理员会根据应用部署在哪些机房、需要哪些计算资源等因素,为该MySQL实例具体指定主库和从库所在的资源池,然后,系统的实例管理服务会本着负载均衡的原则,从资源池中选择负载较轻的服务器来创建MySQL实例资源调度多个小规模用户:共享同一个MySQL实例中等规模的用户:独占一个MySQL实例分库分表的用户:占有多个独立的MySQL实例资源隔离用Cgroup限制MySQL进程资源场合多个MySQL实例共享同一台物理机方式限制用户的MySQL进程最大可以使用的CPU使用率、内存和IOPS等在Proxy服务器端限制QPS场合多个用户共享同一个MySQL实例方式[Controller服务器]监测用户的MySQL实例的资源消耗情况。-如果明显超出配额,就通知[Proxy服务器]通过[增加延迟的方法]去限制用户的QPS,以减少用户对系统资源的消耗。数据安全SSL数据库连接[Proxy服务器]实现了完整的MySQL客户端/服务器协议,可以与客户端之间建立SSL数据库连接数据访问IP白名单可把允许访问云数据库的IP地址放入“白名单”,只有白名单内的IP地址才能访问,其他IP地址的访问都会被拒绝,从而进一步保证账户安全记录用户操作日志用户的所有操作记录都会被记录到[日志分析服务器],通过检查用户操作记录,可以发现隐藏的安全漏洞SQL拦截[Proxy服务器]可以根据要求拦截多种类型的SQL语句,比如全表扫描语句“select *”Amazon AWS和云数据库AWSAWS Global InfrastructureRegion每个Region是相互独立的,自成一套云服务体系,分布在全球各地。目前全球有10个Region(比如 北京)Availability Zone每个Region又由数个可用区组成,每个可用区可以看做一个数据中心,相互之间通过光纤连接Edge Locations全球目前有50多个边缘节点,是一个内容分发网络(CDN,Content Distrubtion Network),可以降低内容分发的延迟,保证终端用户获取资源的速度NetworkingDirect Connect支持企业自身的数据中心直接与AWS的数据中心直连,充分利用企业现有的资源VPN Connection通过VPN连接AWS,保证数据的安全性Virtual Private Cloud私有云,从AWS云资源中分一块给你使用,进一步提高安全性Route 53亚马逊提供的高可用的可伸缩的云域名解析系统。高效地将用户请求连接到 AWS 中运行的基础设施,如Amazon EC2 实例、ELB 负载均衡器或 Amazon S3 存储桶ComputeEC2:Elastic Compute Cloud虚拟机。支持Windows和Linux的多个版本,支持API创建和销毁,有多种型号可供选择,按需使用。并且有自动扩展功能(5分钟即可新建一个虚拟机),有效解决应用程序性能问题架构EC2实例(AMI)弹性块存储弹性负载均衡ELB:Elastic Load Balancing负载均衡器。可以和EC2无缝配合使用,横跨多个可用区,可以自动检查实例的健康状况,自动剔除有问题的实例,保证应用程序的高可用性StorageS3:Simple Storage Service对外提供的对象存储服务。不限容量,单个对象大小可达5TB,可实现高达99.999999999%的可用性EBS:Elastic Block Storage弹性块存储服务,Amazon EBS可以为Amazon EC2的虚拟机创建卷volumns。 EBS相当于一个分布式块设备,可以直接挂载在EC2实例上,用于替代EC2实例本地存储,从而增强EC2可靠性EBS通过卷来组织数据,每个EBS卷只能挂载到一个EC2实例EBS卷并不与实例绑定,而是与用户帐号绑定Glacier用于较少使用的存储存档文件和备份文件,价格便宜量又足,安全性高DatabaseSimpleDB:基于云的键 / 值数据存储服务DynamoDB: DynamoDB是亚马逊自主研发的No SQL数据库,性能高,容错性强,支持分布式RDS:Relational Database Service,关系型数据库服务。支持MySQL,SQL Server和Oracle等数据库Amazon ElastiCache: 数据库缓存服务Application ServiceCloud Search: 一个弹性的搜索引擎,可用于企业级搜索Amazon SQS: 队列服务,存储和分发消息Simple Workflow:一个工作流框架CloudFront:世界范围的内容分发网络(CDN)EMR: Elastic MapReduce,一个Hadoop框架的实例,可用于大数据处理Deployment & AdminElastic BeanStalk: 一键式创建各种开发环境和运行时CloudFormation:采用JSON格式的模板文件来创建和管理一系列亚马逊云资源OpsWorks: OpsWorks允许用户将应用程序的部署模块化,可以实现对数据库、运行时、服务器软件等自动化设置和安装IAM: Identity & Access Management,认证和访问管理服务。用户使用云服务最担心的事情之一就是安全问题。亚马逊通过IAM提供了立体化的安全策略,保证用户在云上的资源绝对的安全云数据库Amazon RDS借助 AWS 数据库迁移服务及其附带模式转换工具,客户可选择从本地部署向AWS 迁移相同数据库引擎Amazon SimpleDBwhatAWS上的第一个NoSQL数据库服务(键值数据库)how把数据进行多副本存储,支持高并发读取更新操作只能针对主副本进行,但可以快速传播到其他副本,提供最终一致性应用存储小型、碎片化的零散数据缺陷单表限制SimpleDB 数据模型由域、项目、属性和值组成,每个域最多只能保存10GB的数据,所以得自己分区以免超过此限制性能不稳定SimpleDB以简单为设计目标,SimpleDB并不需要用户指定主键,也不需要用户创建索引,会默认对所有属性创建索引。一致性问题设计时采用的是最终一致性模型Amazon DynamoDBwhat采纳了SimpleDB中成功的托管服务形式及灵活的数据模型how提供了一致性读功能限制了系统的功能,只能通过主键去操作记录,不能进行批量更新,使得系统可以保证 可伸缩性及任何时候的高性能全面使用SSD来提升系统性能Amazon RedshiftAmazon ElastiCache微软云数据库SQL Azure逻辑模型概念一个表格组:一个逻辑数据库行组:表格组中所有划分主键相同的行集合只支持同一个行组内的事务,同一个行组的数据逻辑上会分布到一台服务器,以此规避分布式事务通过 主备复制 将数据复制到多个副本,保证高可用性物理模型what在物理层面,每个 有主键的表格组 根据划分主键列 有序地分成多个数据分区。每个行组属于唯一分区分区:SQL Azure复制、迁移、负载均衡的基本单位。每个分区包含多个副本(默认为3),每个副本存储在一台物理的SQL Server上Primary 主副本(1个)处理查询、更新事务,并以操作日志的形式,将事务同步到SecondarySecondary 从副本(其他)接收Primary发送的事务日志,并应用到本地数据库体系架构SQL Server实例一个运行着SQL Server的物理进程。每个物理数据库 包含 多个子数据库,它们之间相互隔离。子数据库是一个分区,包含用户的数据、schema信息全局分区管理器维护分区映射表信息协议网关将用户的 数据库连接请求 转发到 相应的主分区上Fabric 分布式基础部件维护机器上下线状态,检测服务器故障并为集群中的各种角色执行选取主节点操作虚拟机簇根据工作负载的变化,动态增加/减少虚拟机的数量每台虚拟机SQL Server VM安装了SQL Server 数据库管理系统,以关系模型存储数据通常,一个数据库会被散存储到3~5台SQL Server VM中实践MapReduce概述分布式并行编程why?CPU性能大约每隔18个月翻一番,从2005年开始摩尔定律逐渐失效 ,需要处理的数据量快速增加,开始借助分布式并行编程来提高程序性能