首页> 中国专利> 基于bloom filter的基线数据迁移的方法及装置

基于bloom filter的基线数据迁移的方法及装置

摘要

本发明提供的基于bloom filter的基线数据迁移的方法及装置,通过获取源端数据库的基线数据,并进行数据转换得到第一主键,根据所述第一主键通过bloom filter进行运算得到第一数据;获取目标端数据库的第二主键,并根据所述第二主键通过bloom filter进行运算得到第二数据;判断所述第一数据和第二数据是否相同,若相同,则采用单笔插入的方式进行数据迁移,在基线数据迁移之前先利用bloom filter进行过滤,从而在目标端数据库已有较为庞大数据量且内存空间有限的情形下,实现了基线数据的高效迁移,并大大的降低了内存的使用,从而提高CPU的利用率,并提高基线数据迁移的效率。

著录项

  • 公开/公告号CN113051251A

    专利类型发明专利

  • 公开/公告日2021-06-29

    原文格式PDF

  • 申请/专利权人 福建星瑞格软件有限公司;

    申请/专利号CN202110334259.X

  • 发明设计人 温祐麟;

    申请日2021-03-29

  • 分类号G06F16/21(20190101);G06F16/245(20190101);

  • 代理机构11613 北京易捷胜知识产权代理事务所(普通合伙);

  • 代理人黄骏鹏

  • 地址 350000 福建省福州市鼓楼区软件大道89号福州软件园F区5号楼21层

  • 入库时间 2023-06-19 11:39:06

说明书

技术领域

本发明涉及数据迁移技术领域,特别涉及基于bloom filter的基线数据迁移的方法及装置。

背景技术

目前因为国产数据库蓬勃发展,抑或是微服务多点数据同时运算,通常都会用到数据迁移。数据迁移分为基线数据迁移以及增量数据迁移。要先有基线数据之后,增量的数据捕获以及迁移才有意义。

基线数据抽象来说是从一个业务所产生至今的所有数据,实际体现在数据库内为表的资料量大小。因此,基线数据大体上来说是非常庞大的。通常在迁移基线数据时都会要求业务主机下线,以获取基线数据。然后迁移到目的端,验证之后才能重新上线。由此可知此项作业非常有时效性的限制,通常限制在几个小时以内。

通常采用以下几种常见的做法:

1、Unload-将基线数据运用数据库的指令下载出来(unload)形成档案、因为量大,档案会切割成数批小档案。

2、ETL-数据迁移中来源端以及目标端的数据库可以不同,所以下载出来的档案或多或少需要经过一些小转换,以确保可以正常上载到目标端。

3、Insert-这些档案可以经由一个或多个上载程序,利用目标数据库提供的批次塞入指令(batch insert)达到高性能插入,并载入目标端数据库。

上述的做法是在目标端数据库同个表内并没有初始数据,也就是从无到有的迁移。但是,常见的情形是公司为了业务需要已经打造另一个环境上线新业务,所以里面已经存在数据。此时,基线数据迁移就会存在键值重复的问题。基本上表内会有主键,而且主键不能重复。如果在插入过程中出现主键重复的错误,此笔批次塞入会整个失败。

所以,在目标端已有数据的情形下,若要维持迁移的时效性,就必须保持高性能批次插入,也就必需要先将数据做过滤,确保批次塞入的数据主键不会重复。并将有重复的数据单笔单笔的更新进入目标端。这边确保双边主键不重复的作法不外乎:

1、使用key-value辅助数据库(例如Redis)先将目标端表内主键下载并塞入Redis。来源端读取每一笔数据主键并查询Redis以厘清重复与否

2、将目标端表内主键下载并塞入哈希表将所有主键放入。来源端同样查询哈希表主键重复与否。

不论用怎样的方式,因为目标端已有数据且数据量有可能已经很庞大。上述不论是放入Redis或是哈希表基本上都是将所有主键放入内存。主键可以很大,在一些业务上主键很常用姓名加上一些栏位形成复合主键,造成主键空间庞大,所以在数据量大的情形下此方案会受限于有限的内存空间而失败。

因此,需要基于bloom filter的基线数据迁移的方法及装置,能够在目标端数据库已有较为庞大数据量且内存空间有限的情形下,实现基线数据的高效迁移。

发明内容

(一)要解决的技术问题

为了解决现有技术的上述问题,本发明提供基于bloom filter的基线数据迁移的方法及装置,能够在目标端数据库已有较为庞大数据量且内存空间有限的情形下,实现基线数据的高效迁移。

(二)技术方案

为了达到上述目的,本发明采用的一种技术方案为:

基于bloom filter的基线数据迁移的方法,包括步骤:

S1、获取源端数据库的基线数据,并进行数据转换得到第一主键,根据所述第一主键通过bloom filter进行运算得到第一数据;

S2、获取目标端数据库的第二主键,并根据所述第二主键通过bloom filter进行运算得到第二数据;

S3、判断所述第一数据和第二数据是否相同,若相同,则采用单笔插入的方式进行数据迁移。

为了达到上述目的,本发明采用的一种技术方案为:

基于bloom filter的基线数据迁移的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:

S1、获取源端数据库的基线数据,并进行数据转换得到第一主键,根据所述第一主键通过bloom filter进行运算得到第一数据;

S2、获取目标端数据库的第二主键,并根据所述第二主键通过bloom filter进行运算得到第二数据;

S3、判断所述第一数据和第二数据是否相同,若相同,则采用单笔插入的方式进行数据迁移。

(三)有益效果

本发明的有益效果在于:通过获取源端数据库的基线数据,并进行数据转换得到第一主键,根据所述第一主键通过bloom filter进行运算得到第一数据;获取目标端数据库的第二主键,并根据所述第二主键通过bloom filter进行运算得到第二数据;判断所述第一数据和第二数据是否相同,若相同,则采用单笔插入的方式进行数据迁移,在基线数据迁移之前先利用bloom filter进行过滤,从而在目标端数据库已有较为庞大数据量且内存空间有限的情形下,实现了基线数据的高效迁移,并大大的降低了内存的使用,从而提高CPU的利用率,并提高基线数据迁移的效率。

附图说明

图1为本发明实施例的基于bloom filter的基线数据迁移的方法流程图;

图2为本发明实施例的基于bloom filter的基线数据迁移的装置的整体结构示意图。

【附图标记说明】

1:基于bloom filter的基线数据迁移的装置;

2:存储器;

3:处理器。

具体实施方式

为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。

实施例一

请参照图1,基于bloom filter的基线数据迁移的方法,包括步骤:

S1、获取源端数据库的基线数据,并进行数据转换得到第一主键,根据所述第一主键通过bloom filter进行运算得到第一数据;

步骤S1包括:

S11、将源端数据库的基线数据下载到多个档案,对所有的档案进行数据转换得到第一主键;

S12、根据所述第一主键通过bloom filter定义的多个不同的哈希函数进行运算得到相应第一点阵列。

S2、获取目标端数据库的第二主键,并根据所述第二主键通过bloom filter进行运算得到第二数据;

步骤S2具体为:

获取目标端的第二主键,并根据所述第二主键所述多个不同的哈希函数进行运算得到相应的第二点阵列。

S3、判断所述第一数据和第二数据是否相同,若相同,则采用单笔插入的方式进行数据迁移。

所述步骤S3具体为:

判断所述第一点阵列和第二点阵列是否相同,若相同,则采用单笔插入的方式进行数据迁移。

步骤S3还包括:

若第一点阵列和第二点阵列不相同,则采用大批数据塞入的方式进行数据迁移。

实施例二

本实施例和实施例一的区别在于,本实施例将结合具体的应用场景进一步说明,本发明上述基于bloom filter的基线数据迁移的方法是如何实现的:

首先,Bloom filter的原理就是定义多个不同的哈希函数,每个哈希函数又映射到各自的点阵列。

假如定义2个哈希函数,就会有2个点阵列来映射。

所以一笔数据通过2个不同的哈希函数就会在不同的点阵列对应到各自的点。

当字串“ABC”经由两个不同的哈希函数映射两个点阵列分别到4以及5。

所以bit_array_1[4]以及bit_array_2[5]两个位置都会被设置(从0设为1)

后面要判断数据是否已经存在,只需要去比较bit_array_1[4]以及bit_array_2[5]两个值是否都为1。但是,因为哈希函数的特性,会存在不同的字串,譬如“DEF”经由这两个哈希函数同样映射到4以及5,造成碰撞的现象,所以映射到相同位置的主键必须再提出来做精确的比对,用越多个哈希函数以及点阵列越大可以把这种碰撞的机率降低。

为了便于进一步理解本发明内容,举例如下:

定义4层映射,每层映射到1024个点;

每一层的点阵列(bit array)以bit_array_N[0-1023]来代表,N为第几层,Index从0开始,bit_array_1[5]代表第1层bit_array里面的第6个bit,初始值均为0,也就是bit_array_N[0-1023]=0。

每一层的哈希函数以hash_funciton_N(x)来代表,N为第几层,哈希函数已经有很多,也可以自行定义适当的哈希函数:

第一层:hash_function_1(x)

第二层:hash_function_2(x)

第三层:hash_function_3(x)

第四层:hash_function_4(x)

然后假设主键为“ABC”,将主键放入哈希函数可以得到一个计算后的值,再将此值用module(馀数)的函数求得映射到第几个点:

所以,每一层都会取得一个值,举例:

hash_function_1(“ABC”)module 1024=123

hash_function_2(“ABC”)module 1024=765

hash_function_3(“ABC”)module 1024=323

hash_function_4(“ABC”)module 1024=891

再来,将每层对应到的bit array的index标籤设起来:

上例hash_function_1(“ABC”)module 1024=123

就会把bit_array_1[123]的bit设为1

依此类推其他层,所有的键值,就被转换为这四层bit array所代表的组合。譬如前例“ABC”即被转化为bit_array_1[123]=1,bit_array_2[765]=1,bit_array_3[323]=1,bit_array[891]=1。往后,当要查询一个键值是否已经存在,就运行上述的四个哈希函数,并再取馀数,同样能达到一系列四个数字,再去bit_array上面看看是否这四个index所代表的标籤都是被设立1。如果是,那能表示此键值“可能”已经存在。

另外,需要强调的是:不同的键值是有可能被哈希函数运算而得到一个相同的值,所以越多不同的哈希函数加上越大的bit array越能将不同的键值分开,但是不管多大,永远不能排除不同的键值被映射到相同的一系列数字,所以如果发生这样的情形,这些键值就要被当成可能是重复的情形而特殊处理。

1.1、将源端数据库的基线数据下载到多个档案,对所有的档案进行数据转换得到第一主键;

1.2、根据所述第一主键通过bloom filter定义的多个不同的哈希函数进行运算得到相应第一点阵列。

2、获取目标端的第二主键,并根据所述第二主键所述多个不同的哈希函数进行运算得到相应的第二点阵列。

3.1、判断所述第一点阵列和第二点阵列是否相同,若相同,则采用单笔插入的方式进行数据迁移。

3.1、若第一点阵列和第二点阵列不相同,则采用大批数据塞入的方式进行数据迁移。

采用本发明的基线数据迁移方法,除了大大的降低了内存的使用,也会提高cpu的使用率。数据迁移基本的瓶颈都是在disk i/o。利用多余的cpu计算能力用来计算bloomfilter内的哈希函数,在一个disk i/o为瓶颈的场景下并不会增加太多执行时间。

再来分析一下内存的节省程度:

假设一个键值的大小为16bytes,总共有1024*1024共一百万笔数据,本发明数据迁移方法所需要存放的键值空间为:

16*1024*1024(bytes)=16*1024*1024*8(bits)

如果用一个四阶层,每层1024bits的哈希转换,内存空间为:

4*1024(bits)

两者内存空间差距为:

(16*1024*1024*8)/(4*1024)=32768倍

键值越大,笔数越多,差距会快速的加大,但是执行时间只会些微增加,由此可见,采用发明的基于bloom filter的基线数据迁移的方法,不仅能够在目标端数据库已有较为庞大数据量且内存空间有限的情形下,实现基线数据的高效迁移,而且还能够大大的降低了内存的使用,从而提高CPU的利用率,并提高基线数据迁移的效率。

实施例三

请参照图2,基于bloom filter的基线数据迁移的装置1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现实施例一中的各个步骤。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号