CN103229164B - 数据访问方法和装置 - Google Patents

数据访问方法和装置 Download PDF

Info

Publication number
CN103229164B
CN103229164B CN201180003271.7A CN201180003271A CN103229164B CN 103229164 B CN103229164 B CN 103229164B CN 201180003271 A CN201180003271 A CN 201180003271A CN 103229164 B CN103229164 B CN 103229164B
Authority
CN
China
Prior art keywords
index
field
index field
data
key
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
Application number
CN201180003271.7A
Other languages
English (en)
Other versions
CN103229164A (zh
Inventor
鲍栋
王道辉
宋振磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN103229164A publication Critical patent/CN103229164A/zh
Application granted granted Critical
Publication of CN103229164B publication Critical patent/CN103229164B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24557Efficient disk access during query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures

Abstract

本发明实施例提供了一种数据访问方法和装置,涉及数据库技术领域,所述方法包括:预先在数据库中设置用于存储键信息的索引字段,和用于存储值信息的记录字段,且索引字段和记录字段的长度均固定;将所述索引字段映射到快速存储介质中的索引空间;当接收到操作数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据该索引字段在数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作,所述快速存储介质的访问效率比数据库所在的存储介质的访问效率高。所述装置包括:映射模块和操作模块。本发明将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,极大地提高了数据库的性能。

Description

数据访问方法和装置
技术领域
本发明涉及数据库技术领域,特别涉及一种数据访问方法和装置。
背景技术
随着网络的发展,信息呈现爆炸性增长,人类的数据达到前所未有的规模,这些超大规模的数据存储和管理已经成为一大挑战。基于DHT(DistributedHashTable,分布式哈希表)技术的P2P(PeartoPear,点对点)存储系统拥有很高的扩展性,支持大规模的数据存储,可以较好地应对这一挑战,这种存储系统的底层存储引擎一般是K-V(Key-Value,键-值)DB(Database,数据库),即以键值对形式进行数据存储和访问的非关系型数据库。其通常的数据访问操作有插入put(key,&value),查找get(key,&value)和删除delete(key)。其中key为键,是数据的唯一标识,value为值,即数据内容。
现有技术中典型的是用Hash哈希算法构造的K-VDB,其中比较常见的是变长HashK-VDB,这种DB可以存储变长的key和value。基本原理是通过Hash算法确定每个key和value的存储位置。通常,将HashK-VDB从逻辑上划分为四个部分:BucketArray、Key、Value和Ptr。其中,BucketArray就是Hash桶,其大小为Hash空间的大小,其中存储的内容为每个键值对在磁盘中的位置或偏移量。Key存储键值对中key的值,Value存储键值对中value的值。Ptr用于存储当Hash冲突发生时相同Hash值的下一个键值对的位置或偏移量。以上四个部分的信息都保存在磁盘上。
当不同的输入按照该Hash算法得到相同的Hash值时会产生Hash冲突,此时,可以使用特定的数据结构和算法(比如二叉树)来解决。例如,当执行插入操作时,如果待插入数据的key的第一个Hash值有冲突,表明相同hash值对应的位置上已有数据存在,则根据该key的第二个Hash值及预定的冲突解决算法,找到下一个可能的存储位置,如果无冲突,则直接找到相应的存储位置保存该数据,流程结束;如果依然有冲突,则重新根据新的hash值及冲突解决算法继续查找,直到找到一个不冲突的存储位置为止。
上述现有技术中由于使用了Hash算法,不可避免地会存在Hash冲突,在解决冲突的过程中,需要在磁盘上逐个遍历进行查找,数据库的性能受到极大的影响。
发明内容
为了提高数据库的性能,本发明实施例提供了一种数据访问方法和装置。
一方面,一种数据访问方法,包括:
预先在数据库中设置用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且所述索引字段和记录字段的长度均固定;
将所述索引字段映射到快速存储介质中的索引空间;
当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作;
其中,所述快速存储介质的访问效率比所述数据库所在的存储介质的访问效率高。
另一方面,一种数据访问装置,包括:
映射模块,用于将数据库中的索引字段映射到快速存储介质中的索引空间,所述数据库中设置有用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且所述索引字段和记录字段的长度均固定;
操作模块,用于当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作;
其中,所述快速存储介质的访问效率比所述数据库所在的存储介质的访问效率高。
本发明实施例提供的技术方案的有益效果是:通过设置数据库中分别存储键的信息和值的信息的索引字段和记录字段定长,并将该索引字段映射到快速存储介质中,当操作数据时,在快速存储介质中找到相应的索引字段,从而在数据库中确定对应的记录字段并执行操作,与现有技术相比,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO(InputOutput,输入输出),快速存储介质IO相比磁盘IO可以节省大量的时间,从而极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的数据访问方法流程图;
图2是本发明另一实施例提供的数据访问方法流程图;
图3是本发明实施例提供的数据库中索引字段和记录字段的结构示意图;
图4是本发明又一实施例提供的数据访问方法流程图;
图5是本发明一实施例提供的插入数据操作的流程图;
图6是本发明另一实施例提供的查找数据操作的流程图;
图7是本发明又一实施例提供的删除数据操作的流程图;
图8是本发明再一实施例提供的数据访问装置的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例涉及数据库和快速存储介质。其中,所述快速存储介质的访问效率比数据库所在的存储介质的访问效率高。数据库所在的存储介质通常为磁盘,如IDE(IntegratedDriveElectronics,电子集成驱动器)磁盘,SATA(SerialAdvancedTechnologyAttachment,串行高级技术附件)磁盘,SAS(SerialAttachedSmallComputerSystemInterface,串行连接小型计算机系统接口)磁盘等等。所述快速存储介质包括但不限于:内存、闪存盘(U盘)、存储卡、光盘、高速寄存器、高速缓存cache或SSD(SolidStateDisk,固态硬盘)等。本发明实施例中的快速存储介质比数据库所在的存储介质访问效率更高、性能更好,可以实现快速定位。
参见图1,本发明一实施例提供了一种数据访问方法,包括:
101:预先在数据库中设置用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且索引字段和记录字段的长度均固定。
102:将所述索引字段映射到快速存储介质中的索引空间。
103:当接收到操作数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与该数据对应的记录字段并对该数据执行操作。
本实施例提供的上述方法,通过设置数据库中分别存储键的信息和值的信息的索引字段和记录字段定长,并将该索引字段映射到快速存储介质中,当操作数据时,在快速存储介质中找到相应的索引字段,从而在数据库中确定对应的记录字段并执行操作,与现有技术相比,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,快速存储介质IO相比磁盘IO可以节省大量的时间,从而极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
参见图2,本发明另一实施例提供了一种数据访问方法,包括:
201:预先在数据库中设置用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且索引字段和记录字段的长度均固定。
参见图3,为本实施例提供的数据库中索引字段和记录字段的结构示意图。数据库的数据结构中包括:头字段Header、索引字段Index和记录字段Record,整个数据库以一个完整的文件形式存储在存储介质上,如存储在磁盘上。其中,索引字段长度固定,记录字段的长度也固定。
Header字段用于存储数据库DB的元数据,包括但不限于:该DB的容量,如可以保存的键值对的个数,key的长度Lkey,value的长度Lvalue,Index字段的附加信息长度Lindex-other,Record字段的附加信息长度Lrecord-other,此外也可以保存第一个Record记录在磁盘上的偏移位置等信息Pfirst-record。Header字段本身在磁盘上占据固定长度的存储空间,处于DB文件的开头。
Index字段用于存储DB的键key以及索引字段的附加信息,该索引字段的附加信息是指与key相关的数据,包括但不限于:该Index字段位置的占用情况,如是否已被占用,在该位置的key的值,当存在hash冲突时该index的后继等等。其中每个部分都具有固定的长度,其中key的长度与Header中指定的key长度一致。所述是否已被占用是指该索引字段中是否保存有键,如果有则称为被占用,否则,未被占用。所述存在hash冲突时该index的后继是指具有相同哈希值的其他键的信息。
Record字段用于存储DB的值value以及记录字段的附加信息,该记录字段的附加信息是指与value相关的数据。其中每个部分都具有固定的长度,value的长度与Header中指定的value长度一致。
本实施例中,索引字段和记录字段的长度固定是指持久化时固定的最大长度,即写入存储介质时固定的最大长度,当key或value的值不足最大长度时,可以通过数据填充的方式补全。例如,key和value的固定长度分别是16字节和64字节,则通过插入put,查找get,删除delete接口传入的key的长度可以是(0,16]字节,value的长度可以是(0,64]字节,而最终存入该DB的key和value的长度则分别是16字节和64字节。
202:在快速存储介质中建立哈希空间和索引空间。
具体地,可以根据数据库配置的哈希桶Bucket大小在快速存储介质中申请足够大的哈希空间,一般以数组等数据结构进行组织,用于存储键的哈希hash值以及该键对应的索引字段在索引空间中的序号,以便于对键进行定位。索引空间可以根据数据库中Index字段的大小在快速存储介质中申请,用于存储数据库中的全部Index字段的信息。
203:将数据库中的索引字段映射到已建立的索引空间中。
所述映射是指将数据库中的所有索引字段都保存到已建立的索引空间中,且按照顺序保存,与位置数据库中的索引字段一一对应。该数据库中的所有索引字段是指在数据库中已开辟的存储空间,无论该索引字段上是否已经保存有键的信息,因此,索引空间中保存的索引字段内容与数据库中索引字段的内容相同,从而可以在快速存储介质中对键进行定位,以代替在数据库中进行定位,可以节省大量的时间,从而极大地提高了数据库的性能。
204:如果所述索引字段中存储有键的信息,则将该键的哈希值以及该索引字段在索引空间中的序号存储在上述哈希空间中,以建立哈希空间和索引空间的关联。
例如,映射到索引空间中的索引字段有10个,其中,第5个存储有键key1,则将该key1的哈希值和索引字段的序号5关联起来存储在哈希空间中,以便于根据哈希值确定对应的索引字段从而进行定位。
所述步骤203和204可以具体包括如下流程:
逐个或逐批遍历数据库中的索引字段,检查每个索引字段中的占用标识,根据该占用标识判断该索引字段是否已被占用,如果未占用,则表示该索引字段空闲,将该索引字段对应的数据结构加入到快速存储介质的索引空间中;如果已经被占用,则表示已经有key保存在该索引字段中,则将该索引字段对应的数据结构以及保存的内容都加入到索引空间中,计算该索引字段中的键的哈希值,在哈希空间中查找是否存在该哈希值,如果不存在,则将该哈希值以及该索引字段的序号保存到哈希空间中;如果存在,则表明哈希值冲突,进一步检查该哈希值的冲突链,将该索引字段的序号保存在该冲突链的最后;重复以上过程直到遍历完数据库中的所有的索引字段,从而完成了数据库中的索引字段到快速存储介质的索引空间的映射。
205:当接收到操作数据的请求时,计算该数据中的键的哈希值。
206:在哈希空间中找到计算得到的哈希值,根据该哈希值对应的索引字段的序号在索引空间中找到相应的索引字段。
207:判断找到的索引字段中的键是否与所述数据中的键相等,如果相等,则执行208;如果不等,则执行209。
208:根据找到的索引字段在索引空间中的序号、索引字段的长度和记录字段的长度计算得到数据库中与所述数据对应的记录字段的位置,并对所述数据执行操作,流程结束。
由于快速存储介质的索引空间中的索引字段与数据库中的索引字段均为顺序存储,且位置一一对应,而所有字段的长度都固定,因此,具体地,可以按照如下公式计算数据库中与所述数据对应的记录字段的位置:
Position(i)=LHeader+LIndex*Numk-v+LRecord*i;
其中,各个符号含义如下:
Position(i):表示数据库中与数据对应的记录字段的位置;
i:表示索引字段的序号;
LHeader:表示数据库中头字段的长度;
LIndex:表示数据库中索引字段的长度;
Numk-v:表示数据库中能够存储的键值对的个数;
LRecord:表示数据库中记录字段的长度。
其中,LIndex=Lkey+Lindex-other;LRecord=Lvalue+Lrecord-other;Lindex-other为索引字段的附加信息的长度;Lrecord-other为记录字段的附加信息的长度。
另外,Header字段中保存的第一个Record记录在数据库中的偏移位置可以计算如下:Pfirst-record=LHeader+LIndex*Numk-v
209:此时,找到的索引字段中的键与所述数据中的键不等,表明存在哈希冲突,则哈希空间中与所述计算得到的哈希值对应的索引字段的序号有多个,因此,根据哈希空间中与所述计算得到的哈希值对应的其它索引字段的序号,在索引空间中遍历其它索引字段,直到找到与所述数据中的键相等的键或者遍历完成为止,然后执行210或211。
210:如果在其它索引字段中找到与所述数据中的键相等的键,则根据该其它索引字段的序号、索引字段的长度和记录字段的长度计算得到数据库中与所述数据对应的记录字段的位置,并对所述数据执行操作,流程结束。
211:如果遍历所述其它索引字段完成后未找到与所述数据中的键相等的键,则如果所述操作为查找或删除,则确定数据库中不存在所述数据,如果所述操作为插入,则在索引空间中选择一个空闲索引字段,将所述数据中键的信息存储在该空闲索引字段中,将该键的哈希值以及该空闲索引字段的序号存储在哈希空间中,并根据该空闲索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并将数据写入确定的索引字段和记录字段中,流程结束。
本实施例提供的上述方法,通过设置数据库中分别存储键的信息和值的信息的索引字段和记录字段定长,并将该索引字段映射到快速存储介质中,当操作数据时,在快速存储介质中找到相应的索引字段,从而在数据库中确定对应的记录字段并执行操作,与现有技术相比,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,快速存储介质IO相比磁盘IO可以节省大量的时间,从而极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
参见图4,本发明又一实施例提供了一种数据访问方法,包括:
401:预先在数据库中设置用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且索引字段和记录字段的长度均固定。
402:将所述索引字段映射到快速存储介质中的索引空间,然后执行步骤403、404和405中的一种或几种。
403:当接收到插入数据的请求时,根据所述数据中的键,在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入确定的索引字段和记录字段中,流程结束。
404:当接收到查找数据的请求时,根据所述数据中的键,在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并从确定的索引字段和记录字段中读出所述数据,流程结束。
405:当接收到删除数据的请求时,根据所述数据中的键,在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并在确定的索引字段和记录字段中删除所述数据,流程结束。
本实施例中,步骤403、404和405为三种不同的情形,在实际应用中,可以执行该三个步骤中的一个或多个步骤,且时间的先后顺序不固定,本发明对此不限定。
本实施例提供的上述方法,通过设置数据库中分别存储键的信息和值的信息的索引字段和记录字段定长,并将该索引字段映射到快速存储介质中,当操作数据时,在快速存储介质中找到相应的索引字段,从而在数据库中确定对应的记录字段并执行操作,与现有技术相比,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,快速存储介质IO相比磁盘IO可以节省大量的时间,从而极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
下面分别以执行数据插入、查找和删除操作为例进行具体说明,在接收到操作数据的请求之前已经完成索引字段到快速存储介质的映射等步骤,与上述实施例中的描述相同,下面三个实施例中就不再赘述。
参见图5,本实施例以执行数据插入put操作为例进行具体说明,一种数据访问的方法,包括:
501:接收插入数据的请求,计算待插入数据的key所对应的哈希值。
502:在哈希空间中查找该哈希值,判断是否找到该哈希值,如果未找到,则执行503;如果找到,则执行504。
503:此时表示目前不存在相同哈希值的key,该key尚未插入过,则根据预设策略从快速存储介质的索引空间中取一个可用的index数据结构即索引字段,修改该索引字段及哈希空间中的属性,以及根据该索引字段的序号位置,完成所述数据在数据库的写入,流程结束。
其中,修改该索引字段及哈希空间中的属性包括:
将该索引字段的占用标识改为已占用;将上述key写入该索引字段;将哈希空间中该hash值所对应的位置指向该索引字段,即存储该索引字段的序号。
根据该索引字段的序号位置,完成所述数据在数据库的写入,包括:
将该索引字段的占用标识改为已占用;将上述key写入该索引字段;根据上述实施例中的公式,找到该索引字段在数据库中对应的记录字段的位置,将待插入数据的value及其他相关数据写入该位置。
其中,所述预设策略包括但不限于:取第一个,或者随机取等等。
504:此时表示已存在相同哈希值的key,即具有相同哈希值的key已经插入过,则进一步检查哈希空间中与该哈希值对应的索引字段序号列表,并且根据该索引字段序号列表中的各个序号,在索引空间中遍历该各个序号对应的各个索引字段,判断其中是否存储有所述key,直到找到存储有所述key的索引字段或者所述对应的各个索引字段遍历完成为止。
505:如果找到存储有所述key的索引字段,则表明该key曾经插入过,此时不再需要在索引空间中重新分配存储空间,则根据已插入该key的索引字段的序号位置,完成所述数据在数据库中的写入,流程结束。
其中,在数据库中的写入过程,包括:
将数据库中的该索引字段的占用标识改为已占用;将所述key写入该索引字段;根据上述实施例中的公式,找到该索引字段对应的记录字段的位置,将待插入数据的value及其他相关数据写入该位置。
506:如果遍历完成后仍未找到存储有所述key的索引字段,则表示该key从未插入过,则根据预设策略从快速存储介质的索引空间中取一个可用的index数据结构即索引字段,修改该索引字段及哈希空间中的属性,以及根据该索引字段的序号位置,完成所述数据在数据库的写入,流程结束。
其中,修改该索引字段及哈希空间中的属性,包括:
将该索引字段的占用标识改为已占用;将所述key写入该索引字段;将哈希空间中该hash值所对应的具有相同哈希值的索引字段序号列表中的最后一个位置指向该索引字段,即存储该索引字段的序号。
根据该索引字段的序号位置,完成所述数据在数据库的写入,包括:
将该索引字段的占用标识改为已占用;将所述key写入该索引字段;根据上述实施例中的公式,找到该索引字段在数据库中对应的记录字段的位置,将待插入数据的value及其他相关数据写入该位置。
其中,所述预设策略包括但不限于:取第一个,或者随机取等等。
参见图6,本实施例以执行数据查找get操作为例进行具体说明,一种数据访问的方法,包括:
601:接收查找数据的请求,计算待查找数据的key所对应的哈希值。
602:在哈希空间中查找该哈希值,判断是否找到该哈希值,如果未找到,则执行603;如果找到,则执行604。
603:此时表示该key尚未插入过,则直接返回结果,表示该数据不存在,流程结束。
604:此时表示与该key具有相同哈希值的key已经存在,则进一步检查哈希空间中与该哈希值对应的索引字段序号列表,并且根据该索引字段序号列表中的各个序号,在索引空间中遍历该各个序号对应的各个索引字段,判断其中是否存储有所述key,直到找到存储有所述key的索引字段或者所述对应的各个索引字段遍历完成为止。
605:如果找到存储有所述key的索引字段,则表明该key曾经插入过,根据已插入该key的索引字段的序号位置,以及上述实施例中的公式,找到该索引字段在数据库中对应的记录字段的位置,从该位置读取value以及相关数据,流程结束。
606:如果遍历完成后仍未找到存储有所述key的索引字段,则表示该key从未插入过,则直接返回结果,表示该数据不存在,流程结束。
参见图7,本实施例以执行数据删除delete操作为例进行具体说明,一种数据访问的方法,包括:
701:接收删除数据的请求,计算待删除数据的key所对应的哈希值。
702:在哈希空间中查找该哈希值,判断是否找到该哈希值,如果未找到,则执行703;如果找到,则执行704。
703:此时表示该key尚未插入过,则直接返回结果,表示该数据不存在,流程结束。
704:此时表示与该key具有相同哈希值的key已经存在,则进一步检查哈希空间中与该哈希值对应的索引字段序号列表,并且根据该索引字段序号列表中的各个序号,在索引空间中遍历该各个序号对应的各个索引字段,判断其中是否存储有所述key,直到找到存储有所述key的索引字段或者所述对应的各个索引字段遍历完成为止。
705:如果找到存储有所述key的索引字段,则表明该key曾经插入过,在索引空间中对所述key的相关内容进行更新,并根据已插入该key的索引字段的序号位置,以及上述实施例中的公式,找到该索引字段在数据库中对应的记录字段的位置,在该位置处完成相关数据的更新,流程结束。
其中,在索引空间中对所述key的相关内容进行更新,包括:
将索引空间中存储有所述key的索引字段中的占用标识改为未占用,将该索引字段加入到空闲空间,在哈希空间中与该索引字段对应的具有相同哈希值的索引字段序号列表中将该索引字段序号删除,并且根据上述实施例中的公式,在数据库中找到该索引字段,并将该索引字段的占用标识改为未占用。
706:如果遍历完成后仍未找到存储有所述key的索引字段,则表示该key从未插入过,则直接返回结果,表示该数据不存在,流程结束。
本实施例提供的上述三种具体操作场景,实现了基于快速存储介质定位下的插入、查找和删除操作,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
参见图8,本发明又一实施例提供了一种数据访问装置,包括:
映射模块801,用于将数据库中的索引字段映射到快速存储介质中的索引空间,该数据库中设置有用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且索引字段和记录字段的长度均固定;
操作模块802,用于当接收到操作数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的记录字段并对所述数据执行操作;
其中,所述快速存储介质的访问效率比数据库所在的存储介质的访问效率高。
本实施例中,映射模块801可以包括:
建立单元,用于在快速存储介质中建立哈希空间和索引空间;
映射单元,用于将数据库中的索引字段映射到索引空间中;
关联单元,用于如果索引字段中存储有键的信息,则将该键的哈希值以及索引字段在索引空间中的序号存储在哈希空间中,以建立哈希空间和索引空间的关联。
在映射模块801包括所述建立单元、映射单元和关联单元的基础上,操作模块802可以包括:
计算单元,用于当接收到操作数据的请求时,计算所述数据中的键的哈希值;
确定单元,用于在哈希空间中找到所述计算单元计算得到的哈希值,根据该哈希值对应的索引字段的序号在索引空间中找到相应的索引字段;
判断单元,用于判断所述确定单元找到的索引字段中的键是否与所述数据中的键相等;
第一操作单元,用于如果所述判断单元判断的结果为相等,则根据该索引字段的序号、索引字段的长度和记录字段的长度计算得到数据库中与所述数据对应的记录字段的位置,并对所述数据执行操作。
其中,所述第一操作单元可以按照如下公式计算数据库中与所述数据对应的记录字段的位置:
Position(i)=LHeader+LIndex*Numk-v+LRecord*i;
其中,Position(i)表示数据库中与数据对应的记录字段的位置,i表示索引字段的序号,LHeader表示数据库中头字段的长度,LIndex表示数据库中索引字段的长度,Numk-v表示数据库中能够存储的键值对的个数,LRecord表示数据库中记录字段的长度。
本实施例中,操作模块802可以包括:
插入单元,用于当接收到插入数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入确定的索引字段和记录字段中;或者,
查找单元,用于当接收到查找数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并从确定的索引字段和记录字段中读出所述数据;或者,
删除单元,用于当接收到删除数据的请求时,根据所述数据中的键在索引空间中找到与所述数据对应的索引字段,根据找到的索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并在确定的索引字段和记录字段中删除所述数据。
本实施例中,当操作模块802包括所述计算单元、确定单元、判断单元和第一操作单元时,进一步地,操作模块802还可以包括:
第二操作单元,用于如果所述判断单元判断出找到的索引字段中的键与所述数据中的键不等,则根据哈希空间中与计算得到的哈希值对应的其它索引字段的序号,在索引空间中遍历其它索引字段,直到找到与所述数据中的键相等的键或者遍历完成;
第三操作单元,用于如果所述第二操作单元在其它索引字段中找到与所述数据中的键相等的键,则根据其它索引字段的序号、索引字段的长度和记录字段的长度计算得到数据库中与所述数据对应的记录字段的位置,并对所述数据执行操作;
第四操作单元,用于如果所述第二操作单元遍历完成后未找到与所述数据中的键相等的键,则如果所述操作为查找或删除,则确定数据库中不存在所述数据,如果所述操作为插入,则在索引空间中选择一个空闲索引字段,将所述数据中键的信息存储在空闲索引字段中,将该键的哈希值以及空闲索引字段的序号存储在哈希空间中,并根据空闲索引字段,在数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入确定的索引字段和记录字段中。
其中,所述判断单元判断出找到的索引字段中的键与所述数据中的键不等时,表明存在哈希冲突,则哈希空间中与所述计算得到的哈希值对应的索引字段的序号有多个,因此,所述第二操作单元可以根据哈希空间中与所述计算得到的哈希值对应的其它索引字段的序号,在索引空间中遍历其它索引字段,直到找到与所述数据中的键相等的键或者遍历完成为止。
本实施例提供的上述装置,通过设置数据库中分别存储键的信息和值的信息的索引字段和记录字段定长,并将该索引字段映射到快速存储介质中,当操作数据时,在快速存储介质中找到相应的索引字段,从而在数据库中确定对应的记录字段并执行操作,与现有技术相比,将数据定位过程全部移入快速存储介质中进行操作,避免了大量的磁盘IO,快速存储介质IO相比磁盘IO可以节省大量的时间,从而极大地提高了数据库的性能,提高了效率。另外,通过减少磁盘IO,可以有效保护磁盘,从而提升磁盘的使用寿命。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种数据访问方法,其特征在于,所述方法包括:
预先在数据库中设置用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且所述索引字段和记录字段的长度均固定;
将所述索引字段映射到快速存储介质中的索引空间;
当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作;
其中,所述快速存储介质的访问效率比所述数据库所在的存储介质的访问效率高;
将所述索引字段映射到快速存储介质中的索引空间,包括:
在所述快速存储介质中建立哈希空间和所述索引空间;
将所述数据库中的索引字段映射到所述索引空间中;
如果所述索引字段中存储有键的信息,则将所述键的哈希值以及所述索引字段在所述索引空间中的序号存储在所述哈希空间中,以建立所述哈希空间和索引空间的关联。
2.根据权利要求1所述的方法,其特征在于,当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作,包括:
当接收到操作数据的请求时,计算所述数据中的键的哈希值;
在所述哈希空间中找到所述计算得到的哈希值,根据所述哈希值对应的索引字段的序号在所述索引空间中找到相应的索引字段;
判断找到的所述索引字段中的键是否与所述数据中的键相等;
如果相等,则根据所述索引字段的序号、索引字段的长度和记录字段的长度计算得到所述数据库中与所述数据对应的记录字段的位置,并对所述数据执行所述操作。
3.根据权利要求2所述的方法,其特征在于,根据所述索引字段的序号、索引字段的长度和记录字段的长度计算得到所述数据库中与所述数据对应的记录字段的位置,包括:
按照如下公式计算所述数据库中与所述数据对应的记录字段的位置:
Position(i)=LHeader+LIndex*Numk-v+LRecord*i;
其中,Position(i)表示所述数据库中与所述数据对应的记录字段的位置,i表示所述索引字段的序号,LHeader表示所述数据库中头字段的长度,LIndex表示所述数据库中索引字段的长度,Numk-v表示所述数据库中能够存储的键值对的个数,LRecord表示所述数据库中记录字段的长度。
4.根据权利要求1所述的方法,其特征在于,当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作,包括:
当接收到插入数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入所述确定的索引字段和记录字段中;或者,
当接收到查找数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并从所述确定的索引字段和记录字段中读出所述数据;或者,
当接收到删除数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并在所述确定的索引字段和记录字段中删除所述数据。
5.根据权利要求2所述的方法,其特征在于,判断找到的所述索引字段中的键是否与所述数据中的键相等之后,还包括:
如果找到的所述索引字段中的键与所述数据中的键不等,则根据所述哈希空间中与所述计算得到的哈希值对应的其它索引字段的序号,在所述索引空间中遍历所述其它索引字段,直到找到与所述数据中的键相等的键或者遍历完成;
如果在所述其它索引字段中找到与所述数据中的键相等的键,则根据所述其它索引字段的序号、索引字段的长度和记录字段的长度计算得到所述数据库中与所述数据对应的记录字段的位置,并对所述数据执行所述操作;
如果遍历完成后未找到与所述数据中的键相等的键,则如果所述操作为查找或删除,则确定所述数据库中不存在所述数据,如果所述操作为插入,则在所述索引空间中选择一个空闲索引字段,将所述数据中键的信息存储在所述空闲索引字段中,将所述键的哈希值以及所述空闲索引字段的序号存储在所述哈希空间中,并根据所述空闲索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入所述确定的索引字段和记录字段中。
6.一种数据访问装置,其特征在于,所述装置包括:
映射模块,用于将数据库中的索引字段映射到快速存储介质中的索引空间,所述数据库中设置有用于存储键的信息的索引字段,和用于存储值的信息的记录字段,且所述索引字段和记录字段的长度均固定;
操作模块,用于当接收到操作数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的记录字段并对所述数据执行所述操作;
其中,所述快速存储介质的访问效率比所述数据库所在的存储介质的访问效率高;
所述映射模块包括:
建立单元,用于在所述快速存储介质中建立哈希空间和所述索引空间;
映射单元,用于将所述数据库中的索引字段映射到所述索引空间中;
关联单元,用于如果所述索引字段中存储有键的信息,则将所述键的哈希值以及所述索引字段在所述索引空间中的序号存储在所述哈希空间中,以建立所述哈希空间和索引空间的关联。
7.根据权利要求6所述的装置,其特征在于,所述操作模块包括:
计算单元,用于当接收到操作数据的请求时,计算所述数据中的键的哈希值;
确定单元,用于在所述哈希空间中找到所述计算得到的哈希值,根据所述哈希值对应的索引字段的序号在所述索引空间中找到相应的索引字段;
判断单元,用于判断找到的所述索引字段中的键是否与所述数据中的键相等;
第一操作单元,用于如果所述判断单元判断的结果为相等,则根据所述索引字段的序号、索引字段的长度和记录字段的长度计算得到所述数据库中与所述数据对应的记录字段的位置,并对所述数据执行所述操作。
8.根据权利要求7所述的装置,其特征在于,所述第一操作单元用于按照如下公式计算所述数据库中与所述数据对应的记录字段的位置:
Position(i)=LHeader+LIndex*Numk-v+LRecord*i;
其中,Position(i)表示所述数据库中与所述数据对应的记录字段的位置,i表示所述索引字段的序号,LHeader表示所述数据库中头字段的长度,LIndex表示所述数据库中索引字段的长度,Numk-v表示所述数据库中能够存储的键值对的个数,LRecord表示所述数据库中记录字段的长度。
9.根据权利要求6所述的装置,其特征在于,所述操作模块包括:
插入单元,用于当接收到插入数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入所述确定的索引字段和记录字段中;或者,
查找单元,用于当接收到查找数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并从所述确定的索引字段和记录字段中读出所述数据;或者,
删除单元,用于当接收到删除数据的请求时,根据所述数据中的键在所述索引空间中找到与所述数据对应的索引字段,根据找到的所述索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并在所述确定的索引字段和记录字段中删除所述数据。
10.根据权利要求7所述的装置,其特征在于,所述操作模块还包括:
第二操作单元,用于如果所述判断单元判断出所述找到的索引字段中的键与所述数据中的键不等,则根据所述哈希空间中与所述计算得到的哈希值对应的其它索引字段的序号,在所述索引空间中遍历所述其它索引字段,直到找到与所述数据中的键相等的键或者遍历完成;
第三操作单元,用于如果所述第二操作单元在所述其它索引字段中找到与所述数据中的键相等的键,则根据所述其它索引字段的序号、索引字段的长度和记录字段的长度计算得到所述数据库中与所述数据对应的记录字段的位置,并对所述数据执行所述操作;
第四操作单元,用于如果所述第二操作单元遍历完成后未找到与所述数据中的键相等的键,则如果所述操作为查找或删除,则确定所述数据库中不存在所述数据,如果所述操作为插入,则在所述索引空间中选择一个空闲索引字段,将所述数据中键的信息存储在所述空闲索引字段中,将所述键的哈希值以及所述空闲索引字段的序号存储在所述哈希空间中,并根据所述空闲索引字段,在所述数据库中确定与所述数据对应的索引字段和记录字段,并将所述数据写入所述确定的索引字段和记录字段中。
CN201180003271.7A 2011-11-24 2011-11-24 数据访问方法和装置 Active CN103229164B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2011/082831 WO2013075306A1 (zh) 2011-11-24 2011-11-24 数据访问方法和装置

Publications (2)

Publication Number Publication Date
CN103229164A CN103229164A (zh) 2013-07-31
CN103229164B true CN103229164B (zh) 2016-08-03

Family

ID=48469007

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180003271.7A Active CN103229164B (zh) 2011-11-24 2011-11-24 数据访问方法和装置

Country Status (2)

Country Link
CN (1) CN103229164B (zh)
WO (1) WO2013075306A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103500088A (zh) * 2013-09-18 2014-01-08 北京航空航天大学 一种用于key-value存储系统的trace序列的生成方法
CN106506493A (zh) * 2016-10-27 2017-03-15 摩登大道时尚电子商务有限公司 基于区块链平台的数据处理方法
CN108614669B (zh) * 2016-12-12 2023-02-17 北京忆恒创源科技股份有限公司 解决哈希冲突的键-数据访问方法与固态存储设备
CN108614671B (zh) * 2016-12-12 2023-02-28 北京忆恒创源科技股份有限公司 基于命名空间的键-数据访问方法与固态存储设备
CN108614668B (zh) * 2016-12-12 2022-12-06 北京忆恒创源科技股份有限公司 基于kv模型的数据访问方法与固态存储设备
CN111061680A (zh) * 2018-10-15 2020-04-24 北京京东尚科信息技术有限公司 一种数据检索的方法和装置
CN109783499B (zh) * 2019-01-18 2023-09-22 成都宝瓜科技有限公司 一种数据缓存方法、装置和服务器
CN110134660A (zh) * 2019-05-22 2019-08-16 苏州浪潮智能科技有限公司 一种数据访问方法、装置、设备及计算机可读存储介质
CN111046074B (zh) * 2019-12-13 2023-09-01 北京百度网讯科技有限公司 流式数据处理方法、装置、设备和介质
CN111639076B (zh) * 2020-05-14 2023-12-22 民生科技有限责任公司 一种跨平台高效键值存储方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101315628A (zh) * 2007-06-01 2008-12-03 华为技术有限公司 内存数据库系统及实现内存数据库的方法和装置
CN101997918A (zh) * 2010-11-11 2011-03-30 清华大学 异构san环境中的海量存储资源按需分配的实现方法
CN102222099A (zh) * 2011-06-21 2011-10-19 中兴通讯股份有限公司 一种数据存储、查找方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6748401B2 (en) * 2001-10-11 2004-06-08 International Business Machines Corporation Method and system for dynamically managing hash pool data structures
CN100543750C (zh) * 2007-11-30 2009-09-23 中兴通讯股份有限公司 一种基于web应用的矩阵式数据缓存方法及装置
US8732139B2 (en) * 2008-12-18 2014-05-20 Sap Ag Method and system for dynamically partitioning very large database indices on write-once tables
US8332363B2 (en) * 2009-04-24 2012-12-11 Hitachi, Ltd. Storage system and data management method of the same

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101315628A (zh) * 2007-06-01 2008-12-03 华为技术有限公司 内存数据库系统及实现内存数据库的方法和装置
CN101997918A (zh) * 2010-11-11 2011-03-30 清华大学 异构san环境中的海量存储资源按需分配的实现方法
CN102222099A (zh) * 2011-06-21 2011-10-19 中兴通讯股份有限公司 一种数据存储、查找方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
实时历史数据库的设计与分析;曾强;《中国优秀硕士学位论文全文数据库 信息科技辑》;20071215(第06期);I138-620,第21页第1段至第27页第2段 *

Also Published As

Publication number Publication date
WO2013075306A1 (zh) 2013-05-30
CN103229164A (zh) 2013-07-31

Similar Documents

Publication Publication Date Title
CN103229164B (zh) 数据访问方法和装置
CN109933570B (zh) 一种元数据管理方法、系统及介质
CN110825748B (zh) 利用差异化索引机制的高性能和易扩展的键值存储方法
EP2735978B1 (en) Storage system and management method used for metadata of cluster file system
CN105117415B (zh) 一种优化的ssd数据更新方法
CN103080910B (zh) 存储系统
KR101977575B1 (ko) 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체
US8868926B2 (en) Cryptographic hash database
US10496523B2 (en) Sequential access storage and data de-duplication
CN107180092B (zh) 一种文件系统的控制方法、装置及终端
US20150006495A1 (en) Methods and apparatuses to optimize updates in a file system based on birth time
CN103164490B (zh) 一种不固定长度数据的高效存储实现方法和装置
CN110168532B (zh) 数据更新方法和存储装置
WO2014015828A1 (zh) 数据存储空间的处理方法、处理系统及数据存储服务器
CN104484471B (zh) 一种高性能数据存储引擎的实现方法
Lee et al. An efficient index buffer management scheme for implementing a B-tree on NAND flash memory
CN103914483A (zh) 文件存储方法、装置及文件读取方法、装置
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
CN104424219A (zh) 一种数据文件的管理方法及装置
CN110134335A (zh) 一种基于键值对的rdf数据管理方法、装置及存储介质
CN106874329A (zh) 数据库表索引的实现方法和装置
CN103246718B (zh) 文件访问方法、装置和设备
CN110515897B (zh) Lsm存储系统读性能的优化方法及系统
CN108804571B (zh) 一种数据存储方法、装置以及设备
CN111625198A (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
C14 Grant of patent or utility model
GR01 Patent grant