数据库唯一性约束处理方法、装置、设备及介质转让专利

申请号 : CN202211388507.X

文献号 : CN115617809B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李求实林泽昕

申请人 : 广州睿帆科技有限公司

摘要 :

本申请提供一种数据库唯一性约束处理方法、装置、设备及介质。在该方法中,根据待插入数据表中的唯一键,对待插入数据表进行表内去重。进而对于去重后的待插入数据表,依次根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据,再将目标待插入数据插入已存储数据表中。本方案通过对待插入数据表进行表内去重,再根据预设布隆过滤器数组和稀疏索引再次去重后将目标待插入数据插入已存储数据表中,临时数据较少,有效减小了内存占用率,同时也提高了去重效率。

权利要求 :

1.一种数据库唯一性约束处理方法,其特征在于,包括:根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重;

对于去重后的待插入数据表中每条待插入数据,根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;

根据所述唯一键值和预设数量个不同的预设第一哈希函数,确定预设数量个哈希值;

若所述预设数量个哈希值在预设布隆过滤器数组中对应的数值中存在0,则将所述待插入数据作为第一目标待插入数据;

对于去重后的待插入数据表中,除所述第一目标待插入数据外的每个待插入数据,确定所述待插入数据的位置索引;

根据所述位置索引和所述已存储数据表的稀疏索引,确定所述位置索引对应的目标稀疏索引;

判断所述待插入数据与所述目标稀疏索引在所述已存储数据表中对应的数据是否相同;

若所述待插入数据与所述目标稀疏索引在已存储数据表中对应的数据不相同,则将所述待插入数据作为第二目标待插入数据;

若所述待插入数据与所述目标稀疏索引在已存储数据表中对应的数据相同,将所述待插入数据删除;

将所述第一目标待插入数据和所述第二目标待插入数据插入所述已存储数据表中;

所述方法还包括:

根据所述已存储数据表,更新所述预设布隆过滤器数组和所述稀疏索引。

2.根据权利要求1所述的方法,其特征在于,所述根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重,包括:对于所述待插入数据表中每个待插入数据,依次根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;

根据所述唯一键值和预设第二哈希函数,确定所述待插入数据对应的哈希值;

若所述哈希值已存储在预设哈希值表中,则将所述待插入数据删除;

若所述哈希值未存储在预设哈希值表中,则将所述待插入数据保留,并将所述哈希值存储至所述预设哈希值表中。

3.一种数据库唯一性约束处理装置,其特征在于,包括:处理模块,用于:

根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重;

对于去重后的待插入数据表中每条待插入数据,根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;

根据所述唯一键值和预设数量个不同的预设第一哈希函数,确定预设数量个哈希值;

若所述预设数量个哈希值在预设布隆过滤器数组中对应的数值中存在0,则将所述待插入数据作为第一目标待插入数据;

对于去重后的待插入数据表中,除所述第一目标待插入数据外的每个待插入数据,确定所述待插入数据的位置索引;

根据所述位置索引和所述已存储数据表的稀疏索引,确定所述位置索引对应的目标稀疏索引;

判断所述待插入数据与所述目标稀疏索引在所述已存储数据表中对应的数据是否相同;

若所述待插入数据与所述目标稀疏索引在已存储数据表中对应的数据不相同,则将所述待插入数据作为第二目标待插入数据;

若所述待插入数据与所述目标稀疏索引在已存储数据表中对应的数据相同,将所述待插入数据删除;

存储模块,用于将所述第一目标待插入数据和所述第二目标待插入数据插入所述已存储数据表中;

所述处理模块,还用于根据所述已存储数据表,更新所述预设布隆过滤器数组和所述稀疏索引。

4.根据权利要求3所述的装置,其特征在于,所述处理模块,具体用于:对于所述待插入数据表中每个待插入数据,依次根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;

根据所述唯一键值和预设第二哈希函数,确定所述待插入数据对应的哈希值;

若所述哈希值已存储在预设哈希值表中,则将所述待插入数据删除;

若所述哈希值未存储在预设哈希值表中,则将所述待插入数据保留,并将所述哈希值存储至所述预设哈希值表中。

5.一种电子设备,其特征在于,包括:

处理器,存储器,通信接口;

所述存储器用于存储所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1或2任一项所述的数据库唯一性约束处理方法。

6.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1或2任一项所述的数据库唯一性约束处理方法。

说明书 :

数据库唯一性约束处理方法、装置、设备及介质

技术领域

[0001] 本申请涉及数据库领域,尤其涉及一种数据库唯一性约束处理方法、装置、设备及介质。

背景技术

[0002] 随着科技的迅速发展,各领域产生的数据量也迅速增加,如何对大数据进行更有效的处理,是人们所关心的问题。
[0003] 在大数据处理的问题中,在数据插入时进行数据去重是比较重要的问题。现有技术中,许多数据库软件拥有通过哈希索引或者B+树等方式来实现唯一性约束,以达到去重的功能。比如哈希索引,对于要插入的每条数据提取对应的唯一键,再确定出对应的唯一键值,通过公共哈希函数将唯一键值变换为该条数据对应的哈希值,也就是内存位置,再判断此内存位置是否存储数据。若未存储数据,说明该条数据未重复,将其插入数据表中。若已存储数据,说明该条数据是重复数据,将其删除。
[0004] 综上所述,现有的数据库唯一性约束处理方法,需要计算所有已存储数据的哈希值,生成哈希表,哈希表作为临时数据会存储在内存中,在已存储数据的数据量以及待插入的数据量较大时,内存中的哈希表中的数据量会增大,会导致内存占用率较大;同时随着哈希表填充率的增加,新数据插入哈希表的冲突概率也随之增加,进一步增加了哈希表的读写耗时,导致去重效率较低。

发明内容

[0005] 本申请实施例提供一种数据库唯一性约束处理方法、装置、设备及介质,用于解决现有的数据库唯一性约束处理方法,需要计算所有已存储数据的哈希值,生成哈希表,哈希表作为临时数据会存储在内存中,在已存储数据的数据量以及待插入的数据量较大时,内存中的哈希表中的数据量会增大,会导致内存占用率较大;同时随着哈希表填充率的增加,新数据插入哈希表的冲突概率也随之增加,进一步增加了哈希表的读写耗时,导致去重效率较低的问题。
[0006] 第一方面,本申请实施例提供一种数据库唯一性约束处理方法,包括:
[0007] 根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重;
[0008] 根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据;
[0009] 将所述目标待插入数据插入所述已存储数据表中。
[0010] 在一种具体实施方式中,所述根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重,包括:
[0011] 对于所述待插入数据表中每个待插入数据,依次根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0012] 根据所述唯一键值和预设第二哈希函数,确定所述待插入数据对应的哈希值;
[0013] 若所述哈希值已存储在预设哈希值表中,则将所述待插入数据删除;
[0014] 若所述哈希值未存储在预设哈希值表中,则将所述待插入数据保留,并将所述哈希值存储至所述预设哈希值表中。
[0015] 在一种具体实施方式中,所述根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据,包括:
[0016] 根据所述预设数量个不同的所述预设第一哈希函数和所述预设布隆过滤器数组,确定所述去重后的待插入数据表中的内的目标待插入数据;
[0017] 对于所述去重后的待插入数据表中,除所述目标待插入数据外的每个待插入数据,根据所述稀疏索引,若判断出所述待插入数据未存储在所述已存储数据表中,将所述待插入数据作为目标待插入数据;
[0018] 若判断出所述待插入数据已存储在所述已存储数据表中,将所述待插入数据删除。
[0019] 在一种具体实施方式中,所述根据所述预设数量个不同的所述预设第一哈希函数和所述预设布隆过滤器数组,确定所述去重后的待插入数据表中的内的目标待插入数据,包括:
[0020] 对于去重后的待插入数据表中每条待插入数据,根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0021] 根据所述唯一键值和所述预设数量个不同的所述预设第一哈希函数,确定预设数量个哈希值;
[0022] 若所述预设数量个哈希值在所述预设布隆过滤器数组中对应的数值中存在0,则将所述待插入数据作为所述目标待插入数据。
[0023] 在一种具体实施方式中,所述方法还包括:
[0024] 根据所述已存储数据表,更新所述预设布隆过滤器数组和所述稀疏索引。
[0025] 第二方面,本申请实施例提供一种数据库唯一性约束处理装置,包括:
[0026] 处理模块,用于:
[0027] 根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重;
[0028] 根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据;
[0029] 存储模块,用于将所述目标待插入数据插入所述已存储数据表中。
[0030] 在一种具体实施方式中,所述处理模块,具体用于:
[0031] 对于所述待插入数据表中每个待插入数据,依次根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0032] 根据所述唯一键值和预设第二哈希函数,确定所述待插入数据对应的哈希值;
[0033] 若所述哈希值已存储在预设哈希值表中,则将所述待插入数据删除;
[0034] 若所述哈希值未存储在预设哈希值表中,则将所述待插入数据保留,并将所述哈希值存储至所述预设哈希值表中。
[0035] 在一种具体实施方式中,所述处理模块,具体还用于:
[0036] 根据所述预设数量个不同的所述预设第一哈希函数和所述预设布隆过滤器数组,确定所述去重后的待插入数据表中的内的目标待插入数据;
[0037] 对于所述去重后的待插入数据表中,除所述目标待插入数据外的每个待插入数据,根据所述稀疏索引,若判断出所述待插入数据未存储在所述已存储数据表中,将所述待插入数据作为目标待插入数据;
[0038] 若判断出所述待插入数据已存储在所述已存储数据表中,将所述待插入数据删除。
[0039] 在一种具体实施方式中,所述处理模块,具体还用于:
[0040] 对于去重后的待插入数据表中每条待插入数据,根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0041] 根据所述唯一键值和所述预设数量个不同的所述预设第一哈希函数,确定预设数量个哈希值;
[0042] 若所述预设数量个哈希值在所述预设布隆过滤器数组中对应的数值中存在0,则将所述待插入数据作为所述目标待插入数据。
[0043] 在一种具体实施方式中,所述处理模块,还用于:
[0044] 根据所述已存储数据表,更新所述预设布隆过滤器数组和所述稀疏索引。
[0045] 第三方面,本申请实施例提供一种电子设备,包括:
[0046] 处理器,存储器,通信接口;
[0047] 所述存储器用于存储所述处理器的可执行指令;
[0048] 其中,所述处理器配置为经由执行所述可执行指令来执行第一方面任一项所述的数据库唯一性约束处理方法。
[0049] 第四方面,本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一项所述的数据库唯一性约束处理方法。
[0050] 第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现第一方面任一项所述的数据库唯一性约束处理方法。
[0051] 本申请实施例提供的数据库唯一性约束处理方法、装置、设备及介质,根据待插入数据表中的唯一键,对待插入数据表进行表内去重。进而对于去重后的待插入数据表,根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据,再将目标待插入数据插入已存储数据表中。本方案通过对待插入数据表进行表内去重,再根据预设布隆过滤器数组和稀疏索引再次去重后将目标待插入数据插入已存储数据表中,临时数据较少,有效减小了内存占用率,同时也提高了去重效率。

附图说明

[0052] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0053] 图1a为本申请提供的数据库唯一性约束处理方法实施例一的流程示意图一;
[0054] 图1b为本申请提供的数据库唯一性约束处理方法实施例一的流程示意图二;
[0055] 图2为本申请提供的数据库唯一性约束处理方法实施例二的流程示意图;
[0056] 图3为本申请提供的数据库唯一性约束处理方法实施例三的流程示意图;
[0057] 图4为本申请提供的数据库唯一性约束处理装置实施例的结构示意图;
[0058] 图5为本申请提供的一种电子设备的结构示意图。

具体实施方式

[0059] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在根据本实施例的启示下作出的所有其他实施例,都属于本申请保护的范围。
[0060] 本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0061] 随着软件和硬件技术的飞速发展,大数据成为了互联网行业十分重要的议题。数据的爆炸式增长使得许多问题一一呈现在人们的视野中。这其中就包括在海量数据中进行插入大量数据时,如何实现数据去重的问题。
[0062] 许多数据库都拥有通过哈希索引或者B+树等方式实现唯一性约束,来达到去重的功能。比如哈希索引,对于要插入的每条数据,确定出该数据的唯一键值,根据唯一键值确定出该条数据对应的哈希值,也就是内存位置,再判断此内存位置是否存储数据。若未存储数据,说明该条数据未重复,将其插入数据表中。若已存储数据,说明该条数据是重复数据,将其删除。
[0063] 而现有技术需要计算所有已存储数据的哈希值,生成哈希表,哈希表作为临时数据会存储在内存中,在已存储数据的数据量以及待插入的数据量较大时,内存中的哈希表中的数据量会增大,导致内存占用率较大的问题;且随着哈希表的数据填充,新数据插入哈希表的冲突概率也随之增加,导致哈希表查询和写入时间增加,去重效率较低。
[0064] 针对现有技术中存在的问题,发明人在对数据库唯一性约束处理方法进行研究的过程中发现,为了减少内存占用率,根据待插入数据表中的唯一键计算哈希值,对待插入数据表进行表内去重,由于去重时仅涉及待插入数据,因此哈希表内存占用量较少。进而根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据,再将目标待插入数据插入已存储数据表中。而使用预设布隆过滤器数组和已存储数据表的稀疏索引确定目标待插入数据,占用内存较小,也有效减小了内存占用率。基于上述发明构思,设计了本申请中的数据库唯一性约束处理方案。
[0065] 本申请中数据库唯一性约束处理方法的执行主体可以是服务器,还可以是计算机、终端设备等可以操作数据库的设备,本申请不对其进行限定,下面以服务器为例进行说明。
[0066] 下面对本申请提供的数据库唯一性约束处理方法的应用场景进行说明。
[0067] 示例性的,在该应用场景中,服务器接收到一批待插入数据,将其存储在数据库的待插入数据表中,用户对该待插入数据表设置唯一键。
[0068] 进而服务器需要将这批待插入数据进行去重后插入已存储数据表中。首先根据待插入数据表中的唯一键,将待插入数据表中的重复待插入数据去除。
[0069] 再根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据,进而将目标待插入数据插入已存储数据表中,即可实现将这批待插入数据进行去重后插入已存储数据表中。再根据已存储数据表,更新预设布隆过滤器数组和已存储数据表的稀疏索引。
[0070] 需要说明的是,上述场景仅是本申请实施例提供的一种应用场景的示意,本申请实施例不对该场景中包括的各种设备的实际形态进行限定,也不对设备之间的交互方式进行限定,在方案的具体应用中,可以根据实际需求设定。
[0071] 下面,通过具体实施例对本申请的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
[0072] 图1a为本申请提供的数据库唯一性约束处理方法实施例一的流程示意图一,本申请实施例对待插入数据表进行表内去重,进而再根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定目标待插入数据,再将目标待插入数据插入已存储数据表中的情况进行说明。本实施例中的方法可以通过软件、硬件或者软硬件结合的方式来实现。如图1a所示,该数据库唯一性约束处理方法具体包括以下步骤:
[0073] S101:根据待插入数据表中的唯一键,对待插入数据表进行表内去重。服务器接收到待插入数据后,将其存储在数据库的待插入数据表中,用户对该待插入数据表设置唯一键。
[0074] 在本步骤中,用户设置好唯一键后,唯一键以Unique Key形式直接存储于待插入数据表的元数据中,服务器即可根据待插入数据表中的唯一键,对待插入数据表进行表内去重。
[0075] 服务器对待插入数据表中的每条待插入数据,根据待插入数据表中的唯一键,确定每个待插入数据的哈希值,若存在相同的哈希值,说明存在重复的数据,将相同的哈希值对应的待插入数据进行去重处理,保留其中一个待插入数据即可。
[0076] 需要说明的是,服务器也可根据待插入数据表中的分区键,对待插入数据表中的每条待插入数据进行分区,进而对于每个分区中的待插入数据,根据待插入数据表中的唯一键,进行区内去重。
[0077] 示例性的,表1为本申请实施例提供的待插入数据表。
[0078] 表1
[0079] 序号 学号 姓名 年级 身高 体重 成绩1 20220001 A1 1 120 30 130
2 20220002 A2 1 110 35 140
3 20220003 A3 1 120 35 160
4 20220004 A4 2 125 40 155
5 20220004 A4 2 125 40 155
6 20220005 A5 2 130 45 170
7 20220006 A6 3 140 45 260
8 20220007 A7 3 150 50 265
9 20220008 A8 3 155 55 245
10 20220008 A8 3 155 55 245
11 20220009 A9 4 160 55 270
12 20220010 A10 4 170 60 280
[0080] 在表1中,第4条数据和第5条数据是重复数据,第9条数据和第10条数据是重复数据,分区键为年级,唯一键为学号。根据分区键进行分区后,分为4个区,第一个分区包括第1条数据至第3条数据,第二个分区包括第4条数据至第6条数据,第三个分区包括第7条数据至第10条数据,第四个分区包括第11条数据至第12条数据。
[0081] 需要说明的是,上述例子仅是对待插入数据表进行示例,本申请实施例不对待插入数据表、待插入数据表内的数据、分区键、唯一键等进行限定,可根据实际情况进行确定。
[0082] S102:根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据。
[0083] 在本步骤中,服务器对待插入数据表进行表内去重后,为了保证待插入数据不与已存储数据表中的数据重复,根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组,确定出一部分目标待插入数据,再将未能确定为目标待插入数据的待插入数据,根据已存储数据表的稀疏索引,确定是否与已存储数据表中的数据重复,将不重复的待插入数据作为目标待插入数据。
[0084] 需要说明的是,若进行分区并进行区内去重后,需要对每个分区依次进行去重和插入处理,可通过加写锁的方式实现依次处理。对于区内去重后的每个分区,依次根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组,确定出一部分目标待插入数据,再将未能确定为目标待插入数据的待插入数据,根据已存储数据表的稀疏索引,确定是否与已存储数据表中的数据重复,将不重复的待插入数据作为目标待插入数据。
[0085] S103:将目标待插入数据插入已存储数据表中。
[0086] 在本步骤中,服务器确定出去重后的待插入数据表中的目标待插入数据后,将目标待插入数据插入已存储数据表中。
[0087] 需要说明的是,服务器将目标待插入数据插入已存储数据表中后,还需要更新预设布隆过滤器数组和稀疏索引,以便下次插入数据时进行去重。
[0088] 需要说明的是,更新布隆过滤器数组的方式为,根据预设数量个不同的预设第一哈希函数对已存储数据表中每个数据进行计算,将得到的哈希值对应的布隆过滤器数组位置的数值更新为1。预设数量可以是5、7,还可以是15。预设第一哈希函数可以是信息摘要4(Message Digest 4,简称:MD4)函数、信息摘要5(Message Digest 5,简称:MD5)函数,还可以是安全散列算法1(Secure Hash Algorithm 1,简称:SHA1)函数、cityHash64函数等。本申请实施例不对预设数量和预设哈希函数进行限定,可根据实际情况进行设置。
[0089] 需要说明的是,更新稀疏索引的方式为对已存储数据表中的数据排序后,重新建立稀疏索引。
[0090] 需要说明的是,若通过将待插入数据进行分区,再进行区内去重后确定出分区中的目标待插入数据时,需要将目标待插入数据插入已存储数据表中,并更新预设布隆过滤器数组和稀疏索引,然后处理下一个分区内的待插入数据,直到所有分区处理完成。
[0091] 需要说明的是,本方案可以使用单指令多数据流(Single Instruction Multiple Data,简称:SIMD)提高效率。
[0092] 示例性的,本方案在具有100列、100个分区、1亿行共400G的已存储数据表的情况下,插入具有100个分区、数据重复率为0.01%、大小为4G的100万行的待插入数据,处理速度为100.01秒,且结果正确。相比之下,Mysql完成该测试需要2个小时以上。
[0093] 需要说明的是,本方案在在插入数据时如果服务器发生单点故障,重启服务器后可以重新插入,依然能够保证数据的正确性。
[0094] 示例性的,图1b为本申请提供的数据库唯一性约束处理方法实施例一的流程示意图二。如图1b所示,服务器对待插入数据表中的每条待插入数据进行分区,分区M个区,进而对于每个分区进行区内去重,再根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,依次对每个分区进行处理,确定分区中的目标待插入数据,也就是去除与已存储数据表中重复的数据,并插入已存储数据表中。提高了去重效率,减小了内存占用。
[0095] 本实施例提供的数据库唯一性约束处理方法,通过对待插入数据表进行表内去重,进而根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定分区中的目标待插入数据,将目标待插入数据插入已存储数据表中,即可实现数据库唯一性约束处理,也就是插入的数据之间不重复,并且与已存储数据也不重复,保证数据的唯一性。相较于现有技术中计算所有已存储数据的哈希值,生成哈希表存储在内存中,本方案进行表内去重时,未涉及到已存储数据,进而采用预设布隆过滤器数组和已存储数据表的稀疏索引进行去重处理,占用内存较小,有效减小了内存占用率。同时可实现精准去重,还提高了去重效率。
[0096] 图2为本申请提供的数据库唯一性约束处理方法实施例二的流程示意图,在上述实施例的基础上,本申请实施例对服务器根据待插入数据表中的唯一键,确定待插入数据的哈希值,进而根据哈希值进行区内去重的情况进行说明。如图2所示,该数据库唯一性约束处理方法具体包括以下步骤:
[0097] S201:对于待插入数据表中每个待插入数据,依次根据待插入数据表中的唯一键,确定待插入数据对应的唯一键值。
[0098] 在本步骤中,用户设置好待插入数据表的唯一键后,服务器即可获取到该唯一键,进而对于待插入数据表中每个待插入数据,依次根据待插入数据表中的唯一键,确定待插入数据对应的唯一键值。
[0099] 示例性的,表2为本申请实施例提供的待插入数据表。
[0100] 表2
[0101]序号 学号 姓名 年级 身高 体重 成绩
1 20220006 A6 3 140 45 260
2 20220007 A7 3 150 50 265
3 20220008 A8 3 155 55 245
4 20220008 A8 3 155 55 245
[0102] 对于1号待插入数据,由于唯一键为学号,1号待插入数据对应的唯一键值为20220006、2号待插入数据对应的唯一键值为20220007、3号待插入数据对应的唯一键值为
20220008、4号待插入数据对应的唯一键值为20220008。
[0103] 需要说明的是,上述例子仅是对待插入数据进行示例,本申请实施例不对待插入数据、唯一键、唯一键值等进行限定,可根据实际情况进行确定。
[0104] S202:根据唯一键值和预设第二哈希函数,确定待插入数据对应的哈希值。
[0105] 在本步骤中,服务器确定待插入数据对应的唯一键值后,为了进行去重处理,需要根据唯一键值,确定待插入数据对应的哈希值。
[0106] 需要说明的是,预设第二哈希函数可以是信息摘要4(Message Digest 4,简称:MD4)函数、信息摘要5(Message Digest 5,简称:MD5)函数,还可以是安全散列算法1(Secure Hash Algorithm 1,简称:SHA1)函数、cityHash64函数等。本申请实施例不对预设第二哈希函数进行限定,可根据实际情况进行设置。
[0107] 需要说明的是,若待插入数据表存在多个唯一键,可将多个唯一键对应的键值进行合并,再确定哈希值。
[0108] S203:判断哈希值是否已存储在预设哈希值表中;若哈希值已存储在预设哈希值表中,则执行步骤S204;若哈希值未存储在预设哈希值表中,则执行步骤S205。
[0109] S204:将待插入数据删除。
[0110] 在上述步骤中,服务器得到待插入数据对应的哈希值后,与预设哈希值表中的哈希值进行对比,判断哈希值是否已存储在预设哈希值表中;若哈希值已存储在预设哈希值表中,说明该待插入数据是重复数据,需要将其删除。
[0111] 需要说明的是,若该待插入数据是分区内处理的第一个数据,在判断哈希值是否已存储在预设哈希值表中时,预设哈希值表中未存储任何数据。
[0112] S205:将待插入数据保留,并将哈希值存储至预设哈希值表中。
[0113] 在本步骤中,若哈希值未存储在预设哈希值表中,说明该待插入数据不是重复数据,需要将待插入数据保留,并将哈希值存储至预设哈希值表中,以便处理下一个待插入数据。
[0114] 需要说明的是,分区内的待插入数据都处理完成后,将预设哈希值表清空。
[0115] 本实施例提供的数据库唯一性约束处理方法,通过计算每个待插入数据的哈希值,并判断是否有相同的哈希值,也就是判断哈希值是否已存储在预设哈希值表中,实现表内去重,有效提高了去重效率,同时也减小了内存占用率。
[0116] 图3为本申请提供的数据库唯一性约束处理方法实施例三的流程示意图,在上述实施例的基础上,本申请实施例对服务器进行表内去重后,根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定出去重后的待插入数据表中的目标待插入数据的情况进行说明。如图3所示,该数据库唯一性约束处理方法具体包括以下步骤:
[0117] S301:根据预设数量个不同的预设第一哈希函数和预设布隆过滤器数组,确定去重后的待插入数据表中的目标待插入数据。
[0118] 在本步骤中,服务器进行表内去重后,根据预设数量个不同的预设第一哈希函数和预设布隆过滤器数组,确定去重后的待插入数据表中的内的目标待插入数据。
[0119] 具体的,对于去重后的待插入数据表中的每条待插入数据,根据待插入数据表中的唯一键,确定待插入数据对应的唯一键值;进而根据唯一键值和预设数量个不同的预设第一哈希函数,确定预设数量个哈希值;判断预设数量个哈希值在预设布隆过滤器数组中对应的数值中是否存在0,若预设数量个哈希值在预设布隆过滤器数组中对应的数值中存在0,则将该待插入数据作为目标待插入数据。若对应的数值全为1,说明不能确定该待插入数据是否为重复数据,还需要进一步判断。
[0120] 具体的,确定去重后的待插入数据表中的目标待插入数据的方式还可以是:对于去重后的待插入数据表中的每条待插入数据,根据待插入数据表中的唯一键,确定待插入数据对应的唯一键值;进而根据唯一键值和一个预设第一哈希函数,确定一个哈希值;判断该哈希值在预设布隆过滤器数组中对应的数值是否为0;若对应的数据为0,说明该待插入数据不是重复数据,将该待插入数据作为目标待插入数据;若对应的数值为1,不能确定该待插入数据是否为重复数据,继续使用下一个预设第一哈希函数确定哈希值,继续判断对应的数值是否为0,直到使用判断出对应的数值是否为0或者使用预设数量个预设第一哈希函数。若使用预设第一哈希函数得到的哈希值对应的数值全为1,说明不能确定该待插入数据是否为重复数据,还需要进一步判断。
[0121] 需要说明的是,预设数量可以是5、7,还可以是15。预设第一哈希函数可以是信息摘要4(Message Digest 4,简称:MD4)函数、信息摘要5(Message Digest 5,简称:MD5)函数,还可以是安全散列算法1(Secure Hash Algorithm 1,简称:SHA1)函数、cityHash64函数等。本申请实施例不对预设数量和预设第一哈希函数进行限定,可根据实际情况进行设置。
[0122] 需要说明的是,若已存储数据表中没有数据,则对应的预设布隆过滤器数组中每个位置的数值均为0。
[0123] 需要说明的是,若待插入数据表存在多个唯一键,可将多个唯一键对应的键值进行合并,再确定哈希值。
[0124] 需要说明的是,使用预设第一哈希函数和预设布隆过滤器数组,确定目标待插入数据的空间复杂度为:O(ΣK*N),其中:K为预设数量,N为预设布隆过滤器数组大小。时间复杂度为:O(ΣK*N'),其中:K为预设数量,N'为待插入数据量。
[0125] S302:对于去重后的待插入数据表中,除目标待插入数据外的每个待插入数据,根据稀疏索引,判断待插入数据是否存储在已存储数据表中;若待插入数据未存储在已存储数据表中,则执行步骤S303;若待插入数据已存储在已存储数据表中,则执行步骤S304。
[0126] S303:将待插入数据作为目标待插入数据。
[0127] 在本步骤中,服务器根据预设第一哈希函数和预设布隆过滤器数组,确定去重后的待插入数据表中的目标待插入数据后,对于未能确定是否为重复数据的待插入数据,还需要进一步判断。对于去重后的待插入数据表中,除目标待插入数据外的每个待插入数据,根据稀疏索引,判断待插入数据是否存储在已存储数据表中。
[0128] 服务器计算出待插入数据的位置索引,进而根据该位置索引和已存储数据表的稀疏索引,确定该位置索引对应的目标稀疏索引;进而确定出目标稀疏索引在已存储数据表中对应的数据,服务器再判断该待插入数据是否与目标稀疏索引对应的数据相同,也就是判断待插入数据是否存储在已存储数据表中。
[0129] 若待插入数据未存储在已存储数据表中,说明该待插入数据不是重复数据,将该待插入数据作为目标待插入数据。
[0130] S304:将待插入数据删除。
[0131] 在本步骤中,若待插入数据已存储在已存储数据表中,说明该待插入数据是重复数据,将该待插入数据删除。
[0132] 需要说明的是,根据预设数量个不同的预设第一哈希函数和预设布隆过滤器数组,确定去重后的待插入数据表中的目标待插入数据后,若去重后的待插入数据表中的待插入数据全部为目标待插入数据,则不需要执行步骤S302至步骤S304。
[0133] 本实施例提供的数据库唯一性约束处理方法,通过根据预设数量个不同的预设第一哈希函数和预设布隆过滤器数组,确定去重后的待插入数据表中的一部分目标待插入数据,进而对于不能确定是否为重复数据的待插入数据,根据稀疏索引进行确定,有效提高了去重的准确性,同时也提高了效率,减小了内存占用率。
[0134] 下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
[0135] 图4为本申请提供的数据库唯一性约束处理装置实施例的结构示意图;如图4所示,该数据库唯一性约束处理装置40包括:
[0136] 处理模块41,用于:
[0137] 根据待插入数据表中的唯一键,对所述待插入数据表进行表内去重;
[0138] 根据预设数量个不同的预设第一哈希函数、预设布隆过滤器数组和已存储数据表的稀疏索引,确定去重后的待插入数据表中的目标待插入数据;
[0139] 存储模块42,用于将所述目标待插入数据插入所述已存储数据表中。
[0140] 进一步地,所述处理模块41,具体用于:
[0141] 对于所述待插入数据表中每个待插入数据,依次根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0142] 根据所述唯一键值和预设第二哈希函数,确定所述待插入数据对应的哈希值;
[0143] 若所述哈希值已存储在预设哈希值表中,则将所述待插入数据删除;
[0144] 若所述哈希值未存储在预设哈希值表中,则将所述待插入数据保留,并将所述哈希值存储至所述预设哈希值表中。
[0145] 进一步地,所述处理模块41,具体还用于:
[0146] 根据所述预设数量个不同的所述预设第一哈希函数和所述预设布隆过滤器数组,确定所述去重后的待插入数据表中的内的目标待插入数据;
[0147] 对于所述去重后的待插入数据表中,除所述目标待插入数据外的每个待插入数据,根据所述稀疏索引,若判断出所述待插入数据未存储在所述已存储数据表中,将所述待插入数据作为目标待插入数据;
[0148] 若判断出所述待插入数据已存储在所述已存储数据表中,将所述待插入数据删除。
[0149] 进一步地,所述处理模块41,具体还用于:
[0150] 对于去重后的待插入数据表中每条待插入数据,根据所述待插入数据表中的唯一键,确定所述待插入数据对应的唯一键值;
[0151] 根据所述唯一键值和所述预设数量个不同的所述预设第一哈希函数,确定预设数量个哈希值;
[0152] 若所述预设数量个哈希值在所述预设布隆过滤器数组中对应的数值中存在0,则将所述待插入数据作为所述目标待插入数据。
[0153] 进一步地,所述处理模块41,还用于根据所述已存储数据表,更新所述预设布隆过滤器数组和所述稀疏索引。
[0154] 本实施例提供的数据库唯一性约束处理装置,用于执行前述任一方法实施例中的技术方案,其实现原理和技术效果类似,在此不再赘述。
[0155] 图5为本申请提供的一种电子设备的结构示意图。如图5所示,该电子设备50包括:
[0156] 处理器51,存储器52,以及通信接口53;
[0157] 所述存储器52用于存储所述处理器51的可执行指令;
[0158] 其中,所述处理器51配置为经由执行所述可执行指令来执行前述任一方法实施例中的技术方案。
[0159] 可选的,存储器52既可以是独立的,也可以跟处理器51集成在一起。
[0160] 可选的,当所述存储器52是独立于处理器51之外的器件时,所述电子设备50还可以包括:
[0161] 总线54,存储器52和通信接口53通过总线54与处理器51连接并完成相互间的通信,通信接口53用于和其他设备进行通信。
[0162] 可选的,通信接口53具体可以通过收发器实现。通信接口用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(random access memory,RAM),也可能还包括非易失性存储器(non‑volatile memory),例如至少一个磁盘存储器。
[0163] 总线54可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0164] 上述的处理器可以是通用处理器,包括中央处理器CPU、网络处理器(network processor,NP)等;还可以是数字信号处理器DSP、专用集成电路ASIC、现场可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0165] 该电子设备用于执行前述任一方法实施例中的技术方案,其实现原理和技术效果类似,在此不再赘述。
[0166] 本申请实施例还提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述任一方法实施例提供的技术方案。
[0167] 本申请实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现前述任一方法实施例提供的技术方案。
[0168] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0169] 最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或对其中部分或全部技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。