数据写入方法、装置、计算机设备及可读存储介质转让专利
申请号 : CN201810202085.X
文献号 : CN108345434B
文献日 : 2021-03-30
发明人 : 黄成林
申请人 : 广州酷狗计算机科技有限公司
摘要 :
权利要求 :
1.一种数据写入方法,其特征在于,所述方法应用于存储节点中,所述存储节点至少包括内存存储和磁盘存储,所述方法包括:当检测到哈希表的数据量达到第一阈值时,将所述哈希表的至少一个子键写入内存压缩块的至少一个第一槽位中,所述哈希表中包括所述至少一个子键及至少一个第一内存块,所述哈希表和所述内存压缩块部署在所述内存存储中,所述内存压缩块包括与所述至少一个子键对应的至少一个第一槽位;
对于所述至少一个第一槽位中的任一第一槽位,对所述第一槽位对应的全部第一内存块进行紧缩处理,生成第二内存块,将所述第二内存块写入所述内存压缩块;
当检测到所述内存压缩块的数据量达到第二阈值时,获取所述内存压缩块中至少一个第一槽位中的全部子键,将所述至少一个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中,所述磁盘压缩块部署在所述内存存储和所述磁盘存储中,所述磁盘压缩块部署于所述内存存储的第一部分压缩块包括与所述至少一个第一槽位对应的至少一个第二槽位;
对于所述至少一个第二槽位中的任一第二槽位,对所述第二槽位对应的全部第二内存块进行紧缩处理,生成待写入磁盘文件,将所述待写入磁盘文件写入所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块;
所述当检测到哈希表的数据量达到第一阈值时,将所述哈希表的至少一个子键写入内存压缩块的至少一个第一槽位中,包括:当检测到所述哈希表的数据量达到第一阈值时,获取所述哈希表中的至少一个子键;
获取所述至少一个第一槽位的至少一个第一槽位锁;
在所述至少一个第一槽位中确定所述至少一个子键对应的至少一个第一槽位分片,所述内存压缩块中至少一个第一槽位中每个第一槽位均包括多个第一槽位分片;
基于所述至少一个第一槽位锁,将所述哈希表的至少一个子键写入所述至少一个第一槽位分片。
2.根据权利要求1所述的方法,其特征在于,所述当检测到哈希表的数据量达到第一阈值时,将所述哈希表的至少一个子键写入内存压缩块的至少一个第一槽位中之前,所述方法还包括:
建立多个子键,生成所述哈希表;
接收用户的数据写入指令,所述数据写入指令携带待写入值数据和待写入子键;
当检测到所述哈希表的数据量未达到所述第一阈值时,基于所述待写入值数据,生成待写入第一内存块;
将所述待写入第一内存块写入所述待写入子键在所述哈希表中指示的位置。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:在所述内存存储中设置候选哈希表,所述候选哈希表包括的内容与所述哈希表包括的内容一致;
当所述哈希表中的至少一个第一内存块进行紧缩处理时,基于所述候选哈希表接收用户的待写入值数据。
4.根据权利要求1所述的方法,其特征在于,所述对于所述至少一个第一槽位中的任一第一槽位,对所述第一槽位对应的全部第一内存块进行紧缩处理,生成第二内存块,将所述第二内存块写入所述内存压缩块包括:对于所述至少一个第一槽位中的任一第一槽位,确定所述第一槽位的至少一个第一槽位分片中每个第一槽位分片对应的第一内存块;
并行对至少一个第一槽位分片中每个第一槽位分片对应的第一内存块进行紧缩处理,生成所述第二内存块;
如果所述第一槽位在所述内存压缩块中存在对应的旧第二内存块,则基于所述第二内存块对所述旧第二内存块进行替换,完成所述待写入内存块的写入;
如果所述第一槽位在所述内存压缩块中不存在对应的旧第二内存块,则直接将所述第二内存块写入所述内存压缩块。
5.根据权利要求1所述的方法,其特征在于,所述当检测到所述内存压缩块的数据量达到第二阈值时,获取所述内存压缩块中至少一个第一槽位中的全部子键,将所述至少一个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中包括:当检测到所述内存压缩块的数据量达到第二阈值时,获取所述内存压缩块中至少一个第一槽位中的全部子键;
获取所述至少一个第二槽位的至少一个第二槽位锁;
在所述至少一个第二槽位中确定所述至少一个第一槽位中全部子键对应的至少一个第二槽位分片,所述磁盘压缩块中至少一个第二槽位中每个第二槽位均包括多个第二槽位分片;
基于所述至少一个第二槽位锁,将所述至少一个第一槽位中的全部子键写入所述至少一个第二槽位分片。
6.根据权利要求1所述的方法,其特征在于,所述对于所述至少一个第二槽位中的任一第二槽位,对所述第二槽位对应的全部第二内存块进行紧缩处理,生成待写入磁盘文件,将所述待写入磁盘文件写入所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块包括:对于所述至少一个第二槽位中的任一第二槽位,确定所述第二槽位的至少一个第二槽位分片中每个第二槽位分片对应的第二内存块;
并行对至少一个第二槽位分片中每个第二槽位分片对应的第二内存块进行紧缩处理,生成所述待写入磁盘文件;
如果所述第二槽位在所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块中存在对应的旧磁盘文件,则基于所述待写入磁盘文件对所述旧磁盘文件进行替换,完成所述待写入磁盘文件的写入;
如果所述第二槽位在所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块中不存在对应的旧磁盘文件,则直接将所述待写入磁盘文件写入所述磁盘压缩块。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:当接收到用户的数据读取指令时,基于所述数据读取指令携带的待读取槽位标识确定待读取槽位锁;
获取所述待读取槽位锁在所述哈希表中指示的第一候选数据;
获取所述待读取槽位锁在所述内存压缩块中指示的第二候选数据;
获取所述待读取槽位锁在所述磁盘压缩块中指示的第三候选数据;
将所述第一候选数据、所述第二候选数据和所述第三候选数据作为待读取值数据,将所述待读取值数据返回至所述用户。
8.一种数据写入装置,其特征在于,所述装置应用于存储节点中,所述存储节点至少包括内存存储和磁盘存储,所述装置包括:第一写入模块,用于当检测到哈希表的数据量达到第一阈值时,将所述哈希表的至少一个子键写入内存压缩块的至少一个第一槽位中,所述哈希表中包括所述至少一个子键及至少一个第一内存块,所述哈希表和所述内存压缩块部署在所述内存存储中,所述内存压缩块包括与所述至少一个子键对应的至少一个第一槽位,其中,当检测到所述哈希表的数据量达到第一阈值时,获取所述哈希表中的至少一个子键;获取所述至少一个第一槽位的至少一个第一槽位锁;在所述至少一个第一槽位中确定所述至少一个子键对应的至少一个第一槽位分片,所述内存压缩块中至少一个第一槽位中每个第一槽位均包括多个第一槽位分片;基于所述至少一个第一槽位锁,将所述哈希表的至少一个子键写入所述至少一个第一槽位分片;
第一紧缩模块,用于对于所述至少一个第一槽位中的任一第一槽位,对所述第一槽位对应的全部第一内存块进行紧缩处理,生成第二内存块,将所述第二内存块写入所述内存压缩块;
第二写入模块,用于当检测到所述内存压缩块的数据量达到第二阈值时,获取所述内存压缩块中至少一个第一槽位中的全部子键,将所述至少一个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中,所述磁盘压缩块部署在所述内存存储和所述磁盘存储中,所述磁盘压缩块部署于所述内存存储的第一部分压缩块包括与所述至少一个第一槽位对应的至少一个第二槽位;
第二紧缩模块,用于对于所述至少一个第二槽位中的任一第二槽位,对所述第二槽位对应的全部第二内存块进行紧缩处理,生成待写入磁盘文件,将所述待写入磁盘文件写入所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:第一生成模块,用于建立多个子键,生成所述哈希表;
接收模块,用于接收用户的数据写入指令,所述数据写入指令携带待写入值数据和待写入子键;
第二生成模块,用于当检测到所述哈希表的数据量未达到所述第一阈值时,基于所述待写入值数据,生成待写入第一内存块;
第三写入模块,用于将所述待写入第一内存块写入所述待写入子键在所述哈希表中指示的位置。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:设置模块,用于在所述内存存储中设置候选哈希表,所述候选哈希表包括的内容与所述哈希表包括的内容一致;
所述接收模块,还用于当所述哈希表中的至少一个第一内存块进行紧缩处理时,基于所述候选哈希表接收用户的待写入值数据。
11.根据权利要求8所述的装置,其特征在于,所述第一紧缩模块包括:确定子模块,用于对于所述至少一个第一槽位中的任一第一槽位,确定所述第一槽位的至少一个第一槽位分片中每个第一槽位分片对应的第一内存块;
紧缩子模块,用于并行对至少一个第一槽位分片中每个第一槽位分片对应的第一内存块进行紧缩处理,生成所述第二内存块;
替换子模块,用于如果所述第一槽位在所述内存压缩块中存在对应的旧第二内存块,则基于所述第二内存块对所述旧第二内存块进行替换,完成所述待写入内存块的写入;
写入子模块,用于如果所述第一槽位在所述内存压缩块中不存在对应的旧第二内存块,则直接将所述第二内存块写入所述内存压缩块。
12.根据权利要求8所述的装置,其特征在于,所述第二写入模块包括:第一获取子模块,用于当检测到所述内存压缩块的数据量达到第二阈值时,获取所述内存压缩块中至少一个第一槽位中的全部子键;
第二获取子模块,用于获取所述至少一个第二槽位的至少一个第二槽位锁;
确定子模块,用于在所述至少一个第二槽位中确定所述至少一个第一槽位中全部子键对应的至少一个第二槽位分片,所述磁盘压缩块中至少一个第二槽位中每个第二槽位均包括多个第二槽位分片;
写入子模块,用于基于所述至少一个第二槽位锁,将所述至少一个第一槽位中的全部子键写入所述至少一个第二槽位分片。
13.根据权利要求8所述的装置,其特征在于,所述第二紧缩模块包括:确定子模块,用于对于所述至少一个第二槽位中的任一第二槽位,确定所述第二槽位的至少一个第二槽位分片中每个第二槽位分片对应的第二内存块;
紧缩子模块,用于并行对至少一个第二槽位分片中每个第二槽位分片对应的第二内存块进行紧缩处理,生成所述待写入磁盘文件;
替换子模块,用于如果所述第二槽位在所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块中存在对应的旧磁盘文件,则基于所述待写入磁盘文件对所述旧磁盘文件进行替换,完成所述待写入磁盘文件的写入;
写入子模块,用于如果所述第二槽位在所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块中不存在对应的旧磁盘文件,则直接将所述待写入磁盘文件写入所述磁盘压缩块。
14.根据权利要求8所述的装置,其特征在于,所述装置还包括:确定模块,用于当接收到用户的数据读取指令时,基于所述数据读取指令携带的待读取槽位标识确定待读取槽位锁;
获取模块,用于获取所述待读取槽位锁在所述哈希表中指示的第一候选数据;
所述获取模块,还用于获取所述待读取槽位锁在所述内存压缩块中指示的第二候选数据;
所述获取模块,还用于获取所述待读取槽位锁在所述磁盘压缩块中指示的第三候选数据;
返回模块,用于将所述第一候选数据、所述第二候选数据和所述第三候选数据作为待读取值数据,将所述待读取值数据返回至所述用户。
15.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可执行指令,其特征在于,所述处理器执行所述计算机可执行指令时实现权利要求1-7任一项所述的数据写入方法。
16.一种可读存储介质,其特征在于,所述可读存储介质上存储有指令,所述指令被处理器执行以完成权利要求1-7任一项所述的数据写入方法。
说明书 :
数据写入方法、装置、计算机设备及可读存储介质
技术领域
背景技术
关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据;非
关系型数据库是使用键值存储数据的数据库,也即键值数据库,非关系型数据库按照键值
对的形式对数据进行组织和存储。
进制结构化数据进行归档的场景中,该场景的需求特点是数据只会增加,且不会对已经存
储的数据进行修改和删除,这样,在使用诸如Mysql(My structured query language,小型
关联式数据库管理系统)的关系型数据库进行该场景中数据的写入或追加数据,通常不断
地向关系型数据库中插入行数据;在使用诸如Redis(键值数据库)等非关系型数据库进行
该场景中数据的写入或追加时,在非关系型数据库中读取已经存储的数据,确定将数据写
入的位置,并在该位置实现数据的写入或追加操作。
量受到内存存储容量的限制,智能性较差。
发明内容
种数据写入方法、装置、计算机设备及可读存储介质。
存块,所述哈希表和所述内存压缩块部署在所述内存存储中,所述内存压缩块包括与所述
至少一个子键对应的至少一个第一槽位;
少一个第二槽位中,所述磁盘压缩块部署在所述内存存储和所述磁盘存储中,所述磁盘压
缩块部署于所述内存存储的第一部分压缩块包括与所述至少一个第一槽位对应的至少一
个第二槽位;
部署于所述磁盘存储的第二部分压缩块。
所述内存压缩块包括:
子键写入磁盘压缩块的至少一个第二槽位中包括:
槽位分片;
文件写入所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块包括:
述待写入磁盘文件的写入;
键及至少一个第一内存块,所述哈希表和所述内存压缩块部署在所述内存存储中,所述内
存压缩块包括与所述至少一个子键对应的至少一个第一槽位;
内存压缩块;
写入磁盘压缩块的至少一个第二槽位中,所述磁盘压缩块部署在所述内存存储和所述磁盘
存储中,所述磁盘压缩块部署于所述内存存储的第一部分压缩块包括与所述至少一个第一
槽位对应的至少一个第二槽位;
写入所述磁盘压缩块部署于所述磁盘存储的第二部分压缩块。
槽位分片;
均包括多个第二槽位分片;
行替换,完成所述待写入磁盘文件的写入;
缩块。
指令时实现上述第一方面所述的数据写入方法。
内存块,将第二内存块写入内存压缩块,并当检测到内存压缩块的数据量达到第二阈值时,
获取内存压缩块中至少一个第一槽位中的全部子键,将至少一个第一槽位中的全部子键写
入磁盘压缩块的至少一个第二槽位中,对第二槽位对应的全部第二内存块进行紧缩处理,
生成待写入磁盘文件,将待写入磁盘文件写入磁盘压缩块部署于磁盘存储的第二部分压缩
块,通过多步的紧缩过程将存储节点中存储的值数据均写入磁盘存储,使得存储节点可以
写入或追加的数据的数据量不会受到内存存储容量的限制,智能性较优。
附图说明
具体实施方式
中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附
权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
存块,哈希表和内存压缩块部署在内存存储中,内存压缩块包括与至少一个子键对应的至
少一个第一槽位。
少一个第二槽位中,磁盘压缩块部署在内存存储和磁盘存储中,磁盘压缩块部署于内存存
储的第一部分压缩块包括与至少一个第一槽位对应的至少一个第二槽位。
于磁盘存储的第二部分压缩块。
块进行紧缩处理,生成第二内存块,将第二内存块写入内存压缩块,并当检测到内存压缩块
的数据量达到第二阈值时,获取内存压缩块中至少一个第一槽位中的全部子键,将至少一
个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中,对第二槽位对应的全部
第二内存块进行紧缩处理,生成待写入磁盘文件,将待写入磁盘文件写入磁盘压缩块部署
于磁盘存储的第二部分压缩块,通过多步的紧缩过程将存储节点中存储的值数据均写入磁
盘存储,使得存储节点可以写入或追加的数据的数据量不会受到内存存储容量的限制,智
能性较优。
块的至少一个第二槽位中包括:
块部署于磁盘存储的第二部分压缩块包括:
进行说明,Gateway将键的键空间(0~232)划分为8个子空间,每个子空间负责(0~229)范围
的键空间,将8个子空间对应到8个Storage存储,并当接收到用户的指令时,将指令路由到
对应的Storage进行处理。Storage用于将子键与值数据对应存储,参见图2B,Storage中的
存储空间分为内存存储和磁盘存储,其中,内存存储中部署有哈希表(HashTable)、内存压
缩块(MemCompactedBlock)和磁盘压缩块(DiskCompactedBlock)的第一部分压缩块,磁盘
存储中部署有磁盘压缩块的第二部分压缩块。另外,内存压缩块和磁盘压缩块均被划分为
至少一个槽位,也即slot(槽位),一般来说,通常将内存压缩块和磁盘压缩块划分为4096个
槽位,且内存压缩块和磁盘压缩块基于槽位存储子键,因此,在Storage中存储有内存压缩
块及磁盘压缩块中各个槽位的槽位锁,以便在接收到用户的数据写入指令或数据读取指令
时,获取相应槽位的槽位锁,并基于槽位锁完成指令所指示的操作。哈希表存储有至少一个
子键和至少一个第一内存块之间的对应关系,内存压缩块包括至少一个第一槽位和至少一
个第二内存块,第二内存块可以用MemBlock(内存块)表示;磁盘压缩块包括至少一个第二
槽位和至少一个磁盘文件,磁盘文件可以用FlieBlock(文件内存块)表示。其中,磁盘压缩
块的至少一个第二槽位部署在Storage的内存存储中,至少一个磁盘文件部署在Storage的
磁盘存储中。
任何的数据写入操作或数据读取操作,因此,在内存存储中设置有与哈希表完全一致的候
选哈希表,这样,当哈希表中的至少一个第一内存块进行紧缩处理时,可以基于候选哈希表
接收用户的待写入值数据和待追加值数据,从而保证Storage中的数据写入操作和数据读
取操作不会受到紧缩操作的限制。
值时,执行下述步骤303。
内存块可以用Value(值数据)表示。在进行值数据的存储之前,存储节点中可以建立多个子
键,生成用于存储子键与第一内存块之间对应关系的哈希表,以便在后续接收到用户的数
据写入指令时,基于数据写入指令中携带的待写入子键确定将待写入值数据写入的位置。
参见图3B,哈希表中多个子键可以采用连续的子键内存块进行存储,且每个子键对应不同
的下标,也即图3B中的key0、key1、key2等等,以便对多个子键进行区分。需要说明的是,当哈
希表初次形成时,哈希表中并不包括第一内存块,第一内存块为哈希表在接收到用户的数
据写入指令时,根据数据写入指令携带的待写入值数据生成并添加到待写入子键在哈希表
中所指示的位置的。
行存储,则Gateway会根据当前各个存储节点的存储状态,确定空闲存储空间可以满足用户
存储需求的指定存储节点,并为数据写入指令添加待写入子键,将添加待写入子键的数据
写入指令路由至指定存储节点,以便指定存储节点将数据写入指令携带的待写入子键和待
写入值数据对应存储;如果数据写入指令中携带了待写入子键,则表示数据写入指令中携
带的待写入值数据为追加数据,这样,便可以直接将该追加数据添加至数据写入指令中携
带的待写入子键在哈希表中指示的位置,无需再为待写入值数据分配新的子键,既保证了
对之前数据追加的准确性,同时又简化了数据写入的过程。
此,Storage中设置有第一阈值,当Storage接收到用户的数据写入指令时,需要对哈希表的
数据量进行检测,如果检测到哈希表的数据量未达到第一阈值,则表示可以将数据写入指
令携带的待写入值数据写入哈希表,也即执行下述步骤302;如果检测到哈希表的数据量达
到第一阈值,则表示当前哈希表的存储空间已满,无法存储数据写入指令携带的待写入值
数据,需要将哈希表中的内容紧缩到内存压缩块中,也即执行下述步骤303。
无需将哈希表中当前的全部内容紧缩至内存压缩块中,因此,可以基于待写入值数据,生成
待写入第一内存块,将待写入第一内存块写入待写入子键在哈希表中指示的位置。
待写入值数据生成待写入第一内存块后,可以确定待写入子键在哈希表中指示位置已经存
储的连续的其他第一内存块,将待写入第一内存块添加至该连续的其他第一内存块的末尾
即可;如果待写入子键在哈希表中所指示位置并未存储任一第一内存块,则直接将待写入
第一内存块添加至待写入子键在哈希表中指示的位置即可。
中每个第一槽位均包括多个第一槽位分片。
slot0002等等;其中,至少一个第一槽位中每个槽位均包括多个第一槽位分片,也即slice,
且每个第一槽位分片对应不同的下标,例如slice0、slice1、slice2等等,通常来说,每个第
一槽位包括16个第一槽位分片,第一槽位分片用于存储哈希表中至少一个子键,指定第一
槽位为至少一个第一槽位中未满的第一槽位。如果检测到哈希表的数据量达到第一阈值,
则表示当前哈希表的存储空间已满,无法存储数据写入指令携带的待写入值数据,需要将
哈希表中的至少一个子键和至少一个第一内存块紧缩到内存压缩块中,使得哈希表中存在
可以写入待写入值数据的空闲空间。
对应槽位锁,为了保证将哈希表中至少一个子键紧缩到正确的槽位,避免发生写入错误,需
要先在内存压缩块中分别确定至少一个子键对应的至少一个第一槽位;随后,获取至少一
个第一槽位的至少一个第一槽位锁,以便后续基于第一槽位锁将至少一个子键写入与其对
应的第一槽位,保证至少一个第一槽位紧缩的准确性。
在至少一个第一槽位中确定具体存储至少一个子键的至少一个第一槽位分片,并基于第一
槽位锁,将哈希表的至少一个子键写入至少一个第一槽位分片,以便在后续对至少一个第
一槽位中包括的全部子键对应的第一内存块进行紧缩处理,从而在将哈希表中的内容紧缩
到内存压缩块中时,可以尽可能少的占用内存压缩块中的存储空间。例如,哈希表中属于槽
位0001的至少一个子键需要紧缩到内存压缩块中第一槽位0001指示的第一槽位分片中。
每个第一槽位分片对应的第一内存块进行紧缩处理,生成第二内存块,如果第一槽位在内
存压缩块中存在对应的旧第二内存块,则执行下述步骤306;如果第一槽位在内存压缩块中
不存在对应的旧第二内存块,则执行下述步骤307。
位进行紧缩处理,也即对该第一槽位中全部子键指示的全部第一内存块进行紧缩处理。在
对该第一槽位进行紧缩处理时,首先,分别确定该第一槽位的至少一个第一槽位分片中每
个第一槽位分片对应的第一内存块;随后,并行对至少一个第一槽位分片中每个第一槽位
分片对应的第一内存块进行紧缩处理,也即至少一个槽位分片同时对其对应的全部第一内
存块进行紧缩处理,生成第二内存块,完成对该第一槽位进行紧缩处理,以便提高对指定第
一槽位进行紧缩处理的效率。
中已经存在对应的旧第二内存块。如果该第一槽位在内存压缩块中存在对应的旧第二内存
块,则需要基于上述操作生成的第二内存块对旧第二内存块进行替换,进而完成将第二内
存块写入内存压缩块,也即执行下述步骤306;如果该第一槽位在内存压缩块中不存在对应
的旧第二内存块,则表示当前是首次对该第一槽位进行紧缩处理,直接将第二内存块写入
内存压缩块即可,也即执行下述步骤307。需要说明的是,至少一个第一槽位中的每个槽位
均可以通过上述305中所示的过程生成与其对应的第二内存块。
将生成的第二内存块写入该第一槽位在内存压缩块中指示的位置即可。
位置。
少一个第二槽位中每个第二槽位均包括多个第二槽位分片。
缩块在第一内存压缩块中部署至少一个第二槽位,也即磁盘压缩块将全部子键存储在内存
存储;将值数据存储在第二部分压缩块中也即进行值数据存储在磁盘存储中,由于磁盘存
储的存储空间远远大于内存存储,因此,使得磁盘存储可以存储的数据量不会受到限制。另
外,磁盘压缩块的内存存储包括至少一个第二槽位,也即slot,且每个第二槽位对应不同的
下标,例如slot0000、slot0001、slot0002等等;其中,至少一个第二槽位中每个槽位均包括多个
第二槽位分片,也即slice,且每个第一槽位分片对应不同的下标,例如slice0、slice1、
slice2等等,通常来说,每个第二槽位包括16个第二槽位分片。第二槽位分片用于存储内存
压缩块中至少一个子键,指定第二槽位为至少一个第二槽位中未满槽位。
值数据,需要对内存压缩块进行紧缩操作,这样,便需要先在磁盘压缩块中确定至少一个第
二槽位的至少一个第二槽位锁,以便随后将内存压缩块中的全部内容紧缩至至少一个第二
槽位在磁盘压缩块中指示的位置。其中,在磁盘压缩块中确定至少一个第二槽位及获取至
少一个第二槽位锁的过程与上述步骤303中所示的确定至少一个第一槽位及获取至少一个
第二槽位锁的过程一致,此处不再进行赘述。
大,会占用大量的磁盘IO(Input/Output,输入/输出),因此,只有在内存压缩块不存在任何
空闲存储空间时才将内存压缩块中的全部内容紧缩至磁盘压缩块中,进而保证Storage的
正常工作不会受到影响。
入至少一个第二槽位分片。
位锁,将至少一个第一槽位中的全部子键写入指定第二槽位分片。其中,在至少一个第二槽
位锁中确定至少一个第一槽位中全部子键对应的至少一个第二槽位分片并将全部子键写
入至少一个第二槽位分片的过程与上述步骤304中所示的确定至少一个第一槽位分片将至
少一个子键写入至少一个第一槽位分片的过程一致,此处不再进行赘述。例如,内存压缩块
中属于第一槽位0001的至少一个子键需要紧缩到磁盘压缩块中第二槽位0001指示的第二
槽位分片中。
中每个第二槽位分片对应的第二内存块进行紧缩处理,生成待写入磁盘文件,如果该第二
槽位在磁盘压缩块部署于磁盘存储的第二部分压缩块中存在对应的旧磁盘文件,则执行下
述步骤311;如果该第二槽位在磁盘压缩块部署于磁盘存储的第二部分压缩块中不存在对
应的旧磁盘文件,则执行下述步骤312。
该第二槽位中全部子键指示的全部第二内存块进行紧缩处理。其中,对该第二槽位进行紧
缩处理的过程与上述步骤305中所示的对第一槽位进行紧缩处理的过程一致,此处不再进
行赘述。
缩块中已经存在对应的旧磁盘文件。如果该第二槽位在磁盘压缩块中存在对应的旧磁盘文
件,则需要基于上述操作生成的磁盘文件对旧磁盘文件进行替换,进而完成将磁盘文件写
入磁盘压缩块,也即执行下述步骤311;如果该第二槽位在磁盘压缩块中不存在对应的旧磁
盘文件,则表示当前是首次对该第二槽位进行紧缩处理,直接将磁盘文件写入磁盘压缩块
即可,也即执行下述步骤312。
盘文件的写入。
进行替换,将旧磁盘文件删除,将生成的磁盘文件写入该第二槽位在磁盘压缩块部署于磁
盘存储的第二部分压缩块中指示的位置即可。
二槽位在磁盘压缩块部署于磁盘存储的第二部分压缩块中指示的位置。
313至步骤315中的过程。
令携带的待读取槽位标识确定待读取槽位锁,以便随后基于待读取槽位锁确定待读取槽
位,进而对待读取槽位中的值数据进行读取。
候选数据。
缩块可能会进行了紧缩操作,导致待读取数据可能分别存储在哈希表、内存压缩块及磁盘
压缩块中,因此,需要分别在哈希表、内存压缩块及磁盘压缩块中的待读取槽位锁中读取第
一候选数据、第二候选数据及第三候选数据,以便后续将第一候选数据、第二候选数据和第
三候选数据作为待读取数据。
给用户。
3G中所示的过程实现对待读取值数据的读取。
表的数据量未达到第一阈值,则将待写入值数据写入哈希表,完成值数据的写入;如果哈希
表的数据量达到第一阈值,则将哈希表的全部内容紧缩至内存压缩块,并将待写入值数据
写入清空后的哈希表。其中,如果哈希表正在进行紧缩操作,则可以基于候选哈希表执行对
待写入值数据的写入。对内存压缩块的数据量进行检测,如果内存压缩块的数据量未达到
第二阈值,则将哈希表的全部内容写入内存压缩块;如果内存压缩块的数据量达到第二阈
值,则将内存压缩块的全部内容紧缩至磁盘压缩块,进而将内存压缩块中的内容写入磁盘
压缩块部署于磁盘存储的第二部分压缩块中,完成待写入值数据的写入。其中,在将哈希表
中的全部内容写入内存压缩块时,将相同槽位的值数据合并到一起,例如,哈希表中属于槽
位0001的数据只能压缩合并到内存压缩块中第一槽位0001指示的位置;内存压缩块中第一
槽位0001的数据只能压缩合并到磁盘压缩快中第二槽位槽位0001指示的位置。
据。其中,如果哈希表正在进行紧缩操作,则可以基于待读取槽位锁在候选哈希表中获取第
一候选数据。当获取到第一候选数据、第二候选数据和第三候选数据后,将第一候选数据、
第二候选数据进而第三候选数据作为待读取值数据,将待读取值数据返回给用户,完成对
待读取值数据的读取。
块进行紧缩处理,生成第二内存块,将第二内存块写入内存压缩块,并当检测到内存压缩块
的数据量达到第二阈值时,获取内存压缩块中至少一个第一槽位中的全部子键,将至少一
个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中,对第二槽位对应的全部
第二内存块进行紧缩处理,生成待写入磁盘文件,将待写入磁盘文件写入磁盘压缩块部署
于磁盘存储的第二部分压缩块,通过多步的紧缩过程将存储节点中存储的值数据均写入磁
盘存储,使得存储节点可以写入或追加的数据的数据量不会受到内存存储容量的限制,智
能性较优。
一个第一内存块,哈希表和内存压缩块部署在内存存储中,内存压缩块包括与至少一个子
键对应的至少一个第一槽位;
压缩块的至少一个第二槽位中,磁盘压缩块部署在内存存储和磁盘存储中,磁盘压缩块部
署于内存存储的第一部分压缩块包括与至少一个第一槽位对应的至少一个第二槽位;
压缩块部署于磁盘存储的第二部分压缩块。
块进行紧缩处理,生成第二内存块,将第二内存块写入内存压缩块,并当检测到内存压缩块
的数据量达到第二阈值时,获取内存压缩块中至少一个第一槽位中的全部子键,将至少一
个第一槽位中的全部子键写入磁盘压缩块的至少一个第二槽位中,对第二槽位对应的全部
第二内存块进行紧缩处理,生成待写入磁盘文件,将待写入磁盘文件写入磁盘压缩块部署
于磁盘存储的第二部分压缩块,通过多步的紧缩过程将存储节点中存储的值数据均写入磁
盘存储,使得存储节点可以写入或追加的数据的数据量不会受到内存存储容量的限制,智
能性较优。
片;
多个第二槽位分片;
写入磁盘文件的写入;
身设备,个人数字助理等。
组件514,以及通信组件516。
令,以完成上述的方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便
于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多
媒体组件508和处理组件502之间的交互。
息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组
合实现,如SRAM(Static Random Access Memory,静态随机存取存储器),EEPROM
(Electrically-Erasable Programmable Read-Only Memory,电可擦除可编程只读存储
器),EPROM(Erasable Programmable Read Only Memory,可擦除可编程只读存储器),PROM
(Programmable Read-Only Memory,可编程只读存储器),ROM(Read-Only Memory,只读存
储器),磁存储器,快闪存储器,磁盘或光盘。
Panel,触摸面板)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的
输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所
述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相
关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄
像头。当装置500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可
以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统
或具有焦距和光学变焦能力。
时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504
或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频
信号。
定按钮。
为装置500的显示器和小键盘,传感器组件514还可以检测装置500或装置500一个组件的位
置改变,用户与装置500接触的存在或不存在,装置500方位或加速/减速和装置500的温度
变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近
物体的存在。传感器组件514还可以包括光传感器,如CMOS(Complementary Metal Oxide
Semiconductor,互补金属氧化物)或CCD(Charge-coupled Device,电荷耦合元件)图像传
感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感
器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
例中,通信组件516经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。
在一个示例性实施例中,所述通信组件516还包括NFC(Near Field Communication,近场通
信)模块,以促进短程通信。例如,在NFC模块可基于RFID(Radio Frequency
Identification,射频识别)技术,IrDA(Infra-red Data Association,红外数据协会)技
术,UWB(Ultra Wideband,超宽带)技术,BT(Bluetooth,蓝牙)技术和其他技术来实现。
理器)、DSPD(Digital signal Processor Device,数字信号处理设备)、PLD(Programmable
Logic Device,可编程逻辑器件)、FPGA)(Field Programmable Gate Array,现场可编程门
阵列)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述数据写入方法。
所述非临时性计算机可读存储介质可以是ROM、RAM(Random Access Memory,随机存取存储
器)、CD-ROM(Compact Disc Read-Only Memory,光盘只读存储器)、磁带、软盘和光数据存
储设备等。
者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的
权利要求指出。