(一)No SQL数据库系统
1.摘要
随着InternetWeb 2.0网站的兴起,非关系数据库已经成为一个非常流行的新领域,相关产品也得到了迅速的发展。传统的关系数据库已经不能适应Web 2.0网站,尤其是规模大、并发性高的Web 2.0动态网站。它暴露了许多无法克服的问题,包括以下要求。
(1)数据库的高并发读写要求。Web 2.0网站不能利用静态动态页面技术生成动态页面并根据用户个性化信息提供动态信息,因此数据库并发负载非常高,往往达到每秒数万次请求。关系数据库几乎无法处理数以万计的SQL查询,但对于数以万计的SQL写入数据请求,硬盘I/O再也负担不起了。事实上,对于普通的BBS站点来说,也需要高并发的写请求。
(2)对海量数据高效存储和访问的需求。对于大型SNS网站,每天都会有大量的用户动态。以Foreign Friend feed为例,一个月内有2.5亿用户动态。对于关系数据库,SQL查询是在2.5亿条记录的表中执行的。效率极低,甚至无法容忍。对于大型Web用户登录系统,如腾讯、盛大等数亿账户,关系数据库也很难处理。
(3)对数据库的高可扩展性和高可用性的要求。在基于Web的体系结构中,数据库是最难水平扩展的,当用户和访问应用程序系统的数量增加时,数据库通过添加更多的硬件和服务器节点来扩展性能和加载不如网络服务器和应用服务器。对于许多需要不间断服务的网站,升级和扩展数据库系统可能很麻烦,通常需要停机维护和数据迁移。为什么不能通过不断添加服务器节点来扩展数据库?
在前面提到的“三高”要求面前,关系数据库遇到了不可逾越的障碍,而对于Web 2.0网站来说,关系数据库的许多主要功能往往没有机会发挥自己的才能。
(1)数据库事务处理的一致性。许多Web实时系统不需要严格的数据库事务,对读取一致性的要求很低,在某些情况下对写入一致性的要求也不高。因此,在数据库负载较高的情况下,数据库事务管理成为一个沉重的负担。
(2)数据库的实时写入和读取。对于关系数据库,查询后立即插入一段数据,当然可以读取数据,但对于许多Web应用程序,它不需要如此高的实时性。
(3)复杂的SQL查询,特别是多表关联查询。任何一个数据量大的Web系统都是很多大型表关联查询的禁忌,而复杂的SQL报表查询是复杂数据分析类型,特别是SNS类型网站的禁忌,因此从需求和产品设计的角度出发,避免了这种情况。通常情况下,单个表的主键查询和单个表的简单条件分页查询大大削弱了SQL的功能。
关系数据库已不再适用于这些越来越多的应用场景,解决这类问题的非关系数据库应运而生。
No SQL是非关系数据存储的广义定义,打破了关系数据库和ACID理论长期统一的局面。No SQL数据存储不需要固定的表结构,通常不存在连接操作。大数据在访问大数据方面具有关系数据库无法比拟的性能优势。
2.关键技术
(1)数据模型和操作模型
在存储数据模型上,No SQL放弃了关系模型,遵循“无模式”原则。现有的No SQL数据模型分为四类:键值(键值对)、面向列(列)、面向文档(文档类型)、面向图(图类型)。在复杂性方面,键值对>列>文档类型>图,而缩放则相反。这四个数据模型基本上满足90%的应用场景。对于采用哪种数据模型,应根据应用场景的不同特点进行选择。
(2)区分
由于单机存储容量的限制和单机的过载,分区将数据分配到不同的节点上,使得数据能够分布在各个节点上,提高了数据的承载能力。
通常,并发请求随着数据量的增加而增加。当数据库I/O性能不足时,有两种解决方案:第一种是通过增加内存、增加硬盘等方法来提高单台计算机的硬件处理能力。这种方式叫作扩大规模;第二种方法是通过增加节点的存储容量来分担负载。扩展模式明显受到硬件条件的限制,不可能不加限制地增加硬件来提高性能。理论上,扩展方法可以达到线性扩展的效果,即如果机器加倍,那么承载能力就应该加倍。划分技术是扩展技术的实现,要解决的问题是如何将数据分布在不同的节点上,以及如何在每个节点上均匀地分配数据的读写请求。
许多No也是基于数据的键,并且键的某些属性决定键值存储在哪台机器上。No QL中使用的划分方法一般有两种:一种是随机分区,即数据在每个节点上随机分布,最常用的是一致散列算法;另一种是连续范围划分方法,该方法将数据按键的顺序分布在每个节点上。描述了以下两种划分方法:一致性散列算法和范围划分方法。
1)一致散列算法。
一个好的哈希算法可以保持数据的均匀分布。一致性哈希算法通过对简单哈希算法的改进,解决了网络中的热点问题。它是主流的分布式散列算法之一。
2)连续范围划分法。
若要使用连续范围分区方法对数据进行分区,需要保存一个映射表,该表指示哪些键值对应于哪台机器。类似于一致的哈希算法,相邻范围划分方法将键值分割为连续范围,指定每个数据段存储在一个节点上,然后冗余备份到其他节点。与一致性哈希算法不同的是,连续范围划分使得两个相邻的数据存储在同一数据段中,因此数据路由表只需记录某一段数据的起始点和结束点。
通过动态调整数据段与机器节点之间的映射关系,可以更准确地平衡各节点的机器负载。如果一个区段有较大的数据负载,负载控制器可以通过缩短它负责的数据段或直接减少它所负责的数据段的数量来减少它所负责的数据段的数量。通过添加监视和路由模块,可以更好地负载平衡数据节点。连续范围划分优于哈希分区,而且由于数据路由表中的路由信息是连续排序的,因此更容易实现范围查询。
3.产业地位
(1)Key-Value数据模型
Key-Value数据库使用数据模型的简单键值键到值对(如“name”“ZTE”)。该模型有两种类型:一种是在大型网站中使用缓存,以降低后台数据库的压力,提高查询速度,如memcached、Redis、TC/TT等,达到较高的读写性能;另一种是针对高读写环境,如Dynamo、Riak、Voldemort等,它们在理论上都是AP,为了达到高可用性和可扩展性,牺牲了一致性。
键值数据模型的优点是模型简单,读写速度快,缺点是存储的数据缺乏结构,只能存储简单的键值对。然而,如Redis、TC/TT等也支持其他数据类型,如List、Set、Hash等来实现一些复杂的数据存储,因此得到了广泛的应用。
(二)分析数据库系统
1.摘要
数据为王是大数据时代的特征,如何有效地从数据中挖掘价值是一个亟待解决的问题。挖掘数据的价值在于对数据进行分析。数据仓库技术是数据分析和管理的一种手段。因此,在大数据时代,数据仓库提供了前所未有的机遇。主要的IT制造商,如IBM、Oracle、SAP、EMC、Teradata等,都在大数据领域竞争,例如Oracle收购Sun、IBM收购Netezza、EMC到Greenmers、SAP到Sybase、Teradatato到AsterData等等。
显然,大数据量使得数据仓库在数据管理系统中的地位显得尤为重要。同时,由于许多数据仓库产品采用关系数据库作为存储和管理的重要核心组件,面临着许多挑战。如系统在海量数据下的可扩展性、非结构化数据的处理以及对分析的实时响应等。
2.关键技术
数据仓库系统通常由源数据层、数据采集层、数据存储层、数据应用层、元数据管理层等组成。
(1)数据采集层可以提取、转换和加载多个业务系统的数据。这些处理步骤也称为ETL过程。
(2)数据存储层负责数据的存储和管理。由于数据仓库系统对业务系统收集的大量历史数据进行管理,并在数据平台的基础上建立起大量的应用程序功能,如查询、报表、多维分析等。这就要求数据存储层不仅能够有效地存储和管理大量的业务数据,而且能够提供高效的查询访问效率。
(3)数据应用层是数据仓库系统的窗口,它将系统存储的大量数据有效、清晰、灵活地呈现给业务用户。借助数据应用层提供的分析和显示功能,可以帮助业务人员高效、方便地进行数据的统计和分析。数据应用层几乎也是业务人员与数据仓库的唯一接触点。
(4)元数据的功能是管理和存储数据的定义和描述。元数据可分为两类:一类是业务元数据,它从业务角度描述数据仓库中的数据,为用户和实际系统提供语义层。使不懂计算机技术的业务人员能够在数据仓库中“读取”数据。另一是技术元数据,它存储有关数据仓库系统技术细节的数据,并用于开发和管理数据仓库中使用的数据。业务用户和技术用户可以借助元数据管理提供的功能和应用程序,更有效地理解和使用数据仓库数据。
3.产业地位
(1)Teradata
Teradata是全球领先的企业级数据仓库解决方案提供商,Gartner的数据仓库魔术象限报告显示Teradata处于领先地位。
整个系统由三部分组成。
1)处理节点(节点)。每个节点是一个具有对称多处理器体系结构的单机,多个节点共同构成一个庞大的并行处理器系统。节点间的高速互联是通过BYNET硬件实现的。每个节点由解析引擎、访问模块处理器等组成。
PE主要用于客户端系统之间的通信和交互(通常是使用Teradata Database的应用程序的SQL请求)和访问模块处理器之间的交互。其主要功能包括任务控制。解析、优化、生成和分发查询步骤,并行化预处理和返回查询结果。通常只有一两个PE在节点上工作。(www.xing528.com)
AMP主要用于处理所有与数据相关的文件系统操作,它是没有共享体系结构的Teradata数据库的核心表示形式。通常,多个AMP在一个节点上工作,每个节点负责文件系统上不同的固定数据访问操作。
2)内部高速互联网BYNET,用于节点间通信。BYNET是硬件和一些软件进程的组合,它们处理在这组硬件上运行的通信任务,用于节点间的双向广播、复用和点对点通信。同时,BYNET还在SQL查询过程中实现合并功能(每个节点或AMP,平均分配表中的部分数据,在并行查询各节点时,将结果归纳为一定节点对查询的反馈,提高查询速度)。
3)数据存储介质(通常是磁盘阵列)。
Teradata的关键技术如下。
①数据分布。
Teradata实现了一种自动数据分配机制,通过对数据键的散列计算,将数据记录均匀地分配给每个AMP,解决了传统数据库中的“数据重组”问题。
②多维并行技术。
在语句的具体执行中,Teradata实现了多维并行技术,大大提高了执行效率。Teradata实现的并行维度包括查询并行(多个虚拟进程并行)、步骤内并行(每个虚拟进程中的多个进程)和多步并行(SQL语句的并行任务分解)。
③嵌入式数据分析。
Teradata中嵌入了各种分析函数,这些工具如下所示。a.提供了各种OLAP函数:累积和函数(CSUM)、移动平均函数(MAVG)、移动和函数(MSUM)、移动差分函数(MDIFF)、采样函数(样本)、有限函数(Quality)等。b.用户可以自定义UDF函数。c.外部厂商的产品功能,如SAS、微策略、BI、丝绸之路、SAP等。
4)数据保护机制。
Teradata通过拆分(集群)、回滚(回退)和锁定保护来实现数据保护。
①连接共享磁盘阵列的两个或多个数据库节点,具有以下特点:一个碎片包含2~8个节点,其数量在减少,热备用节点逐渐成为标准配置,如果一个节点停机,该节点上的AMP将迁移到其他节点,系统仍能运行;但是,切分也存在一些缺点,即数据库在迁移过程中会被重新启动,性能会受到破坏。
②回滚到同一集群(集群)中的其他AMP,以保存相同的记录以包含数据。它具有以下特点:如果AMP失败并且AMP上的数据仍然可用,用户可以继续使用回滚表而不会丢失任何数据;但是,回滚模式有额外的开销,包括2次磁盘空间、2次插入和2次更新。
③Teradata还可以通过锁定机制保护数据,防止多个用户同时修改同一数据,从而影响数据的完整性。Teradata的锁机制可以工作在数据库、表和记录上,在请求操作时自动加载,在请求完成后自动释放,用户可以根据需要更改锁的类型。
(2)Oracle Exdata
Oracle Exdata是一种数据库集成机器,它支持OLTP和OLAP的混合工作负载。它包括一整套数据库软件、服务器、存储设备、网络设备等。该设计具有高度的可扩展性、安全性和冗余性。
Oracle Exdata最初是由Oracle与HP合作推出的,Oracle负责数据库、操作系统和存储软件设计,惠普负责硬件设计。甲骨文收购Sun后,整合了Sun硬件和数据库软件的优势,放弃了与惠普的合作,推出了三大系列的Oracle ExadataV2。
(3)IBM Netezza
Netezza是一台为数据仓库设计的一体机,成立于2001年,2010年被IBM收购。它包括三种主要产品:1Netezza 100,这是一台只为企业用户体验或试用而生产的一台机器中最简单的配置之一。没有高可用性的特点,当然最大的卖点是低价。2Netezza 1000是Netezza的主要产品,用于数据仓库和数据分析。在IBM收购Netezza之前,该模型被命名为Netezza Twin Fin。3Netezza HCA和Netezza 1000在技术架构上没有太大的差别。该产品的卖点是用于数据归档、分析和灾难恢复的大容量(高达10 PB)。
Netezza集成计算机主要包括四个关键部件:SMP主机、S-叶片、磁盘存储柜和网络结构。
1)SMP主机。由两台一样性能的Linux服务器组成,一台是活动的,另一台是备机。BI应用程序的请求会通过活动的SMP主机提交。SMP主机编译并且生成最优的可执行代码,并分发给S-Blades执行。最后收集并汇总SBlades返回的结果给用户。
2)S-Blades。S-Blades是Netezza的智能的处理节点,也是Netezza魔法发生的地方。每个S-Blades都是一台独立的服务器,包含了一台标准的刀片服务器和一块Netezza特有的数据库加速卡。刀片服务器和数据库加速卡通过IBM的Sidercar技术整合后,它们在逻辑上和物理上都成为一个整体。Netezza 1000的每个S-Blades节点包括2个四核的CPU、4个双核的FPGA引擎以及16 GB的内存。
3)磁盘储存柜。所述磁盘存储柜包含高密度、高性能磁盘。每个磁盘包含一个表的一块数据,而磁盘上的一个表的所有数据块组合成一个完整的表数据。每个磁盘还包含另一个磁盘上的数据映像,磁盘阵列柜通过高速的通道(3 Gbit/SAS)和S-Blades连接在一起。
4)网络结构。Netezza集成计算机的组件通过高速网络连接。可以分两种网络:一种是IP网络;另一种是SAS存储网络,DIP网络服务于SMP主机和S-叶片节点之间以及不同S-叶片节点之间的数据通信。IP网络协议经过深入定制,针对Netezza的应用环境进行了专门的优化,可以同时支持数千个节点之间的大量数据传输。
在Netezza集成计算机的所有部分都有冗余备份。例如,SMP包含两个SMP主机以形成主-备用关系,而磁盘则包含镜像数据备份。每个刀片服务器基地包含6个S-叶片,它可以透明地将失效的S-叶片切换到正常的S-叶片,而不需要一个单一的故障点,从而确保了整体的高可用性。
关键技术如下。
FPGA数据流处理。Netezza具备高性能的一个重要因素是引入了数据库加速卡和数据流处理概念。这些都包含在S-Blades里面,它们极大地增强了一体机数据处理能力。
1个S-Blades包括1个刀片服务器(8个CPU核)和1块数据加速卡(8个FPGA核)。正常情况下,在Netezza 1000一体机中1个S-Blades管理8个数据片。1个CPU核、1个FPGA核和1个数据片组成了一个逻辑的处理单元,称为小处理机。每个小处理机都独立负责一个数据片的处理,当运行查询时,1个S-Blades中就有8个这样的逻辑处理单元并行处理8个数据片。
分区。Netezza是一个分区的数据库,一个表的数据分布在所有的数据片上。一条记录存储在哪个数据片上是由分区键决定的。有两种方式制定分区键:一种是在定义表的时候可以指定一个或多个列作为表的分区键,另一种是用随机的方式(round-robin)将记录分区。
犯罪现场Netezza处理系统使用行存储,而不是像其他数据仓库产品那样使用列存储。列存储提供了两个好处:一个是用于数据压缩,另一个是在只需要提取表的几个列时大大减少I/O开销。然而,列存储的最大问题是它不利于表之间的连接。对于Netezza来说,这两点(AMPP架构和FPGA数据流处理)可以显著降低I/O开销,因此Netezza使用行压缩来保持高性能的表间连接。同时,利用体系结构和硬件的优点,提高了I/O处理性能。
压缩。数据仓库中的性能瓶颈经常出现在磁盘上。数据压缩存储的优点是可以降低磁盘的I/O压力。FPGA引擎负责将数据解压缩为可读内容。Netezza压缩对用户是完全透明的,并且支持所有数据类型,无须任何调优和管理。压缩算法将记录按列划分为不同的数据流,分别对每一列流进行压缩,但在存储时保持行结构。该压缩算法保证了4~32倍的压缩比。大大减少了磁盘I/O上的压力。
贴图区。Zone Maps是Netezza的一种独特技术,它让您知道在从磁盘读取数据之前,数据块是否包含在查询中的数据,如果不是,则直接跳过该数据块。这种方法大大减少了磁盘的I/O开销,大大提高了查询的性能。传统的数据仓库需要先读出数据块,然后判断是否需要数据。区域映射保存每个表的每个数据块上每个列的最大值和最小值。默认情况下,整数、日期和时间类型的列生成区域地图统计信息。查询时,系统首先检查区域地图,以确定数据库是否符合标准,是否需要根据区域地图上数据库的范围读取数据库。由此,可以避免大量不合格的数据库通过区域图读取,从而提高查询性能。
(4)Sybase IQ
Sybase IQ是一个用于高级分析、数据仓库应用程序和商业智能环境的分析关系数据库管理系统。它可以处理大量结构化和非结构化数据。Sybase IQ采用灵活的PlexQ MPP结构、全列存储和高效的数据压缩、专利索引技术和先进的查询优化程序,并支持全文检索、数据库分析、Hadoop和R语言的集成。结合第三方BI工具和数据挖掘工具,Sybase IQ构成了一个强大而完整的大数据分析平台。
基于成熟的PlexQ技术的Sybase IQ是用三层架构构建。
1)基本层:数据库管理系统。这是一个完全共享的MPP分析DBMS引擎,是Sybase IQ最大的独特优势。
2)第二层:分析应用服务层。它在C#和Java数据库中提供API,并支持与外部数据源的集成和联合,包括与Hadoop的四种集成方法。
3)顶层:Sybase IQ生态系统。它由四个强大而多样的合作伙伴和经认证的ISV(独立软件供应商)应用程序组成。
Sybase于2010年推出的Sybase IQ 15.3使用了一种完全共享的PlexQ技术,重新定义了企业范围的业务信息。可以很容易地支持各种复杂的分析风格,包括大量数据集、大量并发用户和独特的工作流,这极大地增加了好处。与其他MPP解决方案不同,Sybase IQ的PlexQ网格技术可以动态管理、可扩展,并专门用于不同组和进程的一系列计算和存储资源。这使得以更低的成本支持不断增长的数据量和快速增长的用户社区变得更加容易。
关键技术如下。
列存储和数据压缩。一方面,数据以列的形式存储在Sybase IQ中,因此整个数据库都会自动进行索引,而不需要为每个列创建不必要的索引。在传统数据库中,为提高查询性能而建立的索引所占用的磁盘空间往往是数据本身所需的3~10倍。Sybase IQ存储数据占用的磁盘空间通常仅为原始数据文件的40/60,是传统数据库占用空间的一小部分。另一方面,Sybase IQ按列存储比在传统关系数据库中具有更高的压缩效率,因为同一列中的所有数据字段都具有相同的数据类型,从而大大降低了存储成本。此外,使用列存储可以大大提高数据查询和分析的速度。Sybase IQ列存储易于压缩,大大提高了数据吞吐量,从而减少了查询响应时间。
并行化。Sybase IQ在处理查询时支持两种类型的并行化。①操作符间并行化:查询树中多个查询节点的并行执行。采用流水线并行和Bushy并行两种不同的并行模型,实现了算子间并行化。对于流水线并行化,子节点生成第一行后,父节点开始生成更多行。对于Bushy并行化,两个查询节点彼此独立执行,而无须等待对方的数据。②运算符并行化:查询节点内多个线程的并行执行。运算符内并行化是通过将输入行划分为子集并将数据子集分配给不同的线程来实现的。Sybase IQ大量使用运算符和内操作符并行来优化查询性能。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。