CN105320775A - 数据的存取方法和装置 - Google Patents
数据的存取方法和装置 Download PDFInfo
- Publication number
- CN105320775A CN105320775A CN201510766796.6A CN201510766796A CN105320775A CN 105320775 A CN105320775 A CN 105320775A CN 201510766796 A CN201510766796 A CN 201510766796A CN 105320775 A CN105320775 A CN 105320775A
- Authority
- CN
- China
- Prior art keywords
- hash
- data
- cryptographic hash
- key
- conflict
- 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.)
- Granted
Links
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/2246—Trees, e.g. B+trees
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种数据的存取方法和装置,属于数据库技术领域。所述方法包括:获取数据的存取方式和key;根据key的哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立;在数据的存取位置处根据存储方式存取数据。磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及数据的存取方法和装置。
背景技术
随着大数据时代的到来,数据库性能成为人们关注的重点。在众多因素中,数据库中数据的存取性能是影响数据库性能的重要因素之一,而数据常以key/value(关键字/数据值)的形式存储于数据库中。因此,key/value数据的存取方法成为研究重点。
目前,数据常以哈希方式进行存储,获取到key/value数据后,计算key的哈希值,将哈希值、key、value存储在内存中,当内存中存储的数据数量超过系统内存总量时,将内存中的数据存储到磁盘中保存。但由于磁盘中查找数据时速度较慢,因此基于上述哈希存储方法的key/value数据存取方法为:在系统初始化时,将磁盘中的数据读取到内存中,获取数据的存取方式后,在内存中按照存取方式存取该数据。其中,数据的存取方式包括:读取、写入、修改或删除等。
上述方式数据存取过程在内存中进行,对内存配置要求较高。初始化时需要将磁盘中数据读回内存,读回过程需要消耗大量时间,增加了方法的初始化时间。
发明内容
为解决上述问题,本发明实施例提出了一种数据的存取方法和装置。
一方面,本发明实施例提供了一种数据的存取方法,所述方法包括:
获取数据的存取方式和所述数据的第一关键字key;
计算所述第一key的第一哈希值;
根据所述第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定所述数据的存取位置,所述哈希索引区按变形B+树的方式建立;
在所述数据的存取位置处根据所述存储方式存取所述数据;
其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
另一方面,本发明实施例提供了一种数据的存取装置,包括:
第一获取模块,用于获取数据的存取方式和所述数据的第一关键字key;
计算模块,用于计算所述第一获取模块获取到的第一key的第一哈希值;
第一确定模块,用于根据所述计算模块计算出的第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定所述数据的存取位置,所述哈希索引区按变形B+树的方式建立;
存取模块,用于在所述第一确定模块确定的数据的存取位置处根据所述第一获取模块获取到的存储方式存取所述数据;
其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
有益效果如下:
获取数据的存取方式和第一key,根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
附图说明
下面将参照附图描述本发明的具体实施例,其中:
图1示出了本发明一种实施例中提供的一种数据的存取方法的流程示意图;
图2示出了本发明另一种实施例中提供的一种数据存储的方法的流程示意图;
图3示出了本发明另一种实施例中提供的一种哈希跳表结构示意图;
图4示出了本发明另一种实施例中提供的一种磁盘初始创建哈希索引区的流程示意图;
图5示出了本发明另一种实施例中提供的一种哈希环示意图;
图6示出了本发明另一种实施例中提供的一种哈希索引区示意图;
图7示出了本发明另一种实施例中提供的一种将内存中存储的数据与磁盘中存储的数据进行合并的方法流程图;
图8示出了本发明另一种实施例中提供的第一种磁盘存储数据结构示意图;
图9示出了本发明另一种实施例中提供的第二种磁盘存储数据结构示意图;
图10示出了本发明另一种实施例中提供的数据的存储位置示意图;
图11示出了本发明另一种实施例中提供的另一种数据的存取方法的流程示意图;
图12示出了本发明另一种实施例中提供的另一种哈希跳表结构示意图;
图13示出了本发明另一种实施例中提供的第三种磁盘存储数据结构示意图;
图14示出了本发明另一种实施例中提供的第一种数据的存取装置的结构示意图;
图15示出了本发明另一种实施例中提供的第二种数据的存取装置的结构示意图;
图16示出了本发明另一种实施例中提供的第三种数据的存取装置的结构示意图;
图17示出了本发明另一种实施例中提供的一种第一确定模块的结构示意图;
图18示出了本发明另一种实施例中提供的第四种数据的存取装置的结构示意图;
图19示出了本发明另一种实施例中提供的一种第八确定单元的结构示意图;
图20示出了本发明另一种实施例中提供的第五种数据的存取装置的结构示意图;
图21示出了本发明另一种实施例中提供的一种合并模块的结构示意图。
具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
参见图1所示的实施例,本实施例提供了一种数据的存取方法,本实施例提供的方法流程具体如下:
101:获取数据的存取方式和数据的第一关键字key;
102:计算第一key的第一哈希值;
103:根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,哈希索引区按变形B+树的方式建立;
104:在数据的存取位置处根据存储方式存取数据。
其中,变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
有益效果:
获取数据的存取方式和第一key,根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
为了更好的对数据进行存取,满足高性能的存取服务,上述实施例中描述的数据存取的方法中的数据以图2所示数据存储的方法进行存储。本实施例提供的数据存储方法具体如下:
201:在内存中建立哈希跳表,哈希跳表用于存储数据的哈希值、key、value;
本实施例不对建立哈希跳表的具体方法进行具体限定。
例如建立图3所示的哈希跳表。
本实施例中建立的哈希跳表内存储的哈希值均不相同。在实际应用中,存在不同的key计算出相同的哈希值的情况,为了适应该种情况,建立哈希跳表后,当出现哈希值相同的数据时,在内存中建立与哈希跳表关联的冲突哈希跳表,冲突哈希跳表用于存储冲突数据,冲突数据的哈希值与哈希跳表中哈希值相同,但冲突数据对应的key与哈希跳表中相同哈希值对应的key不同。
202:获取哈希值范围,根据哈希值范围在磁盘中建立哈希索引区和数据区。
其中,数据区用于存储数据的key和value,哈希索引区用于存储索引,索引为数据的哈希值和数据在数据区的存储位置。
哈希索引区可以按变形B+树的方式建立,该变形B+树为树的前m-1级分别记录下一级的开始哈希值,本级的下一个值直接以存储顺序中的位置确定,每一级中的值需要前一个值满阶后才能有下一个值的B+树。即各层级中除了最后一个节点外,前面所有节点都是满阶的B+树。
获取哈希值范围的具体方法本实施例也不进行具体限定。例如:获取key范围,获取key范围对应的哈希值范围。又例如,若已存储有相关数据,则根据相关数据的key范围获取哈希值范围。
本实施例中建立的哈希索引区内存储的哈希值均不相同。在实际应用中,存在不同的key计算出相同的哈希值的情况,为了适应该种情况,建立哈希索引区后,当出现哈希值相同的数据时,在磁盘中建立与哈希索引区关联的冲突哈希索引区,冲突哈希索引区用于存储冲突索引,冲突索引的哈希值与哈希索引区中哈希值相同,但冲突索引对应的key与哈希索引区中相同哈希值对应的key不同。
如图4所示,利用本实施例提供的方法存储数据前,若系统未存储有相关数据,则步骤202存储数据时,初始节点数为1,当该初始节点对应数据数量达到阈值时,会将该初始节点进行分裂,并将新节点插入哈希索引区或冲突哈希索引区。随着实际存储的数据的增多,可以建立图5所示的哈希环。
若系统存储有相关数据,则步骤202存储数据时,根据相关数据的情况创建n个初始节点,该初始节点数量与key对应的哈希以及阈值相关。
另外,哈希索引区或冲突哈希索引区中各节点按顺序存储于磁盘中,其中,叶子节点之间不预留存储位置,非叶子节点之间预留存储位置。
以图6(a)所示的哈希索引区为例:若节点0(根节点)存储于位置0处,则节点1存储于位置1处,预留出图6(b)虚线所示的节点6的位置,则节点2存储于位置3处,节点3存储于位置4处,节点4存储于位置5处,节点5由于是叶子节点,不预留存储位置,因此节点5存储于位置6处。存储结果如表1所示。
表1
存储位置 | 节点 |
0 | 节点0 |
1 | 节点1 |
2 | |
3 | 节点2 |
4 | 节点3 |
5 | 节点4 |
6 | 节点5 |
此外,数据区中数据值按照key至的哈希值顺序存在磁盘中,在哈希值相冲突时,按照数据产生顺序依次存储。
需要说明的是,本实施例中的冲突哈希跳表和冲突哈希索引数据区,均在有哈希值冲突的时候才建立,如果没有冲突哈希值则不建立相应结构,如果同一个哈希值存在多次冲突,每次冲突都会存储在新的冲突跳表和新的冲突哈希索引数据区中,冲突的跳表和冲突的哈希索引数据区的结构及内容存放方式同哈希跳表和哈希索引数据区完全一致。
另外,内存中是否建立冲突哈希跳表与磁盘中是否建立冲突哈希索引区也不存在必然的联系关系。
此外,本实施例仅以先执行步骤201在内存中建立哈希跳表再执行步骤202在磁盘中建立哈希索引区和数据区的顺序说明本实施例提供的数据存储方法,在实际应用中,也可以先执行步骤202再执行步骤201,或者同时执行步骤201和步骤202,本实施例不对步骤201和步骤202的具体执行顺序进行限定。
此外,由于内存容量有限,执行本实施例提供的方法进行数据存取的同时,可以监控内存中存储数据的数量,当内存中存储的数据数量(即哈希跳表和冲突哈希跳表中存储的数据总数量)达到预设数量后,还会将内存中存储的数据与磁盘中存储的数据进行合并,具体方法详见图7。
701:将哈希跳表和冲突哈希跳表及哈希索引区和冲突哈希索引区中数据按哈希值排序,依次读取排序后各数据,确定当前读取数据的第六哈希值、第六key和当前读取数据的value;
具体的,将哈希跳表和冲突哈希跳表中的数据按哈希值排序,将哈希索引区和冲突哈希索引区中的数据按哈希值排序。
702:确定哈希索引区中是否存在与第六哈希值相同的第七哈希值,若哈希索引区中存在与第六哈希值相同的第七哈希值,则执行步骤703,若哈希索引区中未存在与第六哈希值相同的第七哈希值,则执行步骤706;
703:确定第七哈希值对应的第七key与第六key是否相同,若第七key与第六key相同,则执行步骤704,若第七key与第六key不相同,则执行步骤705;
704:当前读取数据的value不为空时,将第七哈希值对应的value替换为读取数据的value,当前读取数据的value为空时,删除第七哈希值对应的数据;
705:将当前读取数据合并至冲突哈希索引区中;
此步骤具体实施时,可以按照如下四个步骤进行:
步骤一:确定冲突哈希索引区中是否存在与第六哈希值相同的第八哈希值,若冲突哈希索引区中存在与第六哈希值相同的第八哈希值,则执行步骤二,若冲突哈希索引区中未存在与第六哈希值相同的第八哈希值,则执行步骤四;
步骤二:确定第八哈希值对应的第八key与第六key是否相同,若第八key与第六key相同,则执行步骤三,若第八key与第六key不相同,则执行步骤四;
步骤三:当前读取数据的value不为空时,将第八哈希值对应的value替换为当前读取数据的value,当前读取数据的value为空时,删除第八哈希值对应的数据;
步骤四:当前读取数据的value不为空时,将第六key和当前读取数据的value增加至数据区,并将第六哈希值和当前读取数据在数据区的存储位置增加至冲突哈希索引区中,当前读取数据的value为空时,完成当前读取数据的合并。
706:当前读取数据的value不为空时,将第六key和当前读取数据的value增加至数据区,并将第六哈希值和当前读取数据在数据区的存储位置增加至哈希索引区中,当前读取数据的value为空时,完成当前读取数据的合并。
由于步骤701中已将将内存中数据按哈希值排序,因此若此次读取的第六哈希值与前一次读取数据的哈希值相同,则说明此次读取的是冲突数据,且上一数据已经加入哈希索引区,此次数据应该加入冲突哈希索引区。因此,可以执行步骤701之后,先确定第六哈希值与前一次读取数据的哈希值是否相同,若第六哈希值与前一次读取数据的哈希值相同,则直接执行步骤705,若第六哈希值与前一次读取数据的哈希值不相同,则执行步骤702。
由于图7所示的数据合并方法涉及的情况较多,下面针对不同情况分别举例说明。下述例子中磁盘中数据均如图8所示。
例子1:若当前读取数据为<0,1,A>,其中0为哈希值,1为key,A为value。图8哈希索引区中存在与0相同的第五哈希值(节点1),确定第五哈希值对应的第五key与1也相同,同时当前读取数据的value为A不为空,因此,将图8中节点A中的value替换为A,如图9(a)所示。
例子2:若当前读取数据为<0,1,>,其中value为空。图8哈希索引区中节点1的哈希值及key也为0和1,但当前读取数据的value为空,因此,将图8中节点A删除,如图9(b)所示。
例子3:若当前读取数据为<1,1,A>,图8中节点2的哈希值为1,节点2的key为2,与当前数据的key不同,将当前读取数据合并至冲突哈希索引区中,由于图8中未有冲突哈希索引区,因此新建冲突哈希索引区,如图9(c)所示。
例子4:若当前读取数据为<2,3,A>,图8中无节点的哈希值为2,同时当前读取数据的value为A不为空,将<2,3,A>增加至索引区中,如图9(d)所示。
例子5:若当前读取数据为<2,1,>,图8中无节点的哈希值为2,但当前读取数据的value为为空,因此结束流程。
需要说明的是,为了不影响数据的使用,通过图7所示实施例所示的方法将内存中存储的数据与磁盘中存储的数据进行合并时,数据依然可以被用户处理。为了避免数据合并时造成用户处理数据不一致,在数据合并时,可以先在内存中生成新的哈希跳表,锁定需合并的哈希跳表(有冲突哈希跳表的包含冲突哈希跳表),以使合并期间用户增加、修改和删除操作均在新的哈希跳表中完成,在合并后,将需合并的哈希跳表删除即可。在磁盘中将现有哈希索引区也锁定,同时产生新的哈希索引区,所有合并数据记录到新的哈希索引区中,而现有哈希索引区为用户进行查询操作时提供相应数据,在合并后,将现有哈希索引区删除即可。
通过本实施例提供的存储方法存储数据时,新产生的数据在内存中,以作高速缓存,较旧数据存储在磁盘中,以容纳海量数据。如图10所示,数据的存储位置具体为,若存储数据总量未达到内存的预设数量,则存储于内存中,若若存储数据总量达到内存的预设数量,则新产生的数据在内存中,较旧数据存储在磁盘中。
有益效果:
内存中通过哈希跳表和与哈希跳表关联的冲突哈希跳表形式存储数据,使用哈希跳表方式存储数据可以提高数据存取速度及合并排序速度。
磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,存取数据时,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
另外,数据合并时,通过将内存中的数据排序,可以将冲突数据直接存储于冲突哈希索引区中,缩短了数据合并所需时间。
将数据分散至内存和磁盘中存储,且内存采用哈希跳表形式,磁盘采用变形B+树的形式将数据与哈希值分离,可以达到快速存储海量数据的目的。
图11示出了对通过图2所示实施例存储的数据进行存取操作的具体步骤。
1101:获取数据的存取方式和数据的第一关键字key;
其中,存取方式为读取、写入、修改或删除。当然,存取方式除上述四种方式外还可以有其他方式,本实施例及后续实施例仅以存取方式为读取、写入、修改或删除为例进行说明。
本实施例不对获取数据的存取方式和第一key的具体方法进行限定,例如根据SQL(StructuredQueryLanguage,结构化查询语言)语句获取数据的存取方式和数据的第一key。
1102:计算第一key的第一哈希值;
其中,计算后的哈希值为8字节长度的长整型,取值范围从2^63到-2^63-1。本实施例不对计算的具体算法进行限定。
1103:确定内存的哈希跳表中是否有与第一哈希值相同的第二哈希值,若哈希跳表中有与第一哈希值相同的第二哈希值,则执行步骤1104,若哈希跳表中未有与第一哈希值相同的第二哈希值,则执行1110;
1104:确定第二哈希值对应的第二key是否与第一key相同,若第二key与第一key相同,则执行步骤1105,若第二key与第一key不相同,则执行步骤1106;
为了防止不同的key计算得到的对应哈希值相同的情况,在确定哈希跳表中有与第一哈希值相同的第二哈希值后,还需要确定第二哈希值对应的第二key是否与第一key相同。
1105:将第二哈希值对应数据值value的存储位置确定为数据的存取位置,执行步骤1111;
若内存中数据以{hash,key,value}形式存储,则先确定存储第二哈希值对应数据值value的存储位置,将该存储位置确定为数据的存储位置。
1106:确定内存中是否有冲突哈希跳表,若内存中有冲突哈希跳表,则执行步骤1107,若内存中未有冲突哈希跳表,则执行步骤1110;
1107:确定冲突哈希跳表中是否有与第一哈希值相同的第三哈希值,若冲突哈希跳表中有与第一哈希值相同的第三哈希值,则执行步骤1108,若冲突哈希跳表中未有与第一哈希值相同的第三哈希值,则执行步骤1110;
1108:确定第三哈希值对应的第三key是否与第一key相同,若第三key与第一key相同,则执行步骤1109,若第三key与第一key不相同,则执行步骤1110;
1109:将第三哈希值对应数据值value的存储位置确定为数据的存取位置,执行步骤1111;
1110:根据存取方式从哈希跳表或哈希索引区中确定数据的存取位置;
具体实施时,根据存取方式的不同,此步骤的实现过程不同。具体的:
●存取方式为写入、修改或删除:
从哈希跳表中选择一个未存储数据的空位置作为数据的存取位置;
●存取方式为读取:
1、确定哈希索引区中是否有与第一哈希值相同的第四哈希值,若哈希索引区中有与第一哈希值相同的第四哈希值,则执行2,若哈希索引区中未有与第一哈希值相同的第四哈希值,则执行8;
2、确定第四哈希值对应的第四key是否与第一key相同,若第四key与第一key相同,则执行3,若第四key与第一key不相同,则执行4;
3、将第四哈希值对应value的存储位置确定为数据的存取位置;
4、确定磁盘中是否有冲突哈希索引区,若磁盘中有冲突哈希索引区,则执行5,若磁盘中未有冲突哈希索引区,则执行8;
5、确定冲突哈希索引区中是否有与第一哈希值相同的第五哈希值,若冲突哈希索引区中有与第一哈希值相同的第五哈希值,则执行6,若冲突哈希索引区中未有与第一哈希值相同的第五哈希值,则执行8;
6、确定第五哈希值对应的第五key是否与第一key相同,若第五key与第一key相同,则执行7,若第五key与第一key不相同,则执行8;
7、将第五哈希值对应value的存储位置确定为数据的存取位置;
8、将数据的存取位置确定为空。
1111:在数据的存取位置处根据存储方式存取数据。
本步骤在具体实施时,根据存取方式的不同,实现过程不同。具体的:
●存取方式为读取:
当数据的存取位置为空时,将空值确定为该数据,当数据的存取位置非空时,将数据的存取位置处存储的内容确定为该数据;
●存取方式为写入:
获取数据的value,将数据的value写入数据的存取位置内;
为了保证存储数据的一致性,当数据的存取位置处存储的内容为空时,除了将数据的value写入数据的存取位置内之外,还需同时写入数据的key和key的哈希值。具体写入方式可以为以{hash,key,value}组的形式写入数据的存取位置内。
●存取方式为修改:
获取数据的value,将数据的存取位置处的内容替换为数据的value;
●存取方式为删除:
将数据的存取位置处的内容替换为空值。
经过步骤1101至步骤1111可以实现数据的读取、写入、修改,但对于数据的删除存取方式,仅保证数据的value为空。
以删除数据A{hashA,keyA,valueA}为例,步骤1101至步骤1111后该数据A变为{hashA,keyA,}。此种情况时,由于用户通过keyA读取到的value是空,则对于用户数据A被删除,但数据A的哈希值及key依然存储于内存或磁盘中,造成资源浪费。为了彻底删除该数据,在执行步骤1111后,还可以再将value为空的数据删除。
另外,在执行步骤1111后,还可以将步骤1111执行的内容记录到日志文件中,也可以将数据及数据存取过程依次写入日志文件中,为执行本实施例提供的方法的系统出现错误提供原始数据恢复记录。
此外,由于内存容量有限,执行本实施例提供的方法进行数据存取的同时,可以监控内存中存储数据的数量,当内存中存储的数据数量达到预设数量时,将内存中存储的数据与磁盘中存储的数据进行合并。
需要说明的是,本实施例及后续实施例中key或哈希值前出现的第一、第二、第三、第四、第五等序号仅是对出于不同状态(待存取、存储于内存中或存储于磁盘中)的key或哈希值的区分,无其他特殊含义。
由于图11所示的数据存取方法涉及的情况较多,下面针对不同情况分别举例说明。下述例子中内存中哈希跳表存储的数据均如图12(a)所示,冲突哈希跳表存储的数据均如表图12(b)所示,磁盘中数据均如图13(a)所示。
例子1:若获取数据的key为1,哈希值为3,哈希跳表中有与3相同的哈希值(位置10存储的数据),且第1行位置10存储的key也为1,则将数据的存取位置确定为10。若数据的value为C,存取方式为修改,则将位置10中的内容替换为C,如图12(c)所示。若存取方式为删除,则将位置10中的内容替换为空,如图12(d)所示。若存取方式为读取,则将位置10中的内容A确定为读取到的数据。若存取方式为写入,则将C写入位置10中,如图12(e)所示。
例子2:若获取数据的key为2,哈希值为3,哈希跳表中有与3相同的哈希值(位置10存储的数据),但位置10存储的key不为2,则在冲突哈希跳表中确定有哈希值和key均与获取的数据相同的数据(位置20存储的数据),则将数据的存取位置确定为20。在数据的存取位置处根据存储方式存取数据的具体实施方式详见例子1,此处不再赘述。
例子3:若获取数据的key为3,哈希值为3,存取方式为写入,哈希跳表和冲突跳表中均未有哈希值和key均与获取的数据相同的数据,则在哈希跳表中建立一个数据存储区,数据的存取位置确定为11,若数据的value为C,则按{3,3,C}的形式写入位置11内,如图12(f)所示。
例子4:若获取数据的key为3,哈希值为3,存取方式为读取,哈希跳表和冲突跳表中均未有哈希值和key均与获取的数据相同的数据,但磁盘中图13(a)所示的哈希索引区内有与3相同的哈希值(节点3),且节点3的key也为3,则将数据的存取位置确定为30。若数据的value为C,存取方式为修改,则将位置30中的内容替换为C,如图13(b)所示。若存取方式为删除,则将位置30中的内容替换为空,如图13(c)所示。若存取方式为读取,则将位置30中的内容A确定为读取到的数据。若存取方式为写入,则将C写入位置30中,如图13(d)所示。
例子5:若获取数据的key为4,哈希值为3,存取方式为读取,哈希跳表和冲突跳表中均未有哈希值和key均与获取的数据相同的数据,图13(a)所示的哈希索引区内有与3相同的哈希值(节点3),但节点3的key不为4,则在冲突哈希跳表中确定有哈希值和key均与获取的数据相同的数据(节点4),则将数据的存取位置确定为40。在数据的存取位置处根据存储方式存取数据的具体实施方式详见例子4,此处不再赘述。
例子6:若获取数据的key为5,哈希值为4,存取方式为读取,哈希跳表、冲突跳表、哈希索引区和冲突哈希索引区中均未有哈希值和key均与获取的数据相同的数据,则数据的存取位置确定为空,读取到的数据为空值。若数据的value为C,存取方式为写入,则将{5,C}增加至数据区的50位置处,并将4和存储位置50增加至哈希索引区中,如图13(e)所示。
有益效果:
获取数据的存取方式和第一key,根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
基于同一发明构思,参见图14所示的实施例,本实施例提供了一种数据的存取装置,由于这些装置解决问题的原理与一种数据的存取方法相似,因此这些装置的实施可以参见方法的实施,重复之处不再赘述。
参见图14,该装置包括:
第一获取模块1401,用于获取数据的存取方式和数据的第一关键字key;
计算模块1402,用于计算第一获取模块1401获取到的第一key的第一哈希值;
第一确定模块1403,用于根据计算模块1402计算出的第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,哈希索引区按变形B+树的方式建立;
存取模块1404,用于在第一确定模块1403确定的数据的存取位置处根据第一获取模块1401获取到的存储方式存取数据;
其中,变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
参见图15,该装置,还包括:
第一建立模块1405,用于在内存中建立哈希跳表,哈希跳表用于存储数据的哈希值、key、value;
第二获取模块1406,用于获取哈希值范围,根据哈希值范围在磁盘中建立哈希索引区和数据区,数据区用于存储数据的key和value,哈希索引区用于存储索引,索引为数据的哈希值和数据在数据区的存储位置。
参见图16,该装置,还包括:
第二建立模块1407,用于在内存中建立与哈希跳表关联的冲突哈希跳表,冲突哈希跳表用于存储冲突数据,冲突数据的哈希值与哈希跳表中哈希值相同,但冲突数据对应的key与哈希跳表中相同哈希值对应的key不同。
参见图17,第一确定模块1403,包括:
第一确定单元14031,用于确定内存的哈希跳表中是否有与第一哈希值相同的第二哈希值;
第二确定单元14032,用于当第一确定单元14031确定哈希跳表中有与第一哈希值相同的第二哈希值时,确定第二哈希值对应的第二key是否与第一key相同;
第三确定单元14033,用于当第二确定单元14032确定第二key与第一key相同时,将第二哈希值对应数据值value的存储位置确定为数据的存取位置;
第四确定单元14034,用于当第二确定单元14032确定第二key与第一key不相同时,确定内存中是否有冲突哈希跳表;
第五确定单元14035,用于当第四确定单元14034确定内存中有冲突哈希跳表时,确定冲突哈希跳表中是否有与第一哈希值相同的第三哈希值;
第六确定单元14036,用于当第五确定单元14035确定冲突哈希跳表中有与第一哈希值相同的第三哈希值,则确定第三哈希值对应的第三key是否与第一key相同;
第七确定单元14037,用于当第六确定单元14036确定第三key与第一key相同,则将第三哈希值对应数据值value的存储位置确定为数据的存取位置;
第八确定单元14038,用于当第六确定单元14036确定第三key与第一key不相同时,或者,当第五确定单元14035确定冲突哈希跳表中未有与第一哈希值相同的第三哈希值时,或者,当第四确定单元14034确定内存中未有冲突哈希跳表时,或者,当第一确定单元14031确定的哈希跳表中未有与第一哈希值相同的第二哈希值时,根据存取方式从哈希跳表或哈希索引区中确定数据的存取位置。
参见图18,该装置,还包括:
第三建立模块1408,用于在磁盘中建立与哈希索引区关联的冲突哈希索引区,冲突哈希索引区用于存储冲突索引,冲突索引的哈希值与哈希索引区中哈希值相同,但冲突索引对应的key与哈希索引区中相同哈希值对应的key不同。
参见图19,存取方式为读取、写入、修改或删除;
第八确定单元14038,包括:
第一确定子单元140381,用于当存取方式为写入、修改或删除时,从哈希跳表中选择一个未存储数据的空位置作为数据的存取位置;
第二确定子单元140382,用于当存取方式为读取时,确定哈希索引区中是否有与第一哈希值相同的第四哈希值;
第三确定子单元140383,用于当第二确定子单元140382确定哈希索引区中有与第一哈希值相同的第四哈希值,则确定第四哈希值对应的第四key是否与第一key相同;
第四确定子单元140384,用于当第三确定子单元140383确定第四key与第一key相同时,将第四哈希值对应value的存储位置确定为数据的存取位置;
第五确定子单元140385,用于当第三确定子单元140383确定第四key与第一key不相同,则确定磁盘中是否有冲突哈希索引区;
第六确定子单元140386,用于当第五确定子单元140385确定若磁盘中有冲突哈希索引区时,确定冲突哈希索引区中是否有与第一哈希值相同的第五哈希值;
第七确定子单元140387,用于当第六确定子单元140386确定冲突哈希索引区中有与第一哈希值相同的第五哈希值,则确定第五哈希值对应的第五key是否与第一key相同;
第八确定子单元140388,用于当第七确定子单元140387确定第五key与第一key相同,则将第五哈希值对应value的存储位置确定为数据的存取位置;
第九确定子单元140389,用于当第七确定子单元140387确定若第五key与第一key不相同,或者,当第六确定子单元140386确定冲突哈希索引区中未有与第一哈希值相同的第五哈希值时,或者,当第五确定子单元140385确定磁盘中未有冲突哈希索引区时,或者,当第二确定子单元140382确定哈希索引区中未有与第一哈希值相同的第四哈希值时,将数据的存取位置确定为空。
其中,存取方式为读取、写入、修改或删除;
存取模块1404,用于当存取方式为读取时,数据的存取位置为空时,将空值确定为数据,当数据的存取位置非空时,将数据的存取位置处存储的内容确定为数据;当存取方式为写入时,获取数据的value,将数据的value写入数据的存取位置内;当存取方式为修改时,获取数据的value,将数据的存取位置处的内容替换为数据的value;当存取方式为删除时,将数据的存取位置处的内容替换为空值。
参见图20,该装置,还包括:
排序模块1409,用于当哈希跳表和冲突哈希跳表中存储的数据总数量达到预设数量时,将哈希跳表和冲突哈希跳表哈希区和冲突哈希区中数据按哈希值排序;
第二确定模块1410,用于依次读取排序模块1409排序后各数据,确定当前读取数据的第六哈希值、第六key和当前读取数据的value;
第三确定模块1411,用于确定第二确定模块1410确定的第六哈希值与前一次读取数据的哈希值是否相同;
合并模块1412,用于当第三确定模块1411确定第六哈希值与前一次读取数据的哈希值相同时,将当前读取数据合并至冲突哈希索引区中;
第四确定模块1413,用于当第三确定模块1411确定第六哈希值与前一次读取数据的哈希值不相同时,确定哈希索引区中是否存在与第六哈希值相同的第七哈希值;
第五确定模块1414,用于当第四确定模块1413确定哈希索引区中存在与第六哈希值相同的第七哈希值,则确定第七哈希值对应的第七key与第六key是否相同;
第一存取模块1415,用于当第五确定模块1414确定第七key与第六key相同,且当前读取数据的value不为空时,将第七哈希值对应的value替换为读取数据的value;当前读取数据的value为空时,删除第七哈希值对应的数据;
合并模块1416,用于当第五确定模块1414确定第七key与第六key不相同时,将当前读取数据合并至冲突哈希索引区中;
第二存取模块1417,用于当第四确定模块1413确定哈希索引区中未存在与第六哈希值相同的第七哈希值,则当前读取数据的value不为空时,将第六key和当前读取数据的value增加至数据区,并将第六哈希值和当前读取数据在数据区的存储位置增加至哈希索引区中,当前读取数据的value为空时,完成当前读取数据的合并。
参见图21,合并模块1416,包括:
第一确定单元14161,用于确定冲突哈希索引区中是否存在与第六哈希值相同的第八哈希值;
第二确定单元14162,用于第一确定单元14161确定冲突哈希索引区中存在与第六哈希值相同的第八哈希值时,确定第八哈希值对应的第八key与第六key是否相同;
第一处理单元14163,用于当第二确定单元14162确定第八key与第六key相同时,则当当前读取数据的value不为空时,将第八哈希值对应的value替换为当前读取数据的value,当当前读取数据的value为空时,删除第八哈希值对应的数据;
第二处理单元14164,用于当第二确定单元14163确定第八key与第六key不相同时,或者,当第一确定单元14161确定冲突哈希索引区中未存在与第六哈希值相同的第八哈希值时,若当前读取数据的value不为空,则将第六key和当前读取数据的value增加至数据区,并将第六哈希值和当前读取数据在数据区的存储位置增加至冲突哈希索引区中,若当前读取数据的value为空,则完成当前读取数据的合并。
有益效果如下:
获取数据的存取方式和第一key,根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
以上实施例仅用于说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,本领域人员可以根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围内。
Claims (18)
1.一种数据的存取方法,其特征在于,包括:
获取数据的存取方式和所述数据的第一关键字key;
计算所述第一key的第一哈希值;
根据所述第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定所述数据的存取位置,所述哈希索引区按变形B+树的方式建立;
在所述数据的存取位置处根据所述存储方式存取所述数据;
其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
2.根据权利要求1所述的方法,其特征在于,所述方法,还包括:
在内存中建立哈希跳表,所述哈希跳表用于存储数据的哈希值、key、value;
获取哈希值范围,根据所述哈希值范围在所述磁盘中建立哈希索引区和数据区,所述数据区用于存储数据的key和value,所述哈希索引区用于存储索引,所述索引为数据的哈希值和数据在数据区的存储位置。
3.根据权利要求2所述的方法,其特征在于,所述在所述内存中建立哈希跳表之后,还包括:
在所述内存中建立与所述哈希跳表关联的冲突哈希跳表,所述冲突哈希跳表用于存储冲突数据,所述冲突数据的哈希值与所述哈希跳表中哈希值相同,但所述冲突数据对应的key与所述哈希跳表中相同哈希值对应的key不同。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一哈希值在内存的哈希跳表中或磁盘的哈希索引区中确定所述数据的存取位置,包括:
确定内存的哈希跳表中是否有与所述第一哈希值相同的第二哈希值;
若哈希跳表中有与所述第一哈希值相同的第二哈希值,则确定所述第二哈希值对应的第二key是否与所述第一key相同;
若第二key与所述第一key相同,则将所述第二哈希值对应数据值value的存储位置确定为所述数据的存取位置;
若第二key与所述第一key不相同,则确定所述内存中是否有所述冲突哈希跳表;
若所述内存中有冲突哈希跳表,则确定所述冲突哈希跳表中是否有与所述第一哈希值相同的第三哈希值;
若所述冲突哈希跳表中有与所述第一哈希值相同的第三哈希值,则确定所述第三哈希值对应的第三key是否与所述第一key相同;
若第三key与所述第一key相同,则将所述第三哈希值对应数据值value的存储位置确定为所述数据的存取位置;
若第三key与所述第一key不相同,则根据所述存取方式从所述哈希跳表或哈希索引区中确定所述数据的存取位置;
若所述冲突哈希跳表中未有与所述第一哈希值相同的第三哈希值,则根据所述存取方式从所述哈希跳表或哈希索引区中确定所述数据的存取位置;
若所述内存中未有冲突哈希跳表,则根据所述存取方式从所述哈希跳表或哈希索引区中确定所述数据的存取位置;
若哈希跳表中未有与所述第一哈希值相同的第二哈希值,则根据所述存取方式从哈希跳表或哈希索引区中确定所述数据的存取位置。
5.根据权利要求4所述的方法,其特征在于,所述根据所述哈希值范围在所述磁盘中建立哈希索引区和数据区之后,还包括:
在所述磁盘中建立与所述哈希索引区关联的冲突哈希索引区,所述冲突哈希索引区用于存储冲突索引,所述冲突索引的哈希值与所述哈希索引区中哈希值相同,但所述冲突索引对应的key与所述哈希索引区中相同哈希值对应的key不同。
6.根据权利要求5所述的方法,其特征在于,所述存取方式为读取、写入、修改或删除;
所述根据所述存取方式从哈希跳表或哈希索引区中确定所述数据的存取位置,包括:
若所述存取方式为写入、修改或删除,则从哈希跳表中选择一个未存储数据的空位置作为所述数据的存取位置;
若所述存取方式为读取,则确定哈希索引区中是否有与所述第一哈希值相同的第四哈希值;
若哈希索引区中有与所述第一哈希值相同的第四哈希值,则确定所述第四哈希值对应的第四key是否与所述第一key相同;
若第四key与所述第一key相同,则将所述第四哈希值对应value的存储位置确定为所述数据的存取位置;
若第四key与所述第一key不相同,则确定所述磁盘中是否有所述冲突哈希索引区;
若所述磁盘中有所述冲突哈希索引区,则确定所述冲突哈希索引区中是否有与所述第一哈希值相同的第五哈希值;
若所述冲突哈希索引区中有与所述第一哈希值相同的第五哈希值,则确定所述第五哈希值对应的第五key是否与所述第一key相同;
若第五key与所述第一key相同,则将所述第五哈希值对应value的存储位置确定为所述数据的存取位置;
若第五key与所述第一key不相同,将所述数据的存取位置确定为空;
若所述冲突哈希索引区中未有与所述第一哈希值相同的第五哈希值,则将所述数据的存取位置确定为空;
若所述磁盘中未有所述冲突哈希索引区,则将所述数据的存取位置确定为空;
若哈希索引区中未有与所述第一哈希值相同的第四哈希值,则将所述数据的存取位置确定为空。
7.根据权利要求1至6任一权利要求所述的方法,其特征在于,所述存取方式为读取、写入、修改或删除;
所述在所述数据的存取位置处根据所述存储方式存取所述数据,包括:
若所述存取方式为读取,则当所述数据的存取位置为空时,将空值确定为所述数据,当所述数据的存取位置非空时,将所述数据的存取位置处存储的内容确定为所述数据;
若所述存取方式为写入,则获取所述数据的value,将所述数据的value写入所述数据的存取位置内;
若所述存取方式为修改,则获取所述数据的value,将所述数据的存取位置处的内容替换为所述数据的value;
若所述存取方式为删除,则将所述数据的存取位置处的内容替换为空值。
8.根据权利要求5所述的方法,其特征在于,所述方法,还包括:
当所述哈希跳表和所述冲突哈希跳表中存储的数据总数量达到预设数量时,将所述哈希跳表和所述冲突哈希跳表及所述哈希索引区和所述冲突哈希索引区中数据按哈希值排序;
依次读取排序后各数据,确定当前读取数据的第六哈希值、第六key和所述当前读取数据的value;
确定所述第六哈希值与前一次读取数据的哈希值是否相同;
若所述第六哈希值与前一次读取数据的哈希值相同,则将所述当前读取数据合并至所述冲突哈希索引区中;
若所述第六哈希值与前一次读取数据的哈希值不相同,则确定所述哈希索引区中是否存在与所述第六哈希值相同的第七哈希值;
若所述哈希索引区中存在与所述第六哈希值相同的第七哈希值,则确定所述第七哈希值对应的第七key与所述第六key是否相同;
若第七key与所述第六key相同,则当所述当前读取数据的value不为空时,将第七哈希值对应的value替换为所述读取数据的value,当所述当前读取数据的value为空时,删除所述第七哈希值对应的数据;
若第七key与所述第六key不相同,则将所述当前读取数据合并至所述冲突哈希索引区中;
若所述哈希索引区中未存在与所述第六哈希值相同的第七哈希值,则当所述当前读取数据的value不为空时,将第六key和所述当前读取数据的value增加至数据区,并将所述第六哈希值和所述当前读取数据在数据区的存储位置增加至所述哈希索引区中,当所述当前读取数据的value为空时,完成所述当前读取数据的合并。
9.根据权利要求8所述的方法,其特征在于,所述将所述当前读取数据合并至所述冲突哈希索引区中,包括:
确定所述冲突哈希索引区中是否存在与所述第六哈希值相同的第八哈希值;
若所述冲突哈希索引区中存在与所述第六哈希值相同的第八哈希值,则确定所述第八哈希值对应的第八key与所述第六key是否相同;
若第八key与所述第六key相同,则当所述当前读取数据的value不为空时,将第八哈希值对应的value替换为所述当前读取数据的value,当所述当前读取数据的value为空时,删除所述第八哈希值对应的数据;
若第八key与所述第六key不相同,则当所述当前读取数据的value不为空时,将第六key和所述当前读取数据的value增加至数据区,并将所述第六哈希值和所述当前读取数据在数据区的存储位置增加至所述冲突哈希索引区中,当所述当前读取数据的value为空时,完成所述当前读取数据的合并;
若所述冲突哈希索引区中未存在与所述第六哈希值相同的第八哈希值,则当所述当前读取数据的value不为空时,将第六key和所述当前读取数据的value增加至数据区,并将所述第六哈希值和所述当前读取数据在数据区的存储位置增加至所述冲突哈希索引区中,当所述当前读取数据的value为空时,完成所述当前读取数据的合并。
10.一种数据的存取装置,其特征在于,包括:
第一获取模块,用于获取数据的存取方式和所述数据的第一关键字key;
计算模块,用于计算所述第一获取模块获取到的第一key的第一哈希值;
第一确定模块,用于根据所述计算模块计算出的第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定所述数据的存取位置,所述哈希索引区按变形B+树的方式建立;
存取模块,用于在所述第一确定模块确定的数据的存取位置处根据所述第一获取模块获取到的存储方式存取所述数据;
其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
11.根据权利要求10所述的装置,其特征在于,所述装置,还包括:
第一建立模块,用于在内存中建立哈希跳表,所述哈希跳表用于存储数据的哈希值、key、value;
第二获取模块,用于获取哈希值范围,根据所述哈希值范围在所述磁盘中建立哈希索引区和数据区,所述数据区用于存储数据的key和value,所述哈希索引区用于存储索引,所述索引为数据的哈希值和数据在数据区的存储位置。
12.根据权利要求11所述的装置,其特征在于,所述装置,还包括:
第二建立模块,用于在所述内存中建立与所述哈希跳表关联的冲突哈希跳表,所述冲突哈希跳表用于存储冲突数据,所述冲突数据的哈希值与所述哈希跳表中哈希值相同,但所述冲突数据对应的key与所述哈希跳表中相同哈希值对应的key不同。
13.根据权利要求12所述的装置,其特征在于,所述第一确定模块,包括:
第一确定单元,用于确定内存的哈希跳表中是否有与所述第一哈希值相同的第二哈希值;
第二确定单元,用于当所述第一确定单元确定哈希跳表中有与所述第一哈希值相同的第二哈希值时,确定所述第二哈希值对应的第二key是否与所述第一key相同;
第三确定单元,用于当所述第二确定单元确定第二key与所述第一key相同时,将所述第二哈希值对应数据值value的存储位置确定为所述数据的存取位置;
第四确定单元,用于当所述第二确定单元确定第二key与所述第一key不相同时,确定所述内存中是否有所述冲突哈希跳表;
第五确定单元,用于当所述第四确定单元确定内存中有冲突哈希跳表时,确定所述冲突哈希跳表中是否有与所述第一哈希值相同的第三哈希值;
第六确定单元,用于当所述第五确定单元确定冲突哈希跳表中有与所述第一哈希值相同的第三哈希值,则确定所述第三哈希值对应的第三key是否与所述第一key相同;
第七确定单元,用于当所述第六确定单元确定第三key与所述第一key相同,则将所述第三哈希值对应数据值value的存储位置确定为所述数据的存取位置;
第八确定单元,用于当所述第六确定单元确定第三key与所述第一key不相同时,或者,当所述第五确定单元确定所述冲突哈希跳表中未有与所述第一哈希值相同的第三哈希值时,或者,当所述第四确定单元确定所述内存中未有冲突哈希跳表时,或者,当第一确定单元确定的哈希跳表中未有与所述第一哈希值相同的第二哈希值时,根据所述存取方式从所述哈希跳表或哈希索引区中确定所述数据的存取位置。
14.根据权利要求13所述的装置,其特征在于,所述装置,还包括:
第三建立模块,用于在所述磁盘中建立与所述哈希索引区关联的冲突哈希索引区,所述冲突哈希索引区用于存储冲突索引,所述冲突索引的哈希值与所述哈希索引区中哈希值相同,但所述冲突索引对应的key与所述哈希索引区中相同哈希值对应的key不同。
15.根据权利要求14所述的装置,其特征在于,所述存取方式为读取、写入、修改或删除;
所述第八确定单元,包括:
第一确定子单元,用于当所述存取方式为写入、修改或删除时,从哈希跳表中选择一个未存储数据的空位置作为所述数据的存取位置;
第二确定子单元,用于当所述存取方式为读取时,确定哈希索引区中是否有与所述第一哈希值相同的第四哈希值;
第三确定子单元,用于当所述第二确定子单元确定哈希索引区中有与所述第一哈希值相同的第四哈希值,则确定所述第四哈希值对应的第四key是否与所述第一key相同;
第四确定子单元,用于当所述第三确定子单元确定第四key与所述第一key相同时,将所述第四哈希值对应value的存储位置确定为所述数据的存取位置;
第五确定子单元,用于当所述第三确定子单元确定第四key与所述第一key不相同,则确定所述磁盘中是否有所述冲突哈希索引区;
第六确定子单元,用于当所述第五确定子单元确定若所述磁盘中有所述冲突哈希索引区时,确定所述冲突哈希索引区中是否有与所述第一哈希值相同的第五哈希值;
第七确定子单元,用于当所述第六确定子单元确定所述冲突哈希索引区中有与所述第一哈希值相同的第五哈希值,则确定所述第五哈希值对应的第五key是否与所述第一key相同;
第八确定子单元,用于当所述第七确定子单元确定第五key与所述第一key相同,则将所述第五哈希值对应value的存储位置确定为所述数据的存取位置;
第九确定子单元,用于当所述第七确定子单元确定若第五key与所述第一key不相同时,或者,当所述第六确定子单元确定所述冲突哈希索引区中未有与所述第一哈希值相同的第五哈希值时,或者,当所述第五确定子单元确定所述磁盘中未有所述冲突哈希索引区时,或者,当所述第二确定子单元确定哈希索引区中未有与所述第一哈希值相同的第四哈希值时,将所述数据的存取位置确定为空。
16.根据权利要求10至15任一权利要求所述的装置,其特征在于,所述存取方式为读取、写入、修改或删除;
所述存取模块,用于当所述存取方式为读取时,所述数据的存取位置为空时,将空值确定为所述数据,当所述数据的存取位置非空时,将所述数据的存取位置处存储的内容确定为所述数据;当所述存取方式为写入时,获取所述数据的value,将所述数据的value写入所述数据的存取位置内;当所述存取方式为修改时,获取所述数据的value,将所述数据的存取位置处的内容替换为所述数据的value;当所述存取方式为删除时,将所述数据的存取位置处的内容替换为空值。
17.根据权利要求14所述的装置,其特征在于,所述装置,还包括:
排序模块,用于当所述哈希跳表和所述冲突哈希跳表中存储的数据总数量达到预设数量时,将所述哈希跳表和所述冲突哈希跳表及所述哈希索引区和所述冲突哈希索引区中数据按哈希值排序;
第二确定模块,用于依次读取所述排序模块排序后各数据,确定当前读取数据的第六哈希值、第六key和所述当前读取数据的value;
第三确定模块,用于确定所述第二确定模块确定的第六哈希值与前一次读取数据的哈希值是否相同;
合并模块,用于当所述第三确定模块确定所述第六哈希值与前一次读取数据的哈希值相同时,将所述当前读取数据合并至所述冲突哈希索引区中;
第四确定模块,用于当所述第三确定模块确定所述第六哈希值与前一次读取数据的哈希值不相同时,确定所述哈希索引区中是否存在与所述第六哈希值相同的第七哈希值;
第五确定模块,用于当所述第四确定模块确定所述哈希索引区中存在与所述第六哈希值相同的第七哈希值,则确定所述第七哈希值对应的第七key与所述第六key是否相同;
第一存取模块,用于当所述第五确定模块确定第七key与所述第六key相同,且当所述当前读取数据的value不为空时,将第七哈希值对应的value替换为所述读取数据的value;当所述当前读取数据的value为空时,删除所述第七哈希值对应的数据;
所述合并模块,用于当所述第五确定模块确定第七key与所述第六key不相同时,将所述当前读取数据合并至所述冲突哈希索引区中;
第二存取模块,用于当所述第四确定模块确定所述哈希索引区中未存在与所述第六哈希值相同的第七哈希值,则当所述当前读取数据的value不为空时,将第六key和所述当前读取数据的value增加至数据区,并将所述第六哈希值和所述当前读取数据在数据区的存储位置增加至所述哈希索引区中,当所述当前读取数据的value为空时,完成所述当前读取数据的合并。
18.根据权利要求17所述的装置,其特征在于,所述合并模块,包括:
第一确定单元,用于确定所述冲突哈希索引区中是否存在与所述第六哈希值相同的第八哈希值;
第二确定单元,用于所述第一确定单元确定所述冲突哈希索引区中存在与所述第六哈希值相同的第八哈希值时,确定所述第八哈希值对应的第八key与所述第六key是否相同;
第一处理单元,用于当所述第二确定单元确定第八key与所述第六key相同时,则当所述当前读取数据的value不为空时,将第八哈希值对应的value替换为所述当前读取数据的value,当所述当前读取数据的value为空时,删除所述第八哈希值对应的数据;
第二处理单元,用于当所述第二确定单元确定第八key与所述第六key不相同时,或者,当所述第一确定单元确定所述冲突哈希索引区中未存在与所述第六哈希值相同的第八哈希值时,若所述当前读取数据的value不为空,则将第六key和所述当前读取数据的value增加至数据区,并将所述第六哈希值和所述当前读取数据在数据区的存储位置增加至所述冲突哈希索引区中,若所述当前读取数据的value为空,则完成所述当前读取数据的合并。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510766796.6A CN105320775B (zh) | 2015-11-11 | 2015-11-11 | 数据的存取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510766796.6A CN105320775B (zh) | 2015-11-11 | 2015-11-11 | 数据的存取方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105320775A true CN105320775A (zh) | 2016-02-10 |
CN105320775B CN105320775B (zh) | 2019-05-14 |
Family
ID=55248161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510766796.6A Expired - Fee Related CN105320775B (zh) | 2015-11-11 | 2015-11-11 | 数据的存取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105320775B (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574212A (zh) * | 2016-02-24 | 2016-05-11 | 北京大学 | 一种多索引磁盘哈希结构的图像检索方法 |
CN105956164A (zh) * | 2016-05-19 | 2016-09-21 | 海尔优家智能科技(北京)有限公司 | 一种存储数据的方法、装置及其对应的系统 |
CN106599106A (zh) * | 2016-11-28 | 2017-04-26 | 深圳中兴网信科技有限公司 | 基于分布式文件系统的数据同步方法及装置 |
CN106815326A (zh) * | 2016-12-28 | 2017-06-09 | 中国民航信息网络股份有限公司 | 一种检测无主键数据表一致性的系统及方法 |
CN107688438A (zh) * | 2017-08-03 | 2018-02-13 | 中国石油集团川庆钻探工程有限公司地球物理勘探公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN107784073A (zh) * | 2017-09-21 | 2018-03-09 | 中国平安财产保险股份有限公司 | 一种本地缓存的数据查询方法、存储介质和服务器 |
CN107783993A (zh) * | 2016-08-25 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 数据的存储方法和装置 |
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN108572958A (zh) * | 2017-03-07 | 2018-09-25 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN109407985A (zh) * | 2018-10-15 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种数据管理的方法以及相关装置 |
CN109460406A (zh) * | 2018-10-15 | 2019-03-12 | 咪咕文化科技有限公司 | 一种数据处理方法及装置 |
CN109542908A (zh) * | 2018-11-23 | 2019-03-29 | 中科驭数(北京)科技有限公司 | key-value数据库中的数据压缩方法、存储方法、访问方法和系统 |
CN109558451A (zh) * | 2018-11-14 | 2019-04-02 | 咪咕文化科技有限公司 | 一种数据管理方法及系统、存储介质 |
CN109684325A (zh) * | 2018-11-07 | 2019-04-26 | 天津大学 | 一种高效的rdf数据存储查询系统 |
CN109783499A (zh) * | 2019-01-18 | 2019-05-21 | 成都宝瓜科技有限公司 | 一种数据缓存方法、装置和服务器 |
CN110764705A (zh) * | 2019-10-22 | 2020-02-07 | 北京锐安科技有限公司 | 一种数据的读写方法、装置、设备和存储介质 |
CN111107068A (zh) * | 2019-12-09 | 2020-05-05 | 江苏云涌电子科技股份有限公司 | 一种fpga高效规则匹配方法及终端 |
CN111316255A (zh) * | 2017-11-20 | 2020-06-19 | 华为技术有限公司 | 数据存储系统以及用于提供数据存储系统的方法 |
CN112579575A (zh) * | 2020-12-28 | 2021-03-30 | 超越科技股份有限公司 | 一种数据库索引结构的快速构建方法 |
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101089853A (zh) * | 2006-06-15 | 2007-12-19 | 三星电子株式会社 | 用于浏览内容的设备和方法 |
CN101267381A (zh) * | 2007-03-13 | 2008-09-17 | 大唐移动通信设备有限公司 | 哈希表操作方法及装置 |
CN101770500A (zh) * | 2009-01-04 | 2010-07-07 | 中国移动通信集团公司 | 数据转移方法及装置、数据查找方法及装置 |
CN101782922A (zh) * | 2009-12-29 | 2010-07-21 | 山东山大鸥玛软件有限公司 | 一种面向海量数据检索的多级桶哈希索引方法 |
CN102609452A (zh) * | 2012-01-11 | 2012-07-25 | 上海西本网络科技有限公司 | 数据的存储方法及装置 |
CN103294710A (zh) * | 2012-02-28 | 2013-09-11 | 北京新媒传信科技有限公司 | 一种数据存取方法和装置 |
-
2015
- 2015-11-11 CN CN201510766796.6A patent/CN105320775B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101089853A (zh) * | 2006-06-15 | 2007-12-19 | 三星电子株式会社 | 用于浏览内容的设备和方法 |
CN101267381A (zh) * | 2007-03-13 | 2008-09-17 | 大唐移动通信设备有限公司 | 哈希表操作方法及装置 |
CN101770500A (zh) * | 2009-01-04 | 2010-07-07 | 中国移动通信集团公司 | 数据转移方法及装置、数据查找方法及装置 |
CN101782922A (zh) * | 2009-12-29 | 2010-07-21 | 山东山大鸥玛软件有限公司 | 一种面向海量数据检索的多级桶哈希索引方法 |
CN102609452A (zh) * | 2012-01-11 | 2012-07-25 | 上海西本网络科技有限公司 | 数据的存储方法及装置 |
CN103294710A (zh) * | 2012-02-28 | 2013-09-11 | 北京新媒传信科技有限公司 | 一种数据存取方法和装置 |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574212A (zh) * | 2016-02-24 | 2016-05-11 | 北京大学 | 一种多索引磁盘哈希结构的图像检索方法 |
CN105574212B (zh) * | 2016-02-24 | 2019-04-26 | 北京大学 | 一种多索引磁盘哈希结构的图像检索方法 |
CN105956164A (zh) * | 2016-05-19 | 2016-09-21 | 海尔优家智能科技(北京)有限公司 | 一种存储数据的方法、装置及其对应的系统 |
CN107783993B (zh) * | 2016-08-25 | 2021-11-30 | 阿里巴巴集团控股有限公司 | 数据的存储方法和装置 |
CN107783993A (zh) * | 2016-08-25 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 数据的存储方法和装置 |
CN106599106A (zh) * | 2016-11-28 | 2017-04-26 | 深圳中兴网信科技有限公司 | 基于分布式文件系统的数据同步方法及装置 |
CN106815326A (zh) * | 2016-12-28 | 2017-06-09 | 中国民航信息网络股份有限公司 | 一种检测无主键数据表一致性的系统及方法 |
CN108572958A (zh) * | 2017-03-07 | 2018-09-25 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN107688438A (zh) * | 2017-08-03 | 2018-02-13 | 中国石油集团川庆钻探工程有限公司地球物理勘探公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN107688438B (zh) * | 2017-08-03 | 2021-08-27 | 中国石油集团东方地球物理勘探有限责任公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN107784073A (zh) * | 2017-09-21 | 2018-03-09 | 中国平安财产保险股份有限公司 | 一种本地缓存的数据查询方法、存储介质和服务器 |
CN107784073B (zh) * | 2017-09-21 | 2020-03-27 | 中国平安财产保险股份有限公司 | 一种本地缓存的数据查询方法、存储介质和服务器 |
CN111316255B (zh) * | 2017-11-20 | 2023-11-03 | 华为技术有限公司 | 数据存储系统以及用于提供数据存储系统的方法 |
CN111316255A (zh) * | 2017-11-20 | 2020-06-19 | 华为技术有限公司 | 数据存储系统以及用于提供数据存储系统的方法 |
CN108446376B (zh) * | 2018-03-16 | 2022-04-08 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN109407985A (zh) * | 2018-10-15 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种数据管理的方法以及相关装置 |
CN109460406A (zh) * | 2018-10-15 | 2019-03-12 | 咪咕文化科技有限公司 | 一种数据处理方法及装置 |
CN109684325A (zh) * | 2018-11-07 | 2019-04-26 | 天津大学 | 一种高效的rdf数据存储查询系统 |
CN109558451A (zh) * | 2018-11-14 | 2019-04-02 | 咪咕文化科技有限公司 | 一种数据管理方法及系统、存储介质 |
CN109558451B (zh) * | 2018-11-14 | 2022-06-10 | 咪咕文化科技有限公司 | 一种数据管理方法及系统、存储介质 |
CN109542908A (zh) * | 2018-11-23 | 2019-03-29 | 中科驭数(北京)科技有限公司 | key-value数据库中的数据压缩方法、存储方法、访问方法和系统 |
CN109783499A (zh) * | 2019-01-18 | 2019-05-21 | 成都宝瓜科技有限公司 | 一种数据缓存方法、装置和服务器 |
CN109783499B (zh) * | 2019-01-18 | 2023-09-22 | 成都宝瓜科技有限公司 | 一种数据缓存方法、装置和服务器 |
CN110764705A (zh) * | 2019-10-22 | 2020-02-07 | 北京锐安科技有限公司 | 一种数据的读写方法、装置、设备和存储介质 |
CN110764705B (zh) * | 2019-10-22 | 2023-08-04 | 北京锐安科技有限公司 | 一种数据的读写方法、装置、设备和存储介质 |
CN111107068A (zh) * | 2019-12-09 | 2020-05-05 | 江苏云涌电子科技股份有限公司 | 一种fpga高效规则匹配方法及终端 |
CN111107068B (zh) * | 2019-12-09 | 2021-03-09 | 江苏云涌电子科技股份有限公司 | 一种fpga高效规则匹配方法及终端 |
CN112579575A (zh) * | 2020-12-28 | 2021-03-30 | 超越科技股份有限公司 | 一种数据库索引结构的快速构建方法 |
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
CN113688130B (zh) * | 2021-08-05 | 2023-10-13 | 上海沄熹科技有限公司 | 一种内存数据库存储引擎管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105320775B (zh) | 2019-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105320775A (zh) | 数据的存取方法和装置 | |
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
CN102122285B (zh) | 一种数据缓存系统中的数据查询系统和数据查询方法 | |
KR101467589B1 (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
CN107045531A (zh) | 一种优化hdfs小文件存取的系统及方法 | |
CN110147204B (zh) | 一种元数据落盘方法、装置、系统及计算机可读存储介质 | |
CN111190904B (zh) | 一种图-关系数据库混合存储的方法和装置 | |
JP2015512604A (ja) | 暗号ハッシュ・データベース | |
CN104850572A (zh) | HBase非主键索引构建与查询方法及其系统 | |
CN110168532B (zh) | 数据更新方法和存储装置 | |
CN103678491A (zh) | 一种基于Hadoop中小文件优化和倒排索引的方法 | |
CN105975587A (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
CN105912687A (zh) | 海量分布式数据库存储单元 | |
CN111459884B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
CN111143285A (zh) | 一种小文件存储文件系统以及小文件处理方法 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
US20140324875A1 (en) | Index for fast batch updates of large data tables | |
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 | |
CN113468080B (zh) | 一种全闪元数据的缓存方法、系统及相关装置 | |
CN107273443B (zh) | 一种基于大数据模型元数据的混合索引方法 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
CN111752941B (zh) | 一种数据存储、访问方法、装置、服务器及存储介质 | |
JP2015162042A (ja) | インデックス管理装置 | |
CN110321346B (zh) | 一种字符串散列表实现方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190514 Termination date: 20191111 |