CN112800057B - 一种指纹表管理方法及装置 - Google Patents
一种指纹表管理方法及装置 Download PDFInfo
- Publication number
- CN112800057B CN112800057B CN202110091261.9A CN202110091261A CN112800057B CN 112800057 B CN112800057 B CN 112800057B CN 202110091261 A CN202110091261 A CN 202110091261A CN 112800057 B CN112800057 B CN 112800057B
- Authority
- CN
- China
- Prior art keywords
- hash bucket
- hash
- bucket
- linked list
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Collating Specific Patterns (AREA)
Abstract
本申请涉及数据存储技术领域,特别涉及一种指纹表管理方法及装置。所述方法包括:创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上。
Description
技术领域
本申请涉及数据存储技术领域,特别涉及一种指纹表管理方法及装置。
背景技术
为了迎合不断增长的业务需求,存储***必须提供更低的时延、更高的IOPS,进一步提高客户满意度。SSD盘相比传统HDD盘,能给存储***提供更低的时延,更高的IOPS,但是SSD盘价格较为昂贵。为了降低使用SSD盘的存储成本,重删技术识别并删除重复数据,提高存储空间利用率,成为了SSD盘存储(全闪存)的必备选择。
而在重删技术中,重复数据被删除后,将会频繁的通过指纹记录和查询完整数据地址。如何提供一个高效、快速的指纹表,将是重删技术的一个关键技术点。另外,在分布式存储之下,***将需要考虑相比传统企业存储更为频繁的扩容场景,使得重删所必需的指纹表的工作场景更加复杂,给指纹表的设计提出了更高的挑战。
发明内容
本申请提供了一种指纹表管理方法及装置,用以解决现有技术中存在的无法高效使用和管理指纹表的问题。
第一方面,本申请提供了一种指纹表管理方法,所述方法包括:
创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;
在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;
基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上。
可选地,所述方法还包括:
在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:
对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
可选地,若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
可选地,所述方法还包括:
在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;
将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
可选地,在一个哈希桶对应的链表中,针对x条指纹数据配置一个管理空间,以使得一个链表中管理空间占用的内存a和已分配给指纹数据使用而暂未使用的内存b之和最小,其中,
y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
第二方面,本申请提供了一种指纹表管理装置,所述装置包括:
第一创建单元,用于创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;
第二创建单元,用于在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;
存储单元,用于基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上。
可选地,所述装置还包括:
执行单元,用于在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:
对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
可选地,所述执行单元还用于:
若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
可选地,所述执行单元还用于:
在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;
将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
可选地,在一个哈希桶对应的链表中,针对x条指纹数据配置一个管理空间,以使得一个链表中管理空间占用的内存a和已分配给指纹数据使用而暂未使用的内存b之和最小,其中,
y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
第三方面,本申请实施例提供一种指纹表管理装置,该装置包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如上述第一方面中任一项所述的方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行如上述第一方面中任一项所述方法的步骤。
综上可知,本申请实施例提供的指纹表管理方法,创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上。
采用本申请实施例提供的指纹表管理方法,设置不同类型,不同功能的哈希桶,采用动态***的方式,以形成树形结构的指纹表,避免了单个哈希桶对应链表长度过长的问题,保证各链表长度平均,保证了指纹数据的访问效率。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。
图1为本申请实施例提供的一种指纹表管理方法的详细流程图;
图2为本申请实施例提供的一种指纹表的结构示意图;
图3为本申请实施例提供的一种指纹管理装置的结构示意图;
图4为本申请实施例提供的另一种指纹管理装置的结构示意图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
示例性的,参阅图1所示,为本申请实施例提供的一种指纹表管理方法的详细流程图,该方法包括以下步骤:
步骤100:创建包含N个第一类哈希桶的哈希桶集合,其中,上述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表。
本申请实施例中,在初始化时,预先创建N个哈希桶(即第一层级的哈希桶),每个哈希桶对应有一个链表,一个哈希桶的指针指向对应的链表,如,第一个哈希桶的指针指向链表1,第二个哈希桶的指针指向链表2,……,第N个哈希桶的指针指向链表N;本申请实施例中,针对每一哈希桶配置有对应的桶类型,并配置有对应的桶标识,如,第一个哈希桶的桶标识为0,第二个哈希桶的桶标识为1,……,第N个哈希桶的桶标识为N-1,通过一个标识能够寻址到对应的哈希桶。在未***数据之前,各哈希桶均为空(即哈希桶对应的链表均为空),N个哈希桶均为第一类哈希桶,所谓第一类哈希桶,指的是指针直接指向对应链表的哈希桶。当一个数据指纹经哈希计算后,确定出用于存储该一个数据指纹的哈希桶的桶标识,基于该桶标识寻址找到对应的哈希桶,并将该数据指纹存储至对应的哈希桶中,需要说明的是,在将数据指纹存储至一个第一类哈希桶时,即可直接将该数据指纹存储该一个第一类哈希桶对应的链表中。
需要说明的是,本申请实施例中,针对创建的N个第一层级的哈希桶,在进行指纹数据的存储时,会对指纹数据进行哈希计算,得到(0-N-1)中的任一数值,再根据该数值确定对应的用于存储指纹数据的哈希桶,那么,这样就能确保各指纹数据能够随机均衡至各哈希桶对应的链表中。
具体地,假设指纹数据的固定长度为24字节,那么,即可针对指纹数据的前6字节进行哈希计算,根据计算结果确定第一层级的用于存储该指纹数据的哈希桶。
步骤110:在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为上述任一个第一类哈希桶的子哈希桶,并将上述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶。
本申请实施例中,随着指纹数据的不断写入,各哈希桶对应链表中存储的指纹数据越来越多,对应链表的长度约越来越长,那么,当检测到任一第一类哈希桶对应的链表长度大于或等于设定阈值时,确定该链表达到最大允许长度,此时,就需要进行哈希桶***操作,创建M个第一类哈希桶作为该任一第一类哈希桶的子哈希桶,M为大于等于2的正整数,进一步地,将作为父哈希桶的该任一哈希桶配置为第二类哈希桶,所谓第二类哈希桶,指的是指针指向其子哈希桶的哈希桶,即上述任一哈希桶的指针指向M各子哈希桶,M个子哈希桶分别对应一个链表,如,子哈希桶1对应链表11(子哈希桶1的指针指向链表11),子哈希桶2对应链表12,……,子哈希桶M对应链表1M。
当然,未***的其他第一类子哈希桶的指针仍指向其原对应的链表。
步骤120:基于预设规则将上述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至上述子哈希桶的链表上。
本申请实施例中,遍历父哈希桶对应的链表,将父哈希桶对应链表中存储的指纹数据去除,并对每个指纹数据再进行一次哈希计算,根据计算结果确定用于存储该指纹数据的子哈希桶,并将该指纹数据写入确定出的子哈希桶对应的链表中,当父哈希桶对应链表中各指纹数据均迁移完成后,将父哈希桶的HEAD指针指向当前包含M个子哈希桶的内存首地址。
需要说明的是,在进行第二层级的哈希计算时,假设指纹数据字节长度为24字节,第一层级的哈希计算的对象为指纹数据字节为第1-6字节,那么,第二次哈希计算的对象为指纹数据的第7-12字节,……。
本申请实施例中,在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
进一步地,若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
也就是说,从第一层级哈希桶开始,对新的数据指纹的第一字段进行第一哈希计算,根据第一哈希结果确定用于存储该新的数据指纹的目标哈希桶,接着,判断该目标哈希桶是否为第一类哈希桶,若是,则直接将该新的数据指纹存储至该目标哈希桶对应的链表中,完成该新的数据指纹的写入操作;若判定该目标哈希桶不是第一类哈希桶(为第二类哈希桶),则转入第二层级哈希桶,即需要从该目标哈希桶的子哈希桶中确定用于存储该新的数据指纹的目标哈希桶,此时,可以对新的数据指纹的第二字段进行第二哈希计算,根据第二哈希结果确定用于存储该新的数据指纹的目标哈希桶,接着,判断该目标哈希桶是否为第一类哈希桶,若仍不是,则需要转入第三层级哈希桶,即需要从该新的目标哈希桶的子哈希桶中确定用于存储该新的数据指纹的目标哈希桶,此时,可以对新的数据指纹的第三字段进行第三哈希计算,根据第三哈希结果确定用于存储该新的数据指纹的目标哈希桶。
本申请实施例中,根据各阶段判断结果,依次执行以上操作,直至确定出的用于存储新的指纹数据的目标哈希桶为第一类哈希桶时,将该新的指纹数据存储至该目标哈希桶对应的链表中。
需要说明的是,任意两个层级哈希计算所采用的字段不完全相同,为了保证各级哈希函数的内部均衡性,哈希0、哈希1、哈希2、哈希3计算哈希必须是独立的,比如哈希0的计算结果与哈希1的计算结果应该是无关联的,否则子哈希函数将起不到进一步打散数据的作用,无法解决冲突链过长问题。实际应用中,假设一个数据指纹为24字节,那么即可将数据指纹分为多段,各级哈希函数在计算哈希值时只采用各自独立的字节段进行计算。比如,假定最大***深度为4,哈希0使用指纹数据的第一个6字节(字节1-6),哈希1使用指纹数据的第2个6字节(字节7-12),以此类推。这样由于各级哈希极端实际使用的参数就是独立的,那么计算结果也就不具有相关性。
更进一步地,在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
实际应用中,链表中存储的数据指纹也会执行删除操作,即若检测到数据指纹删除指令,则需要找到存储该数据指纹的哈希桶,并从该哈希桶对应的链表中删除该数据指纹,进一步地,若检测到最低层级的一个子哈希桶对应链表长度与其兄弟哈希桶对应链表长度之和小于设定阈值时,确定需要进行哈希桶合并操作,即将该一个子哈希桶的父哈希桶设置为第一类哈希桶,并将该一个子哈希桶对应链表及其兄弟哈希桶对应链表中存储的指纹数据迁移至父哈希桶对应的链表中,以及在确定指纹数据迁移完成之后,删除该一个子哈希桶及其兄弟哈希桶,回收被删除的额哈希桶对应链表所占用的内存。
综上可知,本申请所实现的指纹表,允许在指纹数据***时,哈希桶进行***,也允许在删除指纹数据后,当链表长度及兄弟哈希桶冲对应突链长度之和小于阈值,合并哈希桶。为了保证哈希桶在合并和***过程中不产生并发操作,本申请以原始一级哈希桶为粒度,每个原始哈希桶一个锁,原始哈希桶下面的所有子哈希桶公用此把锁。对原始哈希桶下所有子哈希桶的操作,都必须持有对应的锁进行。
进一步地,本申请中对链表结果也进行了改进,针对x条指纹数据配置一个管理空间,以使得链表中管理空间占用内存与已分配给指纹数据使用而暂未使用的内部之和最小,具体地,假设管理空间占用内存与已分配给指纹数据使用而暂未使用的内部之和为y,y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
例如,假设x条指纹数据存储在一个连续的内存块内,针对一个连续的内存块,只提供一个Next指针(指针大小为8字节),指向下一个内存块。以当条链表存储64个指纹数据为例,计算x的合适取值以保证链表中额外消耗内存y最小。额外消耗内存分为两部分,一部分为管理空间(Next指针)消耗的空间,ypoint=64/x*8=512/x;另一部分为已分配给指纹数据使用而暂未使用得空闲,由于一个连续的内存块中实际存放指纹数据的数量为[1,x]中的任意值,当取值为x时,分配的空间均被使用,当取值为1时,还存在x-1个用于存储指纹数据的空间未被使用,取平均值(1+x)/2,单条指纹数据取24字节,浪费空间为yempty=(x–(1+x)/2)*24=12*(x-1)。总额外消耗空间:y=ypoint+yempty=512/x+12*(x-1)。对y求导数,根据y‘=0,求取当x2=512/12时,x取7时,y最小。
为考虑内存对齐,从以上理论计算,能确定y随x的变化存在一个最小值,以及确定x的大概范围。再考虑对齐,按照上述公式,列举x的值,得到y值,从而可进一步确定x的取值,x为正整数。
下面结合具体应用场景对本申请实施例提供的指纹表的结构进行详细说明。示例性的,参阅图2所示,为本申请实施例提供的一种指纹表的结构示意图,首先说明的是,类型为Type 0的哈希桶,其指针直接指向对应链表,类型为Type1的哈希桶,其指针直接指向其子哈希桶,原始哈希桶集合可以包括若干第一层级的哈希桶(哈希桶1,哈希桶2,哈希桶3,……),其中,哈希桶1和哈希桶3的类型为Type 0,其指针直接指向对应链表,哈希桶2的类型为Type 1,其指针指向其***出的2个子哈希桶,哈希桶2***出的2个子哈希桶分别为哈希桶21和哈希桶22,其中,哈希桶21的类型为Type 0,其指针直接指向对应链表,哈希桶22的类型为Type 1,其指针指向其***出的2个子哈希桶,哈希桶22***出的2个子哈希桶分别为哈希桶221和哈希桶222,其中,哈希桶221和哈希桶222的类型均为Type 0,其指针直接指向对应链表。
示例性的,参阅图3所示,为本申请实施例提供的一种指纹表管理装置的结构示意图,所述装置包括:
第一创建单元30,用于创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;
第二创建单元31,用于在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;
存储单元32,用于基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上。
可选地,所述装置还包括:
执行单元,用于在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:
对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
可选地,所述执行单元还用于:
若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
可选地,所述执行单元还用于:
在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;
将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
可选地,在一个哈希桶对应的链表中,针对x条指纹数据配置一个管理空间,以使得一个链表中管理空间占用的内存a和已分配给指纹数据使用而暂未使用的内存b之和最小,其中,
y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
以上这些单元可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个单元通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些单元可以集成在一起,以片上***(system-on-a-chip,简称SOC)的形式实现。
进一步地,本申请实施例提供的指纹表管理装置,从硬件层面而言,所述指纹表管理装置的硬件架构示意图可以参见图4所示,所述指纹表管理装置可以包括:存储器40和处理器41,
存储器40用于存储程序指令;处理器41调用存储器40中存储的程序指令,按照获得的程序指令执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本申请还提供一种指纹表管理装置,包括用于执行上述方法实施例的至少一个处理元件(或芯片)。
可选地,本申请还提供一种程序产品,例如计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使该计算机执行上述方法实施例。
这里,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(RadomAccess Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (8)
1.一种指纹表管理方法,其特征在于,所述方法包括:
创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;
在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;
基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上;
在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:
对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
2.如权利要求1所述的方法,其特征在于,若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;
将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
4.如权利要求1-3任一项所述的方法,其特征在于,在一个哈希桶对应的链表中,针对x条指纹数据配置一个管理空间,以使得一个链表中管理空间占用的内存a和已分配给指纹数据使用而暂未使用的内存b之和最小,其中,
y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
5.一种指纹表管理装置,其特征在于,所述装置包括:
第一创建单元,用于创建包含N个第一类哈希桶的哈希桶集合,其中,所述哈希桶集合中每一个第一类哈希桶分别对应一个链表,第一类哈希桶指针指向对应的链表;
第二创建单元,用于在检测到任一个第一类哈希桶对应的链表的长度大于设定阈值时,创建M个第一类哈希桶作为所述任一个第一类哈希桶的子哈希桶,并将所述任一个第一类哈希桶配置为第二类哈希桶,其中,M个子哈希桶分别对应一个链表,第二类哈希桶指针指向对应的子哈希桶;
存储单元,用于基于预设规则将所述任一个第一类哈希桶对应的链表中存储的各指纹数据存储至所述子哈希桶的链表上;
执行单元,用于在确定有新的指纹数据写入时,从第一层级哈希桶开始,循环执行以下操作,直至确定出的用于存储所述新的指纹数据的当前层级的目标哈希桶为第一类哈希桶:
对所述新的指纹数据的第P字段进行哈希处理,确定用于存储所述新的指纹数据的第P层级的目标哈希桶;若确定出的第P层级的目标哈希桶为第二类哈希桶,则对所述新的指纹数据的第P+1字段进行哈希处理,从第P层级的目标哈希桶的子哈希桶中确定用于存储所述新的指纹数据的第P+1层级的目标哈希桶,其中,任意两个层级对应的字段不完全相同。
6.如权利要求5所述的装置,其特征在于,所述执行单元还用于:
若确定出的当前层级的目标哈希桶为第一类哈希桶,则将所述新的指纹数据写入当前层级的目标哈希桶对应的链表中。
7.如权利要求5所述的装置,其特征在于,所述执行单元还用于:
在确定一个子哈希桶对应的链表长度与其兄弟哈希桶对应的链表长度之和小于设定阈值,则将所述一个子哈希桶的父哈希桶配置为第一类哈希桶;
将所述一个子哈希桶和其兄弟哈希桶对应的链表中存储的各指纹数据存储至所述父哈希桶的链表上,并删除所述一个子哈希桶和其兄弟哈希桶。
8.如权利要求5-7任一项所述的装置,其特征在于,在一个哈希桶对应的链表中,针对x条指纹数据配置一个管理空间,以使得一个链表中管理空间占用的内存a和已分配给指纹数据使用而暂未使用的内存b之和最小,其中,
y=(n*k/x)+(m*(x+1)/2),其中,n为一个链表可存储的数据指纹的数量,k为一个管理空间占用的字节长度,m为一个数据指纹的字节长度;
计算x值的过程为:对上述y进行求导操作,当导数最小时,取x值,x取整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110091261.9A CN112800057B (zh) | 2021-01-22 | 2021-01-22 | 一种指纹表管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110091261.9A CN112800057B (zh) | 2021-01-22 | 2021-01-22 | 一种指纹表管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112800057A CN112800057A (zh) | 2021-05-14 |
CN112800057B true CN112800057B (zh) | 2023-06-09 |
Family
ID=75811283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110091261.9A Active CN112800057B (zh) | 2021-01-22 | 2021-01-22 | 一种指纹表管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112800057B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986891B (zh) * | 2021-09-09 | 2024-03-12 | 新华三大数据技术有限公司 | 一种重复数据删除方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003030040A (ja) * | 2001-07-12 | 2003-01-31 | Nec Commun Syst Ltd | オブジェクトデータベースシステムの複数ハッシュインデックスおよび非ユニークインデックス管理方式 |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN110069496A (zh) * | 2019-03-20 | 2019-07-30 | 韶关学院 | 一种新型链式哈希表构建方法及装置 |
CN110457535A (zh) * | 2019-08-14 | 2019-11-15 | 广州虎牙科技有限公司 | 哈希桶查找方法、哈希表存储、哈希表查找方法和装置 |
CN112199333A (zh) * | 2020-09-24 | 2021-01-08 | 武汉绿色网络信息服务有限责任公司 | 一种支持多值索引文件的存储方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110489419A (zh) * | 2019-08-08 | 2019-11-22 | 东北大学 | 一种基于多层局部敏感哈希的k最近邻近似查询方法 |
-
2021
- 2021-01-22 CN CN202110091261.9A patent/CN112800057B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003030040A (ja) * | 2001-07-12 | 2003-01-31 | Nec Commun Syst Ltd | オブジェクトデータベースシステムの複数ハッシュインデックスおよび非ユニークインデックス管理方式 |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN110069496A (zh) * | 2019-03-20 | 2019-07-30 | 韶关学院 | 一种新型链式哈希表构建方法及装置 |
CN110457535A (zh) * | 2019-08-14 | 2019-11-15 | 广州虎牙科技有限公司 | 哈希桶查找方法、哈希表存储、哈希表查找方法和装置 |
CN112199333A (zh) * | 2020-09-24 | 2021-01-08 | 武汉绿色网络信息服务有限责任公司 | 一种支持多值索引文件的存储方法和装置 |
Non-Patent Citations (2)
Title |
---|
Svante Janson ; Alfredo Viola."A unified approach to linear probing hashing with buckets".《Algorithmica》.2016,全文. * |
哈希桶Variety-B树的数据流处理方法;王竹荣;伊珍珍;黑新宏;冯华萍;费蓉;;西安理工大学学报(01);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112800057A (zh) | 2021-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11461027B2 (en) | Deduplication-aware load balancing in distributed storage systems | |
US7664927B2 (en) | Hash tables | |
JP5943095B2 (ja) | 複合不揮発性記憶装置のためのデータ移行 | |
US7558802B2 (en) | Information retrieving system | |
US20200213091A1 (en) | Circuit and method for overcoming memory bottleneck of asic-resistant cryptographic algorithms | |
CN109032803B (zh) | 数据处理方法和装置、客户端 | |
US8606791B2 (en) | Concurrently accessed hash table | |
CN112783831B (zh) | 一种文件迁移方法及装置 | |
CN112000426B (zh) | 一种数据处理方法及装置 | |
CN109460406A (zh) | 一种数据处理方法及装置 | |
CN109145053B (zh) | 数据处理方法和装置、客户端、服务器 | |
CN112114753A (zh) | 一种数据写入方法、装置及设备 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
CN114721594A (zh) | 一种分布式存储方法、装置、设备及机器可读存储介质 | |
CN112800057B (zh) | 一种指纹表管理方法及装置 | |
CN108399175B (zh) | 一种数据存储、查询方法及其装置 | |
CN113672255B (zh) | 一种分布式存储软件升级方法及装置 | |
Lin et al. | Infinite-llm: Efficient llm service for long context with distattention and distributed kvcache | |
CN106383826A (zh) | 数据库查询方法和装置 | |
CN113505130B (zh) | 一种哈希表的处理方法 | |
CN104298614A (zh) | 数据块在存储设备中存储方法和存储设备 | |
CN113342897A (zh) | 一种数据同步的方法及装置 | |
CN111984554B (zh) | 一种数据处理方法及装置 | |
CN113986891B (zh) | 一种重复数据删除方法及装置 | |
CN113641871B (zh) | 一种无锁散列方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |