数据库集群的并行压缩海量数据装载方法

文档序号:6383196阅读:197来源:国知局
专利名称:数据库集群的并行压缩海量数据装载方法
技术领域
本发明属于数据库技术领域,特别涉及一种数据库集群的并行压缩海量数据装载方法。
背景技术
在数据库集群的搭建过程中,涉及到海量数据的装载。现有的海量数据装载方法存在以下一些问题1、使用数据迁移工具或备份恢复工具依次准备集群的各个数据库节点的数据相当耗时,同时当前缺少一种直接向数据库集群装载数据的公开方法;2、普通的数据插入SQL语句在进行数据装载时需要做大量的额外操作,例如数据类型转换、数据有效性验证等,影响了数据装载的性能;3、存储在服务器CPU、网络等资源不能充分利用。

发明内容
本发明的目的在于克服现有技术的不足,提供一种能够充分利用资源且装载速度快的数据库集群的并行压缩海量数据装载方法。本发明解决其技术问题是采取以下技术方案实现的一种数据库集群的并行压缩海量数据装载方法,包括以下步骤步骤1:建立包括数据装载工具、驱动程序和数据库集群的并行压缩海量数据装载的组件架构;步骤2 :客户端通过数据装载工具和驱动程序向数据库集群发送数据装载命令,获取各个数据库节点的连接信息后,连接各个数据库并且发送需要装载的数据;数据库集群服务器给客户端提供集群各个数据库节点的连接信息以及各个表的相关信息;数据库节点接收客户端发送过来的数据并存储下来。而且,所述数据装载工具用于解析文本数据文件或数据库的单个表数据,组织成装载数据的SQL语句,通过调用驱动程序API将数据装载到数据库集群的指定表中。而且,所述的驱动程序提供访问数据库集群的应用程序编程接口供客户端通过SQL来访问数据库集群;该驱动程序包括驱动程序API、连接管理、Statement对象、句柄管理、数据类型转换、资源缓存和网络通信协议模块。而且,所述的数据库集群由数据库集群服务器、元数据库和数据库节点构成。而且,所述驱动程序采用海量数据装载通信协议和Insert Bulk语法进行装载数据处理,其处理过程为客户端的驱动程序首先通过数据库集群服务器获得各个数据库节点的连接信息以及表的结构,然后通知数据库节点将要装载的表、列、数据类型以及海量数据装载选项,数据库节点接收到装载请求后将目标表加锁并验证装载列及其数据类型的合法性,验证成功后等待接收数据,接下来客户端以结果集的形式向各个数据库节点发送数据,发送完后以命令字结束,数据库节点返回成功装载的行数或错误信息。而且,所述客户端通过驱动程序向数据库集群发送数据时,采用并行优化装载方法进行,该并行优化装载方法为对于单节点数据的装载,驱动程序采用双缓冲区的模式实现了数据的异步传输,当主线程向某个节点装载数据时,首先将数据存入数据缓冲区,在数据缓冲区满了以后,驱动程序会将数据缓冲区中的数据移动到发送缓冲区,发送线程发现发送缓冲区中存在数据后,负责将数据发送到后台,从而实现数据的异步传输。而且,所述并行优化装载包括复制表并发装载和循环表、哈希表并发装载而且,所述客户端通过驱动程序向数据库集群发送数据时,采用压缩优化处理方法进行处理,包括驱动程序的压缩发送数据处理和服务器端的接收与解压数据处理。而且,所述的压缩发送数据处理方法包括以下步骤⑴等待发送缓冲区中存在数据;⑵如果发送缓冲区中的数据少于最小压缩值,则构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴;⑶否则①如果CPU空闲率较高,则采用高压缩比压缩算法对数据进行压缩;②否则采用高速压缩算法对数据进行压缩;③如果压缩后的数据比原数据小,则构造压缩数据包并标记压缩类型;将压缩数据包发送到服务器,跳转到步骤⑴;④否则,构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴。而且,所述的接收与解压数据处理方法包括以下步骤⑴服务器端等待接收数据包;⑵接收到一个数据包;①如果数据包属于压缩包,则判断压缩包所使用的压缩算法;根据压缩算法对压缩包进行解压;得到解压后的数据,跳转到步骤⑶;②如果数据包不属于压缩包,则获取数据包中的数据,跳转到步骤⑶;⑶将数据存储到表中;⑷跳转到步骤⑴。本发明的优点和积极效果是本发明通过建立数据装载工具、驱动程序和数据库集群三级架构的数据装载方法,使用海量数据通信协议解决了装载速度不够快的问题,并通过并行优化处理和压缩优化处理,充分利用服务器的多CPU和网络资源并融合在海量数据装载过程中,进一步优化了性能,从而提升了数据库集群的搭建速度。本方法不仅适用于神通数据库集群,也可供其他数据库集群在实施数据装载方案或进行装载性能优化时使用。


图1是本发明的数据库集群的数据装载组件架构图;图2是本发明的驱动程序架构图;图3是本发明的数据库集群拓扑图;图4是本发明的数据库集群数据装载流程图;图5是本发明的海量数据装载通信协议处理流程图;图6-1是本发明普通的记录行结构示意图;图6-2是本发明大对象的记录行结构示意图
图7是本发明的数据集结构示意图。
具体实施例方式以下结合附图对本发明实施例做进一步详述一种数据库集群的并行压缩海量数据装载方法,包括以下步骤步骤1:建立包括数据装载工具、驱动程序和数据库集群的并行压缩海量数据装载的组件架构。在向数据库集群装载数据时,需要建立如图1所示的组件架构,包括数据装载工具、驱动程序和数据库集群。通过该组件架构,即使在无法获知成熟商业数据库集群产品的组件架构情况下,数据库集群也可以像数据库一样有直接操作它的驱动程序,通过驱动程序执行数据装载的SQL语句,另外提供调用驱动程序的数据装载工具,将数据文件或其他数据库的数据最终装载到数据库集群中。下面对组件架构的各个部分分别进行说明I、数据装载工具用于解析文本数据文件或数据库的单个表数据,组织成装载数据的SQL语句,通过调用驱动程序的API接口将数据装载到数据库集群的指定表中。数据库装载工具的语法为cimp-M host port user password dbname—0 host port user passworddbname-Qquery-T tabIename-N rownumcimp-F fiIename-E coIend-V rowend-c enclose—r—O host portuser passworddbname-T tabIename其中,cimp为数据装载工具可执行程序名称,各个参数说明如下-M :指定源数据库的主机地址,端口,用户名,密码,数据库名。-O :指定集群服务器的主机地址,端口,用户名,密码,数据库名。-Q :在源数据库中执行的查询语句。-F :数据文件名,包含文件路径。-R :装载结果文件名。-E :列分隔符,该参数可选,默认为\t。-V :行分隔符,该参数可选,Windows环境默认为\r\n, Linux环境默认为\n。-c :列引用符,包含在此符号内的数据都当成一列。该参数可选,默认不使用该参数。-r :是否去掉文件首行,该参数可选,不指定该选项时不去掉文件首行,指定该选项则会去掉文件首行。-T :指定往集群服务器迁移的表名。-N:设置往集群的表迁移数据时,分批提交事务所间隔的记录行数,默认为100000。2、驱动程序驱动程序是一个访问数据库集群的应用程序编程接口,开发人员可以使用编程语言通过SQL来访问数据库集群。如图2所示,驱动程序架构包括驱动程序API、连接管理、Statement对象、句柄管理、数据类型转换、资源缓存和网络通信协议模块,各个模块的功能如下
驱动程序AP1:驱动程序的对外接口,功能由连接管理、Statement对象和句柄管理三个模块实现。连接管理集群或数据库的连接建立和断开、发送SQL语句、接受查询结果等操作由连接管理模块进行封装。Statement对象参数的绑定和输出查询结果的内存定义由Statement对象完成。句柄管理驱动程序运行时所需的服务器、会话、上下文句柄由句柄管理模块进行分配和释放。数据类型转换实现了用户输入的编程语言数据类型和服务器端数据类型的相互转换,在参数绑定和执行阶段将编程语言数据类型转换为SQL语句的字符串,实现数据的插入、删除和更新等功能。资源缓存实现对可重用资源的缓存,对提升性能和减少响应时间有一定作用。网络通信协议用于实现驱动程序与集群或数据库服务器交互的功能,能够向服务器发送命令并接受不同类型的数据包。3、数据库集群如图3所示,以神通数据库集群为例,数据库集群包括以下三个组成部分神通数据库集群服务器它是整个集群的控制者、协调者和管理者,其对外提供统一逻辑数据库访问接口,对内负责集群内部的管理和协调工作。元数据库元数据库记录了集群所有的元信息。元信息包括数据的分布信息、各个节点的信息(IP、端口、驱动程序连接串等)、数据库对象(表、索引、视图等)信息、负载信息。数据库节点分别用于存储数据。步骤2、并行压缩海量数据装载步骤客户端通过数据装载工具和驱动程序向数据库集群发送数据装载命令,获取各个数据库节点的连接信息后,同时连接各个数据库并且发送需要装载的数据;数据库集群服务器给客户端提供集群各个数据库节点的连接信息以及各个表的相关信息;数据库节点接收客户端发送过来的数据并存储下来。如图4所示。本步骤的具体流程为⑴数据装载工具调用驱动程序与数据库集群服务器建立连接,获取各个数据库节点的连接信息;⑵驱动程序向集群服务器获取目标表的描述信息及其所对应的数据库节点列表;⑶驱动程序将数据装载工具发来过的数据根据目标表的描述信息组织成数据集;在本步骤中,数据集结构由记录行构成,记录行结构包括普通的记录行结构和大对象的记录行结构,分别如图6-1及图6-2所示。在普通的记录行中,每个属性前带有当前属性的长度而不是使用分隔符分割,因此不用进行字符转义;传送数据使用二进制形式节省解析字符串的时间,并支持最小化日志。大对象的记录行结构的数据比较特殊,在行数据内部用-1占位,没有数据内容;大对象数据内容放在普通列数据的后面。数据集的结构如图7所示,其中大对象数据附加在后面。⑷驱动程序建立与目标表对应的各个数据库节点的连接,并分别向它们发送开启事务命令,只要有一个数据库节点连接失败,转第(11)步;
(5)数据库集群服务器对目标表加排它锁;(6)驱动程序将数据集发送给数据库节点,数据库节点将数据存储下来,并向驱动程序返回存储成功或者存储失败的消息;(7)驱动程序间隔一段时间判断是否与各个数据库节点连接正常,如果都连接正常,转第⑶步;如果存在连接失败的情况,则终止当前的数据装载向其他连接正常的数据库节点发送回滚事务的命令,转第⑶步;(8)如果都存储成功,驱动程序分别向目标表对应的各个数据库节点发送提交事务命令;如果有数据库节点存储失败,发送回滚事务的命令;⑶数据库集群服务器解除目标表的排它锁;(1Φ如果继续数据装载,转第⑵步;如果数据装载结束,转下一步;(11)驱动程序断开与各个数据库节点的连接并释放资源;(12)数据装载工具调用驱动程序断开与集群服务器的连接并释放资源。在步骤(6)中,本驱动程序采用如下三种方式提高海量数据装载的性能I、驱动程序采用海量数据装载通信协议和Insert Bulk语法进行装载数据处理。由于在搭建集群环境时,需要装载的数据量往往相当大,普通的Insert等SQL语句进行数据装载效率比较低,索引不能自动维护,因此,本发明的网络通信协议采用海量数据装载通信协议和Insert Bulk语法,将数据批量发送给各个数据库节点。海量数据装载通信协议采用传送结果集的形式传送数据,避免了语法分析过程。数据库后台接收数据以后,通过字段规格解析输入记录,转换输入字段数据到目标列数据类型,并构造列元组。列元组通过底层接口构造数据页面并直接插入到数据库中,绕过通常的数据处理。因此在数据量比较大时,该方法比通常的Insert语句要快得多。另外,该方法还可以使用最小化日志方法减少事务日志生成,以提高性能。如图5所示,装载数据时,客户端的驱动程序首先通过数据库集群服务器获得各个数据库节点的连接信息以及表的结构,然后通知数据库节点将要装载的表、列、数据类型以及海量数据装载选项(Insert Bulk)。数据库节点接收到装载请求后将目标表加锁并验证装载列及其数据类型的合法性,验证成功后等待接收数据,接下来客户端以结果集的形式向各个数据库节点发送数据,发送完后以’C’命令结束,数据库节点返回成功装载的行数或错误信息。Insert Bulk 语法表示为INSERT BULK tab I ename ({co lname type}[,…])[WITH (hint [,...])]hint::=ORDER({column[ASC|DESC]}[,... n])IROWS_PER_BATCH=bbIMAINTAIN_INDEX={SINGLEROW|REBUILD|MERGE}上述语法表达式中的参数说明如下tab I ename :装载目标表的名字。colname:列的名字。列的顺序说明了接下来装载数据的顺序。type:列的数据类型。ORDER (column [ASC | DESC] [,. . . η]):装载的数据排序次序。如果根据表中的聚集索引对要装载的数据排序,则可提高海量数据复制的性能。如果数据按不同次序排序,或者该表没有聚集索引,则将忽略ORDER提示。提供的列名必须是目标表中的有效列。默认情况下,假设数据没有排序。R0WS_PER_BATCH 每批数据的行数。MAINTAIN_INDEX :选择索引维护方式。SINGLER0W为每装载一行数据向索引中插入一项;REBUILD为所有数据装载完毕后,重建索引;MERGE为装载数据过程中维护一个临时索引,装载完毕后合并原索引与临时索引。驱动程序用户编程的基本流程为⑴初始化驱动程序的运行环境;
⑵分配环境句柄、语句句柄、服务器句柄、会话句柄等数据结构;⑶建立与数据库集群或数据库的连接以及创建用户会话;⑷通过SQL语句与数据库集群服务器或数据库交互,然后对获取的数据进行处理;(5)结束用户会话,断开驱动程序接口与数据库的连接;(6)释放在程序中所分配的各类句柄和资源。一个SQL语句在驱动程序应用程序中的执行步骤如下⑴准备SQL语句;⑵在SQL语句中绑定需要输入到SQL语句中的变量;⑶执行SQL语句(对于DDL语句到这一步就完成了一个语句的执行);⑷描述SQL中的输出的数据;(5)定义输出变量(对于DQL语句,即SELECT的查询语句,需要定义一定数量的变量用来接受所选择列的数据,即建立SQL语句所返回的数据与应用程序中变量的关系);(6)获取数据,把用SELECT选中的记录的数据赋予应用程序中的变量。2、并行优化处理方法由于在进行数据装载时,配置比较高的服务器的CPU使用率不是很高,因此,为了充分利用多CPU资源,驱动程序采用并行技术对数据装载进行优化,以此提高海量数据装载的速度。其具体方法为对于单节点数据的装载,驱动程序采用双缓冲区的模式实现了数据的异步传输,当主线程向某个节点装载数据时,首先将数据存入数据缓冲区,而不用等待数据传输到服务器端。在数据缓冲区满了以后,驱动程序会将数据缓冲区中的数据移动到发送缓冲区。发送线程发现发送缓冲区中存在数据后,会负责将数据发送到后台,从而实现了数据的异步传输。并行优化装载包括复制表并发装载和循环表、哈希表并发装载。 复制表并发装载复制表是指,表在集群中每个节点的数据都是相同的。通过单节点异步传输发送数据,复制表可以实现并发装载,其装载流程如下(I)主线程A.数据装载工具通过驱动程序接口载入一行数据B.驱动程序依次将数据载入所有节点a.对于每个节点1.将数据放入节点对应的数据缓冲区中 如果数据缓冲区已满,则
a)将数据缓冲区中的数据移动到发送缓冲区中b)通知对应的工作线程发送数据ii1.装载下一个节点,直到处理完所有节点(2)每个节点对应的工作线程A.等待发送缓冲区中存在数据B.将数据发送到服务器C.跳转到A循环表、哈希表并发装载循环表和哈希表是指表的数据会分散到集群的不同节点中。循环表的数据分配方式是将数据按先后顺序分配到各个节点,哈希表的数据分配方式是通过哈希函数计算数据需要分配到哪个节点。通过单节点的异步发送数据,循环表和哈希表可以实现并发装载,其装载流程如下(I)主线程A.数据装载工具载入一行数据B.如果是循环表,则a.通过累加节点号得到当前要载入的节点C.如果是哈希表,则a.通过哈希函数计算当前要载入的节点D.将数据放入要载入节点的数据缓冲区中E.如果数据缓冲区已满,则a.将数据缓冲区中的数据移动到发送缓冲区中b.通知对应的工作线程发送数据(2)对于每个节点对应的工作线程A.等待发送缓冲区中存在数据B.将数据发送到服务器C.跳转到 A。3、压缩优化处理方法由于集群的数据装载属于大数据量操作,网络负载较大,当客户端和服务器(数据库节点)处理速度较快时,网络传输很容易成为装载的瓶颈。对此,驱动程序可以通过对数据进行压缩,将网络的压力部分转移到尚有余力的CPU上,充分利用计算机资源减少数据的传输量,降低网络负载,以提升数据装载的整体性能。驱动程序可以通过配置参数COMPRESS MIN_SIZE控制何时使用压缩,只有要发送的数据大于COMPRESS_MIN_SIZE时才尝试对数据进行压缩。如果用户不想使用压缩,可以将该配置参数设置为一个较大的值。为了能够在各种运行环境下都取得最优的装载性能,驱动程序采用自适应压缩算法,根据运行环境和数据压缩效果的不同会自动选择不压缩,高压缩比压缩或高速压缩。驱动程序所采用的压缩发送数据流程如下⑴等待发送缓冲区中存在数据;⑵如果发送缓冲区中的数据少于最小压缩大小COMPRESS_MIN_SIZE,则构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴;⑶否则
①如果CPU空闲率较高,则采用高压缩比压缩算法对数据进行压缩;②否则采用高速压缩算法对数据进行压缩;③如果压缩后的数据比原数据小,则构造压缩数据包并标记压缩类型;将压缩数据包发送到服务器,跳转到步骤⑴;④否则,构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴。在服务器端(数据库节点),服务器端接收与解压数据流程如下⑴服务器端等待接收数据包;⑵接收到一个数据包;①如果数据包属于压缩包,则判断压缩包所使用的压缩算法;根据压缩算法对压缩包进行解压;得到解压后的数据,跳转到步骤⑶;②如果数据包不属于压缩包,则获取数据包中的数据,跳转到步骤⑶;⑶将数据存储到表中;⑷跳转到步骤⑴。需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式
中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
权利要求
1.一种数据库集群的并行压缩海量数据装载方法,其特征在于包括以下步骤 步骤I :建立包括数据装载工具、驱动程序和数据库集群的并行压缩海量数据装载的组件架构; 步骤2 :客户端通过数据装载工具和驱动程序向数据库集群发送数据装载命令,获取各个数据库节点的连接信息后,连接各个数据库并且发送需要装载的数据;数据库集群服务器给客户端提供集群各个数据库节点的连接信息以及各个表的相关信息;数据库节点接收客户端发送过来的数据并存储下来。
2.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述数据装载工具用于解析文本数据文件或数据库的单个表数据,组织成装载数据的SQL语句,通过调用驱动程序API将数据装载到数据库集群的指定表中。
3.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述的驱动程序提供访问数据库集群的应用程序编程接口供客户端通过SQL来访问数据库集群;该驱动程序包括驱动程序API、连接管理、Statement对象、句柄管理、数据类型转换、资源缓存和网络通信协议模块。
4.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述的数据库集群由数据库集群服务器、元数据库和数据库节点构成。
5.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述驱动程序采用海量数据装载通信协议和Insert Bulk语法进行装载数据处理,其处理过程为客户端的驱动程序首先通过数据库集群服务器获得各个数据库节点的连接信息以及表的结构,然后通知数据库节点将要装载的表、列、数据类型以及海量数据装载选项,数据库节点接收到装载请求后将目标表加锁并验证装载列及其数据类型的合法性,验证成功后等待接收数据,接下来客户端以结果集的形式向各个数据库节点发送数据,发送完后以命令字结束,数据库节点返回成功装载的行数或错误信息。
6.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述客户端通过驱动程序向数据库集群发送数据时,采用并行优化装载方法进行,该并行优化装载方法为对于单节点数据的装载,驱动程序采用双缓冲区的模式实现了数据的异步传输,当主线程向某个节点装载数据时,首先将数据存入数据缓冲区,在数据缓冲区满了以后,驱动程序会将数据缓冲区中的数据移动到发送缓冲区,发送线程发现发送缓冲区中存在数据后,负责将数据发送到后台,从而实现数据的异步传输。
7.根据权利要求6所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述并行优化装载包括复制表并发装载和循环表、哈希表并发装载。
8.根据权利要求I所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述客户端通过驱动程序向数据库集群发送数据时,采用压缩优化处理方法进行处理,包括驱动程序的压缩发送数据处理和服务器端的接收与解压数据处理。
9.根据权利要求8所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述的压缩发送数据处理方法包括以下步骤 ⑴等待发送缓冲区中存在数据; ⑵如果发送缓冲区中的数据少于最小压缩值,则构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴;⑶否则 ①如果CPU空闲率较高,则采用高压缩比压缩算法对数据进行压缩; ②否则采用高速压缩算法对数据进行压缩; ③如果压缩后的数据比原数据小,则构造压缩数据包并标记压缩类型;将压缩数据包发送到服务器,跳转到步骤⑴; ④否则,构造非压缩数据包;将非压缩数据包发送到服务器;跳转到步骤⑴。
10.根据权利要求8所述的数据库集群的并行压缩海量数据装载方法,其特征在于所述的接收与解压数据处理方法包括以下步骤 ⑴服务器端等待接收数据包; ⑵接收到一个数据包; ①如果数据包属于压缩包,则判断压缩包所使用的压缩算法;根据压缩算法对压缩包进行解压;得到解压后的数据,跳转到步骤⑶; ②如果数据包不属于压缩包,则获取数据包中的数据,跳转到步骤⑶; (3)将数据存储到表中; ⑷跳转到步骤⑴。
全文摘要
本发明涉及一种数据库集群的并行压缩海量数据装载方法,其主要技术特点是包括步骤1建立包括数据装载工具、驱动程序和数据库集群的并行压缩海量数据装载的组件架构;步骤2、客户端通过数据装载工具和驱动程序向数据库集群发送数据装载命令,获取各个数据库节点的连接信息后,连接各个数据库并且发送需要装载的数据;数据库集群服务器给客户端提供集群各个数据库节点的连接信息以及各个表的相关信息;数据库节点接收客户端发送过来的数据并存储下来。本发明使用海量数据通信协议以及并行优化处理和压缩优化处理方法,充分利用服务器的多CPU和网络资源并融合在海量数据装载过程中,提升了数据库集群的搭建速度。
文档编号G06F17/30GK102981857SQ201210514328
公开日2013年3月20日 申请日期2012年12月4日 优先权日2012年12月4日
发明者谢卫平, 冯柯, 蒋志勇, 刘碧楠, 李阳, 羊逢文, 李晓鹏 申请人:天津神舟通用数据技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1