首页> 中国专利> 一种基于Counting布隆过滤器的数据库中间件查询优化方法

一种基于Counting布隆过滤器的数据库中间件查询优化方法

摘要

本发明实施例提供一种基于Counting布隆过滤器的数据库中间件查询优化方法,所述方法包括:检测数据表结构中的连接键为非ER字段;选择数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;初始化四个数组,并将数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;检测数据表中的first.num<=M是否成立,成立时,对待添加元素进行hash函数映射,将待添加元素添加至数组;不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将待添加元素添加至所述新数组。采用本方法与传统的非对称复制连接广播算法比较,可以有效降低应用所发出的数据包量,并且在数据结果查询时,由于过滤了大量的无用元素,能够进行较快数据结果的返回。

著录项

  • 公开/公告号CN115934761A

    专利类型发明专利

  • 公开/公告日2023-04-07

    原文格式PDF

  • 申请/专利权人 天翼云科技有限公司;

    申请/专利号CN202211718212.4

  • 发明设计人 王晓昌;卢雨;丁鹏;苏飞;魏兴国;

    申请日2022-12-29

  • 分类号G06F16/2453(2019.01);G06F16/2455(2019.01);G06F16/27(2019.01);

  • 代理机构浙江千克知识产权代理有限公司 33246;

  • 代理人汪丹琪

  • 地址 100007 北京市东城区青龙胡同甲1号、3号2幢2层205-32室

  • 入库时间 2023-06-19 19:14:59

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-04-25

    实质审查的生效 IPC(主分类):G06F16/2453 专利申请号:2022117182124 申请日:20221229

    实质审查的生效

  • 2023-04-07

    公开

    发明专利申请公布

说明书

技术领域

本发明涉及电数字数据处理技术领域,尤其涉及一种基于Counting布隆过滤器的数据库中间件查询优化方法。

背景技术

随着互联网技术的飞速发展,利用服务器集群解决海量数据问题已成为必然趋势。由于分布式数据存储往往跨多个节点运行,给数据处理带来了问题。因此,分布式数据库经常需要使用中间件作为代理来集成节点,实现分布式处理。中间件在传统关系型数据库的基础上,解决了节点不易扩展的问题。但中间件同时也面临着如跨库连接、数据迁移、容量规划、扩容等问题。其中,中间件Mycat在跨库连接问题上给出了三种解决方案。对于数据量小的表和具有ER关系的分片表,可以分别使用字典表和ER分片进行跨库连接。但ER分片在实际应用中存在不可分片情况,在两表非ER字段跨库等值连接时,会使用非对称复制连接广播算法。

但是,在进行ER分片后,数据表只能与其中一个表存放在同一存储节点上,与另一表不得不使用非对称复制连接广播算法。而对非ER字段的连表查询使用非对称复制连接广播算法会造成额外的网络广播开销,使应用的运行时间大大增加,甚至造成应用的内存溢出,可能造成很严重的后果。

发明内容

针对现有技术中存在的问题,本发明实施例提供一种基于Counting布隆过滤器的数据库中间件查询优化方法及装置。

本发明实施例提供一种基于Counting布隆过滤器的数据库中间件查询优化方法,包括:

检测数据表结构中的连接键是否为非ER字段;

当所述连接键为非ER字段时,选择所述数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;

初始化Counting Bloom Filter结构数组的四个数组,并将所述数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;

检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将所述待添加元素添加至数组;

当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将所述待添加元素添加至所述新数组。

在其中一个实施例中,所述方法还包括:

当对所述非ER字段进行等值连接查询时,对所述数据表结构中数据量小于预设阈值的数据表进行广播。

在其中一个实施例中,所述Counting Bloom Filter结构数组,包括:

两个K分组合型Bloom Filter数组表示一个集合,并在每个位数组中的每一位扩展位一个计数器。

在其中一个实施例中,所述方法还包括:

将每个位数组中的计数器的值分别加1。

在其中一个实施例中,所述方法由分布式数据库中间件架构系统实施,所述分布式数据库中间件架构系统包括:

带有Counting Bloom Filter源码的中间件节点和底层的关系型数据库组,并在所述中间件节点创建两张具有跨表连接关系的数据表,所述关系型数据库组分为3个数据分片,分别落到两个关系型数据库中。

本发明实施例提供一种基于Counting布隆过滤器的数据库中间件查询优化装置,包括:

检测模块,用于检测数据表结构中的连接键是否为非ER字段;

选取模块,用于当所述连接键为非ER字段时,选择所述数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;

初始化模块,用于初始化Counting Bloom Filter结构数组的四个数组,并将所述数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;

第一添加模块,用于检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将所述待添加元素添加至数组;

第二添加模块,用于当first.num<=M不成立时,将新数组扩充至Counting BloomFilter结构数组,并将所述待添加元素添加至所述新数组。

在其中一个实施例中,所述装置还包括:

广播模块,用于当对所述非ER字段进行等值连接查询时,对所述数据表结构中数据量小于预设阈值的数据表进行广播。

在其中一个实施例中,所述装置还包括:

结构数组模块,用于将两个K分组合型Bloom Filter数组表示一个集合,并在每个位数组中的每一位扩展位一个计数器。

本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述基于Counting布隆过滤器的数据库中间件查询优化方法的步骤。

本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述基于Counting布隆过滤器的数据库中间件查询优化方法的步骤。

本发明实施例提供的一种基于Counting布隆过滤器的数据库中间件查询优化方法及装置,检测数据表结构中的连接键是否为非ER字段;当连接键为非ER字段时,选择数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;初始化Counting Bloom Filter结构数组的四个数组,并将数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将待添加元素添加至数组;当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将待添加元素添加至所述新数组。这样与传统的非对称复制连接广播算法比较,可以有效降低应用所发出的数据包量,并且在数据结果查询时,由于过滤了大量的无用元素,能够进行较快数据结果的返回。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中一种基于Counting布隆过滤器的数据库中间件查询优化方法的流程图;

图2为本发明另一实施例中分布式数据库中间件架构图;

图3为本发明实施例中一种基于Counting布隆过滤器的数据库中间件查询优化装置的结构图;

图4为本发明实施例中电子设备结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的一种基于Counting布隆过滤器的数据库中间件查询优化方法的流程示意图,如图1所示,本发明实施例提供了一种基于Counting布隆过滤器的数据库中间件查询优化方法,包括:

步骤S101,检测数据表结构中的连接键是否为非ER字段。

具体地,检测数据表结构中的连接键是否为非ER字段,其中,在非ER字段的连表查询时,中间件会使用非对称复制连接广播算法,而本实施例中,则是对非对称复制连接广播算法进行改进。

步骤S102,当所述连接键为非ER字段时,选择所述数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表。

具体地,当连接键为非ER字段时,选择较大数据量大的表作为应用CountingBloom Filter算法的数据表,这是因为在数据过滤阶段,需要判断过滤数据的时长会缩小,利用了空间换时间的方式。

另外,原K分组合型Bloom Filter是两个位数组表示一个数组集合,使元素在集合内由于Hash函数的映射比较分散,在此基础上,Counting Bloom Filter优化为两个K分组合型Bloom Filter数组表示一个集合,也就是使用四个位数组表示一个集合,同时在每个位数组中的每一位扩展位一个小的计数器,这样,数组内的元素能够在Hash函数的映射下更加分散,元素冲突率更少,这样误判率也会减少。

步骤S103,初始化Counting Bloom Filter结构数组的四个数组,并将所述数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M。

具体地,对Counting Bloom Filter结构数组的四个数组进行初始化,四个数组大小分别为N,N/K,N/K,N/K2,hash函数的个数为k,使得整体误判率和平均校验时间最优的数组内1的个数为M=min{M1,M2,M3,M4}。数组所有位初始化为0,next指针为null指针。

步骤S104,检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将所述待添加元素添加至数组。

具体地,在数据表中添加对应的元素时,需要先检测数据表中的first.num<=M是否成立,当first.num<=M成立时,直接对元素进行hash函数直接映射,将待添加元素添加至数组,即将first中数组相应位置1,更新first.num,同时使计数器first.count++。

步骤S105,当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将所述待添加元素添加至所述新数组。

具体地,若first.num<=M不成立时,即first.num>M,则将新数组扩充至CountingBloom Filter结构数组,并将待添加元素添加至新数组,即对Counting Bloom Filter扩充,first=first.next,first中数组相应位置置1,更新first.num,同时使计数器first.count++。

另外,在进行元素重复添加时,重新检测first.num<=M是否成立,成立时执行步骤S104,不成立时执行步骤S105,

另外,在非ER字段进行等值连接查询时,较小数据量的数据表进行广播,并用Bloom Filter集合进行对该连接键进行判断过滤;同时,如果遇到插入、删除数据处理时,对连接键元素进行hash映射,更新Bloom Filter集合。

另外,简单的Bloom Filter中位向量中的各个位由于只有0,1两种数值,而不同的元素经过Hash后可能得到相同的位编号,这样一来多个元素都把该位置的值置为1,这种情况在数据量很大的情况下非常普遍。所以,如果元素集合经常发生删除等变动,那么BloomFilter不支持删除操作的弊端就无法满足要求。而本实施例中,Counting Bloom Filter将标准Bloom Filter位数组的每一位扩展为一个小的计数器(Counter),在插入元素时给对应的k(k为哈希函数个数)个Counter的值分别加1,删除元素时给对应的k个Counter的值分别减1,Counting Bloom Filter通过多占用存储空间的代价,给Bloom Filter增加了删除操作。

本发明实施例提供的一种基于Counting布隆过滤器的数据库中间件查询优化方法,检测数据表结构中的连接键是否为非ER字段;当连接键为非ER字段时,选择数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;初始化Counting Bloom Filter结构数组的四个数组,并将数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将待添加元素添加至数组;当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将待添加元素添加至所述新数组。这样与传统的非对称复制连接广播算法比较,可以有效降低应用所发出的数据包量,并且在数据结果查询时,由于过滤了大量的无用元素,能够进行较快数据结果的返回。

在另一实施例中,一种基于Counting布隆过滤器的数据库中间件查询优化方法由分布式数据库中间件架构系统实施,分布式数据库中间件架构系统如图2所示,包括:

由带有Counting Bloom Filter源码的中间件节点和底层的关系型数据库组成。其中,在中间件层创建两张具有跨表连接关系的数据表,逻辑层分为3个数据分片,分别落到两个关系型数据库中。对于实验中TPC-H数据集随机产生的数据进行部分修改,生成的数据集大小为4GB。

且本实施例中,基于Counting布隆过滤器的数据库中间件查询优化方法需要Mysql客户端连接Mycat中间件的服务端口,输入两表跨库连接的SQL语句。注意,Mycat所在主机要与底层的关系型数据库网络相通。查看两表连接SQL语句返回结果与期望值一致。

图3为本发明实施例提供的一种基于Counting布隆过滤器的数据库中间件查询优化装置,包括:检测模块S201、选取模块S202、初始化模块,S203、第一添加模块S204、第二添加模块S205,其中:

检测模块S201,用于检测数据表结构中的连接键是否为非ER字段。

选取模块S202,用于当所述连接键为非ER字段时,选择所述数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表。

初始化模块S203,用于初始化Counting Bloom Filter结构数组的四个数组,并将所述数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M。

第一添加模块S204,用于检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将所述待添加元素添加至数组。

第二添加模块S205,用于当first.num<=M不成立时,将新数组扩充至CountingBloom Filter结构数组,并将所述待添加元素添加至所述新数组。

在其中一个实施例中,所述装置还包括:

广播模块,用于当对所述非ER字段进行等值连接查询时,对所述数据表结构中数据量小于预设阈值的数据表进行广播。

在其中一个实施例中,所述装置还包括:

结构数组模块,用于将两个K分组合型Bloom Filter数组表示一个集合,并在每个位数组中的每一位扩展位一个计数器。

关于基于Counting布隆过滤器的数据库中间件查询优化装置的具体限定可以参见上文中对于基于Counting布隆过滤器的数据库中间件查询优化方法的限定,在此不再赘述。上述基于Counting布隆过滤器的数据库中间件查询优化装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302、通信接口(Communications Interface)303和通信总线304,其中,处理器301,存储器302,通信接口303通过通信总线304完成相互间的通信。处理器301可以调用存储器302中的逻辑指令,以执行如下方法:检测数据表结构中的连接键是否为非ER字段;当连接键为非ER字段时,选择数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;初始化Counting Bloom Filter结构数组的四个数组,并将数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将待添加元素添加至数组;当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将待添加元素添加至所述新数组。

此外,上述的存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的传输方法,例如包括:检测数据表结构中的连接键是否为非ER字段;当连接键为非ER字段时,选择数据表结构中数据量大于预设阈值的数据表作为Counting Bloom Filter算法的算法数据表;初始化Counting Bloom Filter结构数组的四个数组,并将数组的所有位初始化为0,next指针初始化为null指针,并获取最优数组内的1的个数M;检测数据表中的first.num<=M是否成立,当first.num<=M成立时,对待添加元素进行hash函数映射,将待添加元素添加至数组;当first.num<=M不成立时,将新数组扩充至Counting Bloom Filter结构数组,并将待添加元素添加至所述新数组。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号