首页> 中国专利> 一种面向结构化列式数据的分布式并行数据导入方法

一种面向结构化列式数据的分布式并行数据导入方法

摘要

本发明公开了一种面向结构化列式数据的分布式并行数据导入方法,包括:步骤1:获取数据导入规则,根据数据导入规则生成导入任务;步骤2:获取数据规模,根据数据规模将原数据表切分成若干子表,同时根据子表数量将导入任务切分成相应数量导入子任务;步骤3:多个导入子任务并行读取子表数据,读取到数据后将数据封装成协议报文,然后发送给数据导入子系统;步骤4:数据导入子系统根据步骤3发送的原始数据创建数据底层索引和数据分布索引,并将数据底层索引和数据分布索引导入到分布式内存数据库引擎中,实现了将存储在磁盘型数据库中的结构化数据快速导入到分布式内存数据库系统中,提高了列式数据库数据导入效率的技术效果。

著录项

  • 公开/公告号CN105069149A

    专利类型发明专利

  • 公开/公告日2015-11-18

    原文格式PDF

  • 申请/专利权人 电子科技大学;

    申请/专利号CN201510520609.6

  • 申请日2015-08-24

  • 分类号G06F17/30(20060101);

  • 代理机构成都行之专利代理事务所(普通合伙);

  • 代理人郭受刚

  • 地址 610000 四川省成都市高新区(西区)西源大道2006号

  • 入库时间 2023-12-18 12:16:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-12

    授权

    授权

  • 2015-12-16

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20150824

    实质审查的生效

  • 2015-11-18

    公开

    公开

说明书

技术领域

本发明涉及计算机软件领域,尤其涉及一种面向结构化列式数据的分布式并行数据导入方法。

背景技术

我们平常用到的商业关系数据库系统,其主要目标是保证数据存取的ACID特征,为各类商务及事务应用提供强大的数据管理与存取服务。但它们的数据服务的实时性难以得到保障,其根本原因在于:

传统数据库都是磁盘数据库,数据的主拷贝在硬盘上,用户需要访问数据时,DBMS将数据装入主存,即对数据的管理是“基于磁盘的缓存技术”。而磁盘相对于主存是极其低速的存储介质,且磁盘存取速度还和存取数据的物理位置和当前磁盘磁头位置有关。另外,管理缓存(cache)或缓冲(buffer),无论是在操作系统层还是DBMS层,都需要付出较大的代价。即使将磁盘数据全部缓存到内存,其管理代价依然很大,无法满足大多数应用场景实时性的要求。

在内存数据库中,数据库的全部或活动事务存取的数据放于内存中,这样事务对盘的访问完全取消了。由于整个数据库放于内存,数据库则不再作为大量存储文件看待而作为内存中可寻址的大量数据,不同于磁盘数据库中的缓存或缓冲区方式,它完全打破了传统磁盘数据库系统的设计宗旨,带来了其自身新的设计问题。如:传统磁盘数据库系统的数据组织、访问方法、查询处理算法的设计都针对减少磁盘访问次数与有效利用盘存储空间,甚至牺牲CPU时间来减少I/O次数(如查询处理有大量中间数据),而内存数据库的设计则主要考虑如何有效地利用CPU的时间和内存空间。对传统磁盘数据库系统相当有效的数据组织、访问方法、查询处理算法,对于内存数据库系统可能并不有效,相反,一些认为对传统磁盘数据库系统无用的办法,反而成为可行的。

分布式内存数据库,就是将数据分散存储在多个独立的数据节点上,并且以内存作为存储数据的主要介质,使用户能够实现高性能,高并发,高可伸缩及海量数据查询而提供的新型数据库的解决方案。内存数据库在最近几年迅速发展,并在应用中得到越来越广泛的实践。

分布式内存数据库相对于原有的传统磁盘型数据库,由于不使用硬盘作为存储数据的第一介质,因此减少了磁盘I/O,利用内存的高速访问性实现了数据的高速访问。但是,由于内存是很宝贵的资源,分布式内存数据库在生产业务中主要扮演的是计算平台的角色,并不作为存储数据的主数据库,其数据主要还是存储在传统磁盘数据库中。如何将存储在传统磁盘数据库中的海量结构化数据快速导入到内存中是分布式内存数据库首先要解决的问题。

传统磁盘型数据库多采用行式存储的方式,行式存储是将各行放入连续的物理位置,这很像传统的记录和文件系统。然后由数据库引擎根据每个查询提取需要的列。行式存储将数据组织成许多行,这样就能在一个操作中找到所有的列。这种做法的缺点是必须每次处理一整行,而不是只处理自己需要的列。这种存储方式比较适合OLTP(OnlineTransactionProcessing,联机事务处理系统,即以数据读写为主)场景,而不适合OLAP(OnlineAnalyticalProcessing,联机分析处理,即以数据分析为主)场景。OLAP的特点是多读少写,往往读的数据量比较大,并且读某个具体字段的几率会远远大于读整行数据的几率。所以按行存储不适合这种应用场景。而列式存储是结构化数据中的每列按单列数据形式组织,并在建立各列之间的关系后存储在介质上。优点是针对某个列中的值进行简单查询只需要获得对应列的数据,不必读入同一个记录相关列的所有数据,其读入速度快,需要的内部存储资源相对少。这表示对某个列中特定值的搜索可以直接进入该列的存储区,而不需要扫描整行的数据。这样也使得数据压缩变得更容易,因为一个列中的数据通常具有相同的数据类型。所以列式存储模型比较适合内存数据库的需求。

由于基于列的访问存在的缺点是载入速度通常比较慢,因为源数据在外部数据源中是以行或者记录的形式表示的。将海量行式数据转换成列式数据通常速度较慢,所以很多内存数据库都是针对更新数据进行分析和计算,而不是基于全量数据的分析和计算。而基于全量数据分析计算的分布式内存数据库的应用场景,就需要设计一套高速、高效的数据导入方案,将原有存储在行式数据库中的结构化的行式数据转换为适合内存数据库存储的压缩后的列式数据,来提高内存数据库的访问效率和存储效率。

综上所述,本申请发明人在实现本申请实施例中发明技术方案的过程中,发现上述技术至少存在如下技术问题:

1.当数据量较大时,串行导入数据显然是一种低效的数据导入方式,需要采用多路并行导入的方式,将原来存储在持久化层的海量数据导入到分布式内存数据库系统中。

2.在现有技术中,由于列式数据库与行式数据库结构上的差异,导致将行式存储的数据转换为列式数据时需要进行大量的数据结构转换工作,因此在数据量很大的时候,数据转换的工作量会很大,导入速度较慢、导入效率较低,因此,结合问题1,需要设计一种高速、高效的并行数据导入方案,将海量行式数据转换成列式数据,然后并行导入到系统中。

发明内容

本发明提供了一种面向结构化列式数据的分布式并行数据导入方法,解决了现有的数据导入方法存在导入速度较慢、导入效率较低,降低了内存数据库的访问效率和存储效率的技术问题,实现了将存储在磁盘型数据库中的结构化数据快速导入到分布式内存数据库系统中,且能够根据用户需求进行个性化服务,并提供增量数据更新功能,提高了列式数据库数据导入效率的技术效果。

为解决上述技术问题,本申请提供了一种面向结构化列式数据的分布式并行数据导入方法,将存储在磁盘型数据库中的结构化数据快速导入到分布式内存数据库系统中,该导入方法首先能够根据用户需求,支持按照用户需求导入数据,并根据用户需求提供增量数据更新功能,并且针对列数据载入速度比较慢的问题,设计一种多路并行数据快速导入的解决方案,提高列式数据库数据导入效率。

本发明所述的面向结构化列式数据的分布式并行数据导入方法,包括如下步骤:

步骤1:数据库读取组件根据数据导入规则,生成导入任务;

步骤2:根据所需读取数据表数据规模,对数据库读取任务进行切分成多个子任务,每个子任务读取部分数据表(子表),并建立子任务队列管理子任务;

步骤3:子任务读取子表完毕后,将读取的原始数据封装好发送给数据导入子系统;

步骤4:数据导入子系统根据原始数据创建数据底层索引和数据分布索引,然后将建立好的数据底层索引和数据分布索引导入到分布式内存数据库引擎中,并维护导入状态。

优选的,所述步骤1获取导入规则,根据数据导入规则,创建数据导入任务,维护数据导入任务状态。

优选的,所述步骤2中,数据库读取组件读取数据库元信息,获取待读取的数据表规模,计算出每个子任务应该读取的子表规模,并生成子任务队列。

具体的,所述步骤2中创建数据库读取子任务的方法为:首先读取数据库元信息,获取数据表规模,根据当前承载数据库的物理机节点资源和当前需要导入的数据表总规模,确定每次发送给数据导入子系统的子表规模,然后确定并行读取子表的线程数量,并形成子任务队列。

优选的,所述步骤3中,读取子表线程回调后,将读取的结构化的数据封装成内部数据协议格式,并发送给数据导入子系统。

优选的,所述步骤4中,数据导入子系统接收到协议,将原始数据解析提取出来,根据原始数据创建数据底层索引和数据分布索引,然后向中心节点请求分布式内存数据库引擎节点地址,将数据底层索引导入到相应节点中,并维护导入状态,向中心节点汇报导入进度。

面向结构化列式数据的分布式并行数据导入方法,包括如前所述的步骤1-4,还包括如下步骤:

步骤5.数据库读取组件监控源数据库更新信息,定期获取增量更新数据,将增量数据发送给数据库导入子系统,数据库导入子系统将增量数据建立数据底层索引,将相应索引数据导入到内存数据库引擎中。

所述步骤5可以具体为:

步骤501:数据库读取组件注册对源数据库表的监听事件,获取数据库表的增量更新信息,数据库读取组件定时读取增量规模;

步骤502:当数据库表的增量更新数据达到一定规模时,读取数据库表,获取增量更新数据,并封装成数据报文,发送给数据库导入子系统;

步骤503:数据库导入子系统获取增量数据,建立数据底层索引,然后向中心节点请求增量数据在分布式内存数据库引擎中的存储位置,将增量数据底层索引导入到分布式内存数据库引擎中,并监控增量更新状态。

本发明提供了一种面向结构化列式数据的分布式并行数据导入方法。该技术提供了一个将存储在磁盘型数据库中的结构化数据快速导入到分布式内存数据库系统中的解决方案,采用分布式多路并行导入的方式,将海量结构化数据快速导入到分布式内存数据库系统中,并提供增量数据更新功能,能够快速将存储在持久化层中的结构化数据的增量更新数据导入到分布式内存数据库系统中。

附图说明

图1是本申请实施例一中面向结构化列式数据的分布式并行数据导入方法具体流程示意图;

图2是本申请实施例一中方法对应的系统组成示意图;

图3是系统的基本架构及导入流程示意图;

图4是系统增量更新系统流程示意图。

具体实施方式

本发明提供了一种面向结构化列式数据的分布式并行数据导入方法,解决了现有的数据导入方法存在导入速度较慢、导入效率较低,降低了内存数据库的访问效率和存储效率的技术问题,实现了将存储在磁盘型数据库中的结构化数据快速导入到分布式内存数据库系统中,且能够根据用户需求进行个性化服务,并提供增量数据更新功能,提高了列式数据库数据导入效率的技术效果。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

请参考图1-图2,图1示出了本发明一种具体实施方式的示意图,说明了从外部数据库中将所需数据表导入到分布式内存数据库引擎中的过程。实现本发明的硬件包括多台互相联网的服务器,其中一台服务器作为数据库承载机,一台服务器作为中心节点,其余服务器作为数据导入计算节点。

本发明所述,包括如下步骤:

步骤1:数据库读取组件根据数据导入规则,生成导入任务;

数据库读取组件是连接外部数据源与内存数据库之间的接口,用于外部数据源的适配与数据的读取。数据库读取组件内封装当今行业上常用的数据库的开发库,经过配置调用不同的访问接口操作数据库。

数据库读取组件启动后监听来自外部节点的连接,当中心节点启动后首先根据配置信息连接数据库读取组件,获取源数据库中的元数据信息,如库中数据表信息、表结构信息等。中心节点将元数据信息提供给用户,用于作为数据导入的参考。用户根据元数据信息,选择需要导入的表名和字段名,生成导入规则,下发给数据导入子系统,数据导入子系统连接数据库读取组件,请求导入数据。数据库读取组件接收到导入规则后,根据导入规则生成相应导入任务。

步骤2:根据所需读取数据表数据规模,对数据库读取任务进行切分成多个子任务,每个子任务读取部分数据表(子表),并建立子任务队列管理子任务;

步骤3:子任务读取子表完毕后,将读取的原始数据封装好发送给数据导入子系统;

数据库读取组件在读取数据库时,由于外部数据库表中数据量很大,为了减少对物理节点的压力,数据库读取组件首先根据一定的策略读取数据,策略基本思想如下:

数据库读取组件接收到来自数据导入子系统的导入规则,生成数据导入任务,首先读取数据库元信息,确定数据表规模;根据获取的数据表规模以及当前节点物理资源和总任务数,根据表行数确定将数据表横向切分成若干个大小相同的子表,读取每个子表的任务可以认为是一个子任务,根据子任务个数和物理资源信息确定子任务读取队列长度,即为并行读取线程数;子任务队列确定后,采用多线程的形式,对每片子表进行多线程并行读取,当子任务队列中工作线程全部返回后,将每个线程读取的数据合并成数据报文;将合并后的数据报文发送给数据导入子系统相关节点;

步骤4:数据导入子系统根据原始数据创建数据底层索引和数据分布索引,然后将建立好的数据底层索引和数据分布索引导入到分布式内存数据库引擎中,并维护导入状态;

数据库读取组件传递给数据导入子系统的是结构化的数据,是数据库中存储表。将数据导入到分布式内存数据库引擎之前要对数据进行数据预处理,包括建立数据底层索引、建立数据数据分布索引。数据预处理策略如下:数据导入子系统接收到第一个报文后,首先将子表纵切,将每一列数据下发给工作线程。工作线程首先根据每一列数据进行排序,然后建立数据底层索引和该列的数据分布索引;数据底层索引和数据分布索引建立成功后向中央节点请求数据资源,获取到资源信息后将数据发送给分布式内存数据库引擎相应节点;数据导入子系统接收到剩余的字表数据后,同样建立数据底层索引;数据底层索引建立完成后判断待发送数据片号是否与当前数据编号相等,如果相等则发送该报文;分布式内存数据库引擎节点收到后续数据底层索引后,更新已有数据底层索引,并将数据底层索引返回给发送节点;数据导入子系统节点根据更新的数据底层索引建立后续的数据分布索引,将数据分布索引发送到存储数据分布索引的节点;然后重复执行上述操作,直到本列全部数据发送完毕;当全表数据发送完毕后,向中央节点报告该表导入成功;

步骤5:数据库读取组件监控源数据库更新信息,定期获取增量更新数据,将增量数据发送给数据库导入子系统,数据库导入子系统将增量数据建立数据底层索引,将相应索引数据导入到内存数据库引擎中。

所述步骤5可以具体为:

步骤501:数据库读取组件注册对源数据库表的监听事件,获取数据库表的增量更新信息,数据库读取组件定时读取增量规模;

步骤502:当数据库表的增量更新数据达到一定规模时,读取数据库表,获取增量更新数据,并封装成数据报文,发送给数据库导入子系统;

步骤503:数据库导入子系统获取增量数据,建立数据底层索引,然后向中心节点请求增量数据在分布式内存数据库引擎中的存储位置,将增量数据底层索引导入到分布式内存数据库引擎中,并监控增量更新状态;

下面举个具体的例子,对本申请中的技术方案进行介绍:

图3是系统的基本架构和基本导入流程图,其中数据库读取组件部署在外部数据源上。基本步骤如下:1、中心节点首先向数据库读取组件发送获取数据库元数据;2、获取到数据库元数据后向数据导入子系统下发数据导入规则;3、数据导入子系统通过数据库读取组件向外部数据源请求数据;4、数据库读取组件根据数据导入规则,采取并行导入的方式读取数据;5、读取到数据后将数据发送给数据导入子系统集群;6、数据导入子系统集群将数据转换成数据底层索引和数据分布索引;7、数据导入子系统向中心节点请求分布式内存数据库引擎的位置信息;8、将数据底层索引和数据分布索引导入到分布式内存数据库引擎集群中;9、数据库导入子系统实时监控导入流程,导入结束后向中心节点报告。

图4是系统增量更新系统流程图,基本步骤如下:1、数据库读取组件注册数据库监听机制,监听数据库中的更新数据;2、数据库读取组件定时获取增量更新并汇报;3、中心节点下发增量导入任务;4、数据导入子系统向数据库读取组件请求数据;5、数据库读取组件并行读取数据;6、数据库读取组件将数据发送给数据导入子系统;7、数据导入子系统建立数据底层索引和数据分布索引;8、数据导入子系统向中心节点请求数据存储位置;9、数据导入子系统将数据底层索引和数据分布索引发送给分布是内存数据库引擎集群;10、数据库导入子系统实时监控增量导入流程,导入结束后向中心节点报告。

前文所述的为本发明的各个优选实施例,各个优选实施例中的优选实施方式如果不是明显自相矛盾或以某一优选实施方式为前提,各个优选实施方式都可以任意叠加组合使用,所述实施例以及实施例中的具体参数仅是为了清楚表述发明人的发明验证过程,并非用以限制本发明的专利保护范围,本发明的专利保护范围仍然以其权利要求书为准,凡是运用本发明的说明书及附图内容所作的等同结构变化,同理均应包含在本发明的保护范围内。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号