1.一种适用于键值对数据的存储方法,其特征在于,具体包括如下步骤:
(1)将存储区域划分为日志区和数据区;并将数据区划分为大小固定的存储槽;
(2)根据文件名将日志归并树合并操作中生成的数据表文件一一映射到存储槽上;所述数据表文件具有唯一的序列号,所述存储槽具有一个描述符块;
(3)将日志类型的键值对数据存储到所述日志区;将数据表请求类型的键值对数据插入内存中的数据表并在数据表达到预设尺度时进行内存表合并,将合并后的数据表写入所述存储槽。
2.如权利要求1所述的存储方法,其特征在于,所述步骤(3)包括如下子步骤:
(3.1)将日志类型的键值对数据以追加的方式写入所述日志区;
(3.2)将数据表请求类型的键值对数据插入内存中的数据表,当数据表达到预设尺度,则进入步骤(3.4);否则进入步骤(3.3);
(3.3)接收新的键值对数据,进入步骤(3.2);
(3.4)启用后台线程,将内存表与硬盘上的第一层表进行合并;判断合并后的第一层表的数据是否超过预设尺度,若否,则结束;若是,将第一层表合并至下一层,直到所有层的数据都在预设尺度之内。
3.如权利要求2所述的存储方法,其特征在于,所述步骤(3.4)中,将合并产生的数据表进行缓存,直至生成一个完整的数据表;在内存中将所述完整的数据表组包构成slot数据包,并将所述slot数据包写入存储槽。
4.如权利要求2所述的存储方法,其特征在于,所述步骤(3.4)的合并处理中,将归并操作与读写操作并行处理,以提高系统吞吐率。
5.如权利要求1至4任一项所述的存储方法,其特征在于,以单向的方式、按照序号从0、1、2……、N-1、0、1、2……、N-1的方式循环分配存储槽;当某个存储槽已被占用,则向后顺延至最近的空闲存储槽;若遍历所有存储槽都未发现空闲槽,则报告存储器已满。
6.如权利要求1至4任一项所述的存储方法,其特征在于,采用描述符来描述存储槽的状态,所述描述符内容包括存储槽使用状态、数据表长度和校验码。
7.如权利要求6所述的存储方法,其特征在于,在键值对数据应用请求对slot数据包进行写请求的同时对描述符进行存储。
8.如权利要求1所述的存储方法,其特征在于,对合并处理所产生的slot数据包写请求与log操作产生的写请求分开处理;
对log请求则直接读写并以读写数据单位进行存储;对Slot数据包请求则一次发送整个Slot数据包大小的数据,以尽可能提高存储设备的利用率。
9.如权利要求1所述的存储方法,其特征在于,在系统启动时根据描述符在内存中生成一个位图用于指示所有存储槽的使用状态,在分配存储槽时通过查询所述位图快速查找空闲的存储槽,以加快分配过程。
10.如权利要求9所述的存储方法,其特征在于,通过在内存中维护一个空闲表用于保存空闲slot序列用以存储槽分配,以避免分配存储槽时的读写。