一种支持实时复杂查询和分析的NoSQL系统题纲系统需求与现有方案技术方案应用案例系统需求概述数据及系统特点结构化:每条记录包含10个字段左右,每条记录的大小大约是几百字节数据量巨大:达到千亿级以上,达到PB级加载速度快:达到百万条/s的规模系统规模:可以扩展到上千个节点对数据的访问需求提供SQL访问接口支持大规模结果集:达到千万条规模支持按多列的实时查询(秒级)支持多列之间的逻辑比较关系,例如AND、OR、NOT等支持多列之间的的算术比较关系,例如=、、等支持统计、聚合、分组、排序等操作(秒级)ORDERBYASC(DESC),GROUPBY,TOP,LIMITSUM,COUNT,AVG,MAX,MIN数据不更新,但需要对数据批量删除系统需求概述共享磁盘OracleRACDBSAN/共享磁盘DBDBDB网络SAN/FC完全共享SMP服务器DB磁盘现有方案(1)—关系数据库单机数据库结构OracleRAC关系型数据库都主要关注了CA,即一致性和可用性性能、可扩展性上都比较差无法满足可扩展性和性能的要求完全不共享DBDBDBDB网络磁盘磁盘磁盘磁盘Master现有方案(2)—关系数据库集群ParallelDBMS数据分片(sharding)或者功能分区将数据按照不同的策略进行划分:功能、字段值范围、HASH等优点:能够有效的解决可扩展性的问题缺点:shard的扩容比较复杂;联合多个shard的表数据查询复杂。NoSQL(非关系型)NoSQL≠NoSQL,而是NoRelationship,NotOnlySQL系统特点可以处理超大规模的数据,可支持到千亿规模Sharing-Noting架构,可扩展性强数据加载速度快,并可随节点个数线性增长现有方案(3)-NoSQL方案根据特定应用场景的需要设计开发了很多NoSQL系统分布式KV型:例如:Dynamo,PNUTS、FlareCF型:例如:Bigtable,Cassandra和Hbase。文档型:例如:MongoDB,coutchDB现有方案(3)-NoSQL方案现有方案(3)-NoSQL方案现有No-SQL数据管理系统检索能力差K/V型:仅支持基于Key的查询,无法做多关键字查询以及根据Value的复杂查询Column-Based型:扩展了KV数据模型的表述能力,但是仅支持关键字查询,时间区间查询,不支持针对属性的复杂查询以及统计、分析等操作现有方案(4)—Hadoop+MR+HIVEHbase、Pig、Hive:提供结构化数据的存储、查询、分析技术MapReduce:提供可靠的分布计算方法HDFS:提供统一视图的分布式存储环境面向非实时的分析型应用速度慢,无法满足实时性的要求现有方案分析PDBMS、No-SQL数据库、Hadoop局限性分析!Hadoop+MR+HiveRDBMS当节点规模扩大时,由于关系模式的约束,子表维护、数据错误等原因导致关系数据库的性能急剧下降!MapReduce无索引的检索方式与“pull”模式的中间数据处理流程导致检索效率低下!No-SQL仅支持基于Row_Key的查询,不支持多列查询,统计分析等复杂查询;针对大返回结果集的查询效率低!现有方案分析系统分类典型系统特点概述关系型数据库DBMS-X,Verita,GreenPlum,AsterData具备检索复杂性,但是不具有扩展性HadoopHIVE,PIG,HadoopDBetc具备扩展性,但是检索效率低No-SQLLocalHost-KeyValueTC(KC),BDB不具备扩展性Hash-basedKeyValueDynamo,Pnuts,voldemort,falre具备扩展性,但是不支持区间查询Column-familyHbase,Hypertable,Cassandra,Memcachedb,levelDBetc具备扩展性,但是不支持多列查询DocumentbasedDBMongoDB,coutchDB加载、检索效率低检索模式有序表数据规模低高简单复杂关系数据库KV数据库目标领域No-SQL改善传统数据库的可扩展性差,并发性差的问题解决NoSQL数据的检索能力差的问题,增加多列查询、统计排序等功能系统设计目标系统规模:万亿条最终一致性支持更丰富的SQL查询题纲系统需求与现有方案技术方案应用案例系统物理架构负责对集群中各节点进行管理和协调功能负责对全局信息、节点状态信息的管理……DataNodeDataNode……ZookeeperNodeZookeeperNode……Master……加载节点……查询节点负责数据索引建立、数据存储、数据检索分析等计算功能以及数据I/O功能。索引结构分布式Hash表随机读,不支持范围查询实例:Tair,Memcache,Dynamo,Cassandra分布式B+Tree随机读和顺序扫描,支持范围查询;顺序划分不均匀,需要叶子节点分裂合并实例:Bigtable&HBase,GoogleMegastore索引结构系统采用全局索引+局部索引机制全局索引:分布式B+树结构,支持对目标数据的快速定位局部索引:保存在每个node内部,支持复杂的查询和统计TableSpaceRoot节点第二层索引第二层索引第二层索引第三层索引…第三层索引…第三层索引…全局的分布式B+树DatanodeshardshardDatanodeDatanode局部索引存储及I/O方式列存储每个Shard由一个或者多个StoreFile组成,每个storeFile保存一个列I/O并行将数据分配到DataNode的多块磁盘上;数据I/O时并行从多块磁盘访问;实现多块磁盘IOPS和带宽的聚合。分布式查询流程查询条件QueryPlanshardtoNodeListBloomFilter结果集Master集群Datanode集群分级、并行检索机制二级并发与汇总一级并发与汇总分布式查询流程Datanode独立接收查询规划树根据语法树叶节点的属性值检索局部索引根据语法树内节点合并、过滤规则,生成局部结果集结果集SELECT*FROMTABLEWHERE(DOMAIN=‘’ANDNOTVALUE=‘8.8.8.8’)OR(DOMAIN=[‘’TO‘’)ANDNOTDOMAIN=‘*’;语法解析分布式查询规划—查询规划投影与选择:π,θ——shardπ:selectDOMAIN,VALUE…θ:whereDOMAIN=‘’andTYPE=A…在Datanode上,针对每个shard并发处执行分组与排序:OrderBy,GroupBY——datanode+client在Datanode上,第二级汇总处执行在Client一级级处汇总多Datanode结果,做最后的排序、分组聚合函数——client在Client第一级汇总处完成,汇总每个Datanode返回的结果集后,进行分组与排序,执行具体的聚合函数,再运行排序与topk处理系统扩展性分析存储规模分析系统采用share-nothing结构,增加存储节点,可以增加集群的计算能力并线性扩展存储空间读写完全并行化数据节点1Region1Region2Regionk…数据节点2Regionk+1Regionk+2Region2k…数据节点nRegion(n-1)k+1Region(n-1)k+2Regionnk……读写读写系统扩展性分析加载能力分析在所有Datanode上加载数据,系统加载效率可以线性提升检索效率分析在二级并发处会线性提高检索效率数据规模一定,在仅有选择,投影检索条件时,检索效率会随着存储节点的增加而线性增加系统可靠性分析元数据管理集群化,防止单点失效问题元数据信息存储在zookeeper集群和DataNode集群上,具备数据容错功能,在线数据恢复,提供集群高可用性服务Master点不存储元数据信息,可实现快速失效切换引入commit-log,提供记录级别的原子操作防止内存数据的掉电丢失以记录为单位,提供前滚或回滚操作,保证记录写操作的原子性引入副本容错机制支持多副本采用差量压缩技术,提高存储效率无单点失效问题系统功能概述—查询方法对外提供在线检索和离线检索两类查询方法在线检索通过SQL-LIKE语言描述检索规则,利用SHELL或API接口返回结果可实时查询内存数据或历史数据离线检索用户定义查询任务,定时启动任务,结果导入离线数据分析库在离线数据分析库中查询获得相对复杂、耗时的数据查询系统功能概述—功能汇总(1)支持SQL语言的核心功能支持多列查询、分组、排序、聚合等查询功能提供必要的函数和数据类型定义提供SHELL交互界面WebService接口(6)支持并发加载功能采用带外传输机制写入数据到DatanodeDatanode并发加载方式(2)支持分布式并发查询功能支持二级并发机制:节点之间和shard之间采用分布式查询规划(3)支持在线查询与定时复杂任务查询(5)支持副本容错功能,无单点失效影响(4)全局索引+局部索引的分布索引式机制全局索引采用分布式B+Tree局部建立了面向多个属性的索引数据以shard为单位进行列存储题纲系统需求与现有方案技术方案应用案例谢谢