一种key与value分开存储的key-value存储系统设计方法技术方案

技术编号:9642245 阅读:226 留言:0更新日期:2014-02-07 00:34
本发明专利技术为一种key与value分开存储的key-value存储系统设计方法,涉及存储系统和程序设计技术领域。本发明专利技术构造了value在文件的写入和读取函数,将value在单独的文件中按照写入顺序存储,将value在文件中的偏移和value的长度组合成一个64位的信息字段,对信息字段进行base64编码,将key和经过base64编码的信息字段作为键值对,写入现有key-value存储系统。在value读取时采用内存映射的方式。本发明专利技术方法对现有技术仅做了少量改动,使得在读取顺序与写入顺序接近时,可以大幅度提升key-value存储系统的读取性能。

【技术实现步骤摘要】
【专利摘要】本专利技术为,涉及存储系统和程序设计
。本专利技术构造了value在文件的写入和读取函数,将value在单独的文件中按照写入顺序存储,将value在文件中的偏移和value的长度组合成一个64位的信息字段,对信息字段进行base64编码,将key和经过base64编码的信息字段作为键值对,写入现有key-value存储系统。在value读取时采用内存映射的方式。本专利技术方法对现有技术仅做了少量改动,使得在读取顺序与写入顺序接近时,可以大幅度提升key-value存储系统的读取性能。【专利说明】—种key与value分开存储的key-value存储系统设计方
本专利技术涉及存储系统和程序设计
,具体涉及键(key)-值(value)存储系统的设计方法。
技术介绍
key-value 存储系统如 Leveldb, Hbase, Cassandra 的底层结构都是以 bigtable为基础,其存储结构类似于图1所示。这些存储系统会将key和value作为一个整体,即一条记录(record)存入系统。在写入过程中,会对记录以key值顺序进行排序,这样就打乱了记录的写入顺序,在磁盘上呈现随机分布的现象。当record的读取顺序与写入顺序接近时,就会带来大量的读磁盘开销,从而影响读性能。
技术实现思路
本专利技术为了提升某些情况下现在的key-value存储系统的读性能,提供了,通过对以bigtable为基础的现有key-value存储系统做少量改动,使这些存储系统在读取顺序与写入顺序接近时的读性能显著提高。本专利技术的,包括如下步骤:第一步,构造value在文件的写入和读取函数,将value在单独的文件中存储。步骤1.1,构造value的写入函数,写入函数的输入参数包括value的内容和长度,返回值为value在文件中的偏移;每次在文件结尾处写入value值,并设置一个变量来保存文件结尾的偏移量。步骤1.2,构造value的读取函数,读取函数的输入参数包括value在文件中的偏移和长度,返回值是字符串形式的value值;value的读取使用内存映射。第二步,实现键值对(key-value)的写入和读取。步骤2.1,键值对的写入,具体是:对一个key-value,首先将value按照步骤1.1写入文件,并获得value在文件中的偏移,然后,将value在文件中的偏移和value的长度组合成一个64位的信息字段,并对信息字段进行base64编码,最后,将key和经过base64编码的信息字段作为一个键值对,写入现有key-value存储系统。步骤2.2,键值对的读取,具体是:首先,根据key值,从现有key-value存储系统中读取对应的信息字段;然后,对读取的信息字段进行base64解码,从中获取对应value在文件中的偏移和长度;最后,将获得的偏移和长度作为参数,调用步骤1.2中value的读取函数,得到真正的value值。步骤1.2所述的value的读取使用内存映射,所使用总的映射空间最多为100MB。步骤1.2所述的value的读取函数,所实现的操作为:首先,对输入的value在文件中的偏移addr进行4kB的对齐操作,获得偏移f_offset ;然后,在总的映射空间中查找f_of f set,若查找到,获取对应的内存映射的起始地址mmap_start,否则,将文件中读取从偏移f_offset开始的大小为K的内容,映射到内存中,并获取对应的内容映射的起始地址_ap_start,K为每次内存映射的大小;最后,判断所需的value内容是否全部在mmap_start开始的大小为K的内存中,若在,直接读取内存mmap_start+addr_f_offset开始的长度为length个字节的内容,否则,先从内存mmap_start+addr-f_offset开始读取f_offset+K_addr个字节的内容,再对f_offset+f_offset+K开始处的文件进行映射,读取所需value剩下的内容;length为value的长度。本专利技术的key-value存储系统设计方法的优点和积极效果在于:本专利技术适用于value的长度在200B以上的数据存储,在一次读取时,需要额外多进行一次读磁盘操作,但从整体上看,对于局部性较好的数据,读磁盘的次数实际上是减少了 ;当数据的读取顺序与写入顺序接近时,可以大幅度提升key-value存储系统的读取性能;同时,实现本专利技术方法所需要的代码修改简单,方便移植于其他key-value存储系统上。【专利附图】【附图说明】图1是bigtable存储示意图;图2是本专利技术的key-value存储系统设计方法的流程示意图;图3中,(a)是使用A系统记录在磁盘上的逻辑结构,(b)是适用本专利技术方法后,记录在磁盘上的逻辑结构。【具体实施方式】下面将结合附图和实施例对本专利技术的技术方案进行详细说明。为方便说明,使用A系统代表Leveldb, Hbase, Cassandra这一类key-value存储系统。本专利技术通过将key和value分开存储,value存储在单独的文件中,原有的A系统中存储key值与value的偏移和长度信息,使得value保持写入顺序。这样,当读取的序列与写入顺序一致时,读取的速度有较大的提升。本专利技术的前提是value的长度在200B以上。结合图2,自底向上介绍本专利技术的key-value存储系统设计方法。第一步,实现value的文件写入和读取函数。步骤1.1,实现value的写入。value的写入相对简单,只是单纯向文件结尾写入value值。系统要同时处理读写请求,所以文件指针会不停变动,因此需要一个变量来保存文件结尾的偏移量。本专利技术实施例中所构造的value的写入函数myPut如下:int myPut(const char*value, const uint32_t&length, uint64_t&addr),该函数中,value和length为需要输入的参数,value表示所存储的value的内容,length表示value的长度,addr表示value在文件中的偏移。在value的写入函数的实现中,首先获取锁,保证写文件时不会进行读取操作。然后使用函数 P write (fd, value, length, offset)向文件写入 value,参数 fd 和 offset 为类的属性,fd用来记载所要写入的文件名称。接着释放锁,根据函数pwrite的返回值判断是否正确写入,如果写入错误,返回-1 ;否则,写入正确,将offset赋值给addr, offset本身加上length,返回O。变量offset记录了本次写入操作后文件结尾的位置,用以指明下次写入的起始地址。步骤1.2,实现value的读取。value的读取使用内存映射,称所使用的总的映射空间为字典,本专利技术实施例中字典的大小最多设置为100MB。在默认每次映射2MB的文件内容的情况下,最多可缓存50块文件内容,这50块文件内容可采用近期最少使用算法(LeastRecently Used,简称LRU)进行调度,也就是字典中有50项,每项为2MB的映射空间。字典中的每项的映射空本文档来自技高网...

【技术保护点】
一种键(key)与值(value)分开存储的key?value存储系统设计方法,基于底层结构以bigtable为基础的现有key?value存储系统,其特征在于,包括如下两个步骤:第一步,构造value在文件的写入和读取函数,将value在单独的文件中存储;步骤1.1,构造value的写入函数,写入函数的输入参数包括value的内容和长度,返回值为value在文件中的偏移;每次在文件结尾处写入value值,并设置一个变量用来保存文件结尾的偏移量;步骤1.2,构造value的读取函数,读取函数的输入参数包括value在文件中的偏移和长度,返回值是字符串形式的value值;value的读取使用内存映射;第二步,实现键值对(key?value)的写入和读取;步骤2.1,键值对的写入,具体是:对一个key?value,首先将value按照步骤1.1写入文件,并获得value在文件中的偏移,然后,将value在文件中的偏移和value的长度组合成一个64位的信息字段,并对信息字段进行base64编码,最后,将key和经过base64编码的信息字段作为一个键值对,写入现有key?value存储系统;步骤2.2键值对的读取,具体是:首先,根据key值,从现有key?value存储系统中读取对应的信息字段,然后,对读取的信息字段进行base64解码,从中获取对应value在文件中的偏移和长度;最后,将获得的偏移和长度作为参数,调用步骤1.2中value的读取函数,得到value值。...

【技术特征摘要】

【专利技术属性】
技术研发人员:王雷赵玉龙王宇
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1