分布式数据库选型论证
第一章主流数据库技术介绍
一、关系型数据库系统
是一种基于关系模型的数据库管理系统。这种关系模型最初是由埃德加•科德在IBM的实验室提出的。目前很多主流的数据库都是遵循这种关系模型。这种关系型的数据库管理系统从上世纪80年代开始被广泛应用于存储财务数据、制造业数据、个人信息数据,互联网各类应用的数据。目前主流的RDBMS有Oracle Database、Microsoft SQL Server、MySQL、PostgreSQL等。
关系型数据库的特点主要有一个数据库由多张表构成、每张表都有用户定义的表结构信息(schema)来描述表格的结构。每张表由行构成,每行包含若干列,列的属性由表格的schema定义。关系型数据库可以解释为面向行的数据库,每张表具有横向的扩展性,数据表是面向行增长的,而列的模式是相对固定的。其功能主要包括以下几点。
数据的检索功能:SQL语言的检索功能主要包括基于主键、二级字段的查询、聚合查询、表连接查询等功能。事实上数据库的查询功能是SQL语言里被使用最多的功能。
1).数据的操作功能:包括数据的插入、删除、修改。数据的操作以行为单位,可以修改某具体行的特
定列的值,也可以批量的对一组符合条件的行数据进行操作。
2).事务处理的功能:数据库事务是数据库管理系统中执行时一个独立的单位,一般事务由一组数据库管理系统中的指令组成。事务之间相互独立,事务具有ACID四个重要的特性:原子性(Atomicity)、一致性(Consistency)、隔离性(isolation)和持久性(durability)。事务也是区分很多NoSQL与SQL数据库的重要特性之一。
3).表结构的定义功能:数据库定义语言(DDL)是用于创建表,修改以及删除表结构(schema)的。DDL中也包括了对某个字段建立索引的功能。
二、NoSQL技术
1、Key.Value数据库(键值数据库)
Key.Value数据库中对value(数据)基本上没有做什么限制,可以在value 上存储任何格式的数据。Key.Value数据库的数据模型最为简单,因此其一般具有很好的性能、可扩展性、灵活性。典型的代表有亚马逊的DynamoEll]数据库、RedisGoogle的LevalDB等。Key—Value只支持对数据的一些简单的操作:Key—Value对的插入、删除、更新。根据实现的不同Key可以有序也可以无序,key有序意味着可以进行key的范围查。Dynamo采用的是最终一致性的模型、亚马逊公司将它用在对数据一致性要求不高的购物车的应用中。
2、面向列的数据库
这类数据库不仅具有传统关系型数据库所具有横向(面向行)的可扩展性也支持面向列的动态可扩展性,它不需要像传统的关系型数据库需要使用DDL才能修改表结构以及要遵循每行的列属性要一致的规范。这类数据库从GoGgle的BigTablet开始,之后出现了几种开源的数据库如HBase、Cassandra。HBase是BigTable的开源实现,两者有很多相同的设计理念,两者的表结构里面都有一个列簇(Column family)的概念,每个列簇对列的个数和格式基本没有限制,同时每列数据都附上了时间戳的概念,这使得数据列值可以拥有多个版本。BigTable和HBase从底层实现来看,本质上也是一个分布式的Key—Value系统,只不过这里的Key的结构是一个包含了表名、主键名、列簇名、列名和时间戳的多元组。
3、Graph数据库(图形数据库)
同Key—Value数据库一样,Graph数据库对数据的value也不做限制。Graph 数据库的存储单元有三个:节点、关系、属性。这类数据库是用来存储那些更适合用图来描述的数据,例如社交网络的关系数据、交通道路节点的数据或者一些网络拓扑数据等。Graph数据库设计的关键是如何描述数据点之间连接关系,相对于关系型数据库的关系模型,这种图数据模型具有大量复杂、互连接、低结构化的特点,而我们知道在关系模型中表的连接操作效率往往是比较低的。目前相对比较成熟的开源Graph数据是Ne04Jti。n,Ne04J是一个用Java实现的兼容ACID的图形数据库,Ne04J实现了一个非常高效的图形引擎用来实现快速的面向
图形数据的各类操作。由于这类图形数据结构模型的复杂性,使得图形数据库具有较大的可扩展性问题,要想实现分布式的图形数据库是非常困难的,这也是图形数据库一直未真正流行开来的一个重要的原因。
4、文档数据库
文档数据库是面向文档的数据库,是用来存储、检索、管理文档信息的数据库,存储的文档结构大部分是半结构化,如XML、JSON文档等。这类数据库的所存储的文档数据结构往往是由具体的应用决定的,文档数据库比较适用于那些不频繁对已经存在的文档做修改的应用。这一类型数据库的代表是109en团队开发的MongoDB和Apache Couch DB。与传统的关系型数据库采用表格的形式存储数据不同,MongoDB使用的是类似JSON格式的文档结构来存储数据,这种数据结构的一个好处是可以实现动态的表结构(schema)。尽管MongoDB属于NoSQL数据库,但是MongoDB实现了很多传统关系型数据库的功能:(1)含关键字字段查询、范围查询,正则表达式查询在内的丰富查询功能;(2)对二级索引的支持;(3)数据库服务端运行自定义Javascript脚本的功能;(4)集成MapReduce实现数据聚合分析的功能;(5)基于数据分片与数据备份机制的分布式存储功能。
图1.1 数据模型复杂性与数据规模的关系示意图
展示了不同数据模型复杂性与数据规模的关系。图中根据数据存储模型的复
杂性从低到高依次为Key.Value数据库、类BigTable数据库、描述复杂图模型的图形数据库。这张图从一定程度上反映了数据的存储建模与数据规模的关系。
第二章主要分布式数据库技术介绍
一、Hadoop技术架构
hadoop是一个免费开源的分布式系统基础架构,它最原始的版本是由Apache 基金会开发的。Hadoop核心框架主要包括:HDFS和MapReduce。HDFS提供了海量数据存储,MapReduce则提供了海量数据计算和分析过程目前市面上免费开源的Hadoop版本主要有三个,分别是:Apache(最原始的版本,所有发行版均基于这个版本进行改进)、Cloudera版本(Cloudera’S Distribution Including Apache Hadoop,简称CDH)、Hortonworks版本(Hortonworks DataPlatform,简称HDP)。
Hadoop 是一个分布式处理的软件框架,相对于单机运行,它更善于处理大数据量的问题。实现了 Google 的 MapReduce 编程模型和存储框架提出的将应用程序分割成许多小的并行的程序单元的要求,并且这些单元在任何节点上都可以执行。在 MapReduce 中,要分清“作业( job)”和“任务( task)”。Job 是还未执行的的应用程序,它处于准备阶段。而 task 则是正在各个计算节点上执行的工作单元,是从一个作业划分出来已经实施的程序部分。此外,Hadoop 提供的分布式文件系统( HDFS, Hadoop Distributed File System)主要负责各个节点上的数据存储,它是实现高吞吐率的数据读写功能的基础。
图2.1 Hadoop结构图
hbase官方文档Hadoop 在分布式存储和分布式计算方面为了可以提高速率和准确度,都是采
用了主/从( Master/Slave)的架构模式,一系列在集中运行的后台( deamon)程序就是这些要求的根本保障。根据分工不同可分为以下几个部分组成:NameNode、 Secondary NameNode、DataNode、Task Tracker、JobTracker。如上图2.1所示的,NameNode、Secondary NameNode、 Job Tracker 运行在 Master 节点上, TaskTracker 和 DataNode 运行在 Slave 节点上,本机的数据都尽量交给这些数据处理程序来直接处理,以节约时间成本。
2、HDFS简述
HDFS(Hadoop Distributed File System)是分布式计算中数据存储管理的基础。HDFS 的体系结构是主/从( Master/Slave)模式,即一个 NameNode 和多个 DataNode,如图 2.2 所示。 HDFS 将数据文件分割成大小各异的数据块( Block),分散存储于各个 DataNode 中,并按照“一次写入、多次读取”的模式进行读写。用户如果要对数据进行操作,都有要先访问 NameNode,它会处理用户的请求,之后给 DataNode 分配具体任务,也就是说 NameNode 负责调度安排, DataNode 实施具体工作。
图2.2 HDFS结构示意图
HA(High Availability),即高可用性。 HA 为系统对外正常提供服务时间的百分比,也即是在出现故障的情况下还能保证数据存储的可靠性的程度。 HDFS 的可靠性能够利用平均无故障时间(MTTF)来衡量,即为 HDFS 正常服务的平均运行时间; HDFS 的可维护性是利用平均维护时间(MTTR)来衡量,即 HDF
S 从不能正常服务到再次正常服务之间所需的平均维护时间。 HDFS 的 HA 可精确定义为如下公式:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论