CN110347852A - 嵌入横向扩展键值存储***的文件***及文件管理方法 - Google Patents
嵌入横向扩展键值存储***的文件***及文件管理方法 Download PDFInfo
- Publication number
- CN110347852A CN110347852A CN201910490456.3A CN201910490456A CN110347852A CN 110347852 A CN110347852 A CN 110347852A CN 201910490456 A CN201910490456 A CN 201910490456A CN 110347852 A CN110347852 A CN 110347852A
- Authority
- CN
- China
- Prior art keywords
- data
- tables
- key assignments
- key
- accumulation layer
- 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/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/50—Information retrieval; Database structures therefor; File system structures therefor of still image data
- G06F16/51—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种嵌入横向扩展键值存储***的文件***及文件管理方法,属于信息存储技术领域,文件***包括:内存层、第一键值存储层以及第二键值存储层;内存层用于缓存外来写入数据,达到预设写入量后将数据写入第一键值存储层;第一键值存储层用于通过第一数据表接收并存储来自内存层的数据,并在第一数据表满时将其中存储的内容写入第二键值存储层;第二键值存储层用于通过第二数据表接收并存储来自第一键值存储层的数据;第一键值存储层还包括二级索引结构,用于记录目录/文件与第一数据表的映射关系,属于同一目录的第一数据表之间键值范围有序。本发明能够显著改善用于存储海量小文件的文件***所存在的读放大、写放大和空间放大的问题。
Description
技术领域
本发明属于信息存储技术领域,更具体地,涉及一种嵌入横向扩展键值存储***的文件***及文件管理方法。
背景技术
近些年来,物联网、机器学***台都提出了特殊的文件***,用于优化小文件的存储性能。著名的社交网站Facebook存储了2600亿张以上的图片,推出了专门针对海量小图片定制优化的Haystack进行存储,其中图片平均大小却只有几十KB。淘宝目前应该是最大C2C电子商务网站,存储超过200亿张图片,平均大小仅15KB,也推出了针对小文件优化的TaobaoFS文件***存储这些图片,并且进行了开源。Google也推出了二代GFS-Colossus,相比GFS1,Colossus使用了更小的块来进行小文件存储的优化。
对文件的元数据管理是文件***中一个很重要的方面,现在最流行的文件***的元数据组织结构是B树/B+树。著名的分布式小文件***TaobaoFS的底层文件***就是使用B树结构的ext4、而同样结构的XFS则是Haystack的底层文件***。然而实际上,B树/B+树具有层级结构,由于执行范围读操作的时候需要遍历整个树结构,执行写操作的时候需要进行合并操作,使用B树/B+树管理元数据会带来严重的读放大和写放大问题,因此,B树/B+树结构并不适合海量小文件的负载;此外,ext4和XFS本身也是为大文件服务的。键值存储是最近这些年来为了针对海量的多变的小文件而开发出来的存储***,目前较为流行的是基于日志结构合并树(Log-Structured Merge-Tree)的键值存储***,例如levelDB等,它可以将分散的小文件写变成追加写,极大优化了海量小文件的写速度。将键值存储***嵌入到文件***中来进行元数据管理,可以有效改善现有文件***在海量小文件负载下劣势。
然而,日志结构合并树仍然是一种层级结构,基于日志结构合并树的键值存储***仍然存在层级结构带来的读放大和写放大的问题,并且由于采用追加写,层级结构中各层均会产生空间放大,整个文件***也因此存在严重的空间放大问题。总的来说,现有的嵌入键值存储***的文件***,在存储海量小文件时,存在严重的读放大写放大及空间放大的问题。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种嵌入横向扩展键值存储***的文件***及文件管理方法,其目的在于,改善用于存储海量小文件的文件***所存在的读放大、写放大和空间放大的问题。
为实现上述目的,按照本发明的第一方面,提供了一种嵌入横向扩展键值存储***的文件***,包括:内存层、第一键值存储层以及第二键值存储层;
内存层用于接收并缓存外来写入数据,并在外来写入数据达到预设的写入量时,将所缓存的外来写入数据写入第一键值存储层;
第一键值存储层包括一个或多个第一数据表,以及二级索引结构;第一数据表用于以键值对的形式对文件或目录进行持久化存储;二级索引结构中,第一级索引结构用于以目录绝对路径为索引,记录目录所对应的第一数据表;二级索引结构中,第二级索引结构用于以文件名为索引,记录文件在第一数据表中的偏移量;每个第一数据表内部的键值无序,属于不同目录的第一数据表之间的键值范围无序,并且属于同一目录的第一数据表之间键值范围有序;第一键值存储层用于通过第一数据表接收并存储来自内存层的数据,并在任意一个第一数据表满时将其中存储的内容写入第二键值存储层;
第二键值存储层包括一个或多个第二数据表,第二数据表用于以键值对的形式对文件或目录进行持久化存储;一个第一数据表的键值范围与一个或多个第二数据表的键值范围重叠,与同一个第一数据表的键值范围重叠的多个第二数据表之间键值范围有序,并且每一个第二数据表内部的键值有序;第二键值存储层用于通过第二数据表接收并存储来自第一键值存储层的数据。
本发明所提供的嵌入横向扩展存储***的文件***,用于对文件或目录进行持久化存储的结构为两层结构,通过层内横向扩展的方式实现对海量小文件的存储,由于属于同一目录的第一数据表之间键值范围有序,在执行范围读操作的时候无需遍历两层结构,并且有效减少了写操作需要执行合并操作的次数,相对于传统的层级结构,能够有效减小读放大和写放大;此外,相比于传统的层级结构,本发明大大减小了整个文件***中的空间放大。总的来说,本发明所提供的嵌入横向扩展存储***的文件***,有效改善了现有的用于存储海量小文件的文件***所存在的读放大、写放大和空间放大的问题。
本发明所提供的嵌入横向扩展存储***的文件***,结合文件***与键值存储***的特性,设计了双层索引结构,在执行读操作,尤其是范围读操作时,无需进行层级查找,仅通过两次哈希操作即可完成,由此极大地优化了文件***的读消耗。
进一步地,第一键值存储层还包括日志结构,日志结构用于在数据写入内存层之前,对待写入的数据进行备份。
进一步地,第一数据表和第二数据表中,用于存储大文件的键值对的键为文件名,值为指向该文件在本地文件***中的存储位置的指针;用于存储小文件的键值对的键为文件名,值为该小文件中的数据;用于存储目录的键值对的键为目录名,值为该目录的元数据;
其中,大文件的大小大于预设的文件阈值,小文件的大小小于或等于文件阈值。
本发明所提供的嵌入横向扩展存储***的文件***,针对不同大小的文件,会通过不同的方式构建键值对;具体地,对于大文件,键值对的值为指向该文件在本地文件***中的存储位置的指针,而对于小文件,键值对的值为该小文件中的数据;由此能够优化对小文件的存储性能。
进一步地,若存储***由DRAM和SSD构成,则内存层、二级索引结构位于DRAM中,且第一数据表和第二键值存储层位于SSD中;
若存储***由DRAM、NVM及SSD构成,则内存层位于DRAM中,第一键值存储层位于NVM中,第二键值存储层位于SSD中。
进一步地,第一数据表和第二数据表均采用追加写的方式写入数据;
通过追加写的方式写入数据,可以优化海量小文件的写速度。
按照本发明的第二方面,提供了一种基于本发明第一方面提供的嵌入横向扩展键值存储***的文件***的文件管理方法,包括:
接收外来写入数据时,根据预设的写入量在内存层中创建用于缓存外来写入数据的数据结构,记为内存数据表;在内存数据表写满时,将其标记为只读内存数据表,并在内存层中重新创建一个内存数据表,由新创建的内存数据表接收并缓存外来写入数据,同时将只读内存数据表中的数据写入到第一键值存储层中;在只读内存数据表中的数据写入完成后,将其删除;
将内存层的数据写入第一键值存储层时,根据二级索引结构获得待写入数据所对应的第一数据表,使得该第一数据表接收与其键值范围重叠的数据并追加写入到其末尾;在任意一个第一数据表写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠第二数据表中。
进一步地,对于任意一个第一数据表DTable1,在第一数据表DTable1写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠的第二数据表中,包括:
将第一数据表DTable1及与其范围重叠的第二数据表中存储的数据均读取到内存层,删除其中陈旧的数据并进行重新排序,利用重新排序后的数据生成新的第二数据表,并将新生成的第二数据表写回到第二键值存储层,以完成合并操作;
在执行合并操作的同时,判断所读取的第二数据表的个数N所满足的条件,若N≥N_MAX,则在第一键值存储层新建立两个第一数据表,将第一数据表DTable1的键值范围平均分配给新建立的两个数据表,以完成对第一数据表的***操作;若则在第一键值存储层新建立一个第一数据表,并标记第一数据表DTable1为可整合;若 则在第一键值存储层新建立一个第一数据表;
由新建立的第一数据表替代第一数据表DTable1接收并存储来自内存层的数据;
其中,N_MAX为预设的扩展阈值。
进一步地,本发明第二方面提供的文件管理方法,还包括:
在执行合并操作的同时,若内存层中同时存在两个或多个可整合的第一数据表,则将其中两个可整合的第一数据表整合为一个第一数据表,使得整合之后原本追加写入两个第一数据表的数据,均追加写入到一个第一数据表中;
若与整合所得的第一数据表键值范围重叠的第二数据表个数不超过则将其标记为可整合,并选择另一个可整合的第一数据表与其再次进行整合;重复此步骤,直至整合所得的第一数据表不可整合,或内存层中不存在其他可整合的第一数据表,从而通过两两整合的方式将两个或多个可整合的第一数据表整合为一个第一数据表。
本发明所提供的文件管理方法,在对第一数据表和第二数据表进行合并的同时,根据所读取的第二数据表的数量对第一数据表进行***操作或整合操作,维持了目录与第一数据表之间的动态映射关系,由此能够根据目录中所包含文件的多少合理分配存储资源,并减少数据写入过程中的合并操作次数,优化了存储***性能。
作为进一步优选的,选择进行整合的两个第一数据表时,优先选择互为上下级目录的两个目录所对应的第一数据表作为整合对象。
本发明将拥有上下级关系的目录整合在一起,符合文件***的空间局部性原理,当对一个目录进行递归查询时,可以快速查询到其子目录包含的文件。
进一步地,本发明第二方面提供的文件管理方法,还包括:在执行对第一数据表的***操作和整合操作后,更新所述二级索引结构。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明所提供的嵌入横向扩展存储***的文件***,用于对文件或目录进行持久化存储的结构为两层结构,通过层内横向扩展的方式实现对海量小文件的存储,由于属于同一目录的第一数据表之间键值范围有序,在执行范围读操作的时候无需遍历两层结构,并且有效减少了写操作需要执行合并操作的次数,相对于传统的层级结构,能够有效减小读放大和写放大;此外,相比于传统的层级结构,本发明大大减小了整个文件***中的空间放大。总的来说,本发明所提供的嵌入横向扩展存储***的文件***,有效改善了现有的用于存储海量小文件的文件***所存在的读放大、写放大和空间放大的问题。
(2)本发明所提供的嵌入横向扩展存储***的文件***,结合文件***与键值存储***的特性,设计了双层索引结构,在执行读操作,尤其是范围读操作时,无需进行层级查找,仅通过两次哈希操作即可完成,由此极大地优化了文件***的读消耗。
(3)本发明所提供的嵌入横向扩展存储***的文件***,针对不同大小的文件,通过不同的方式构建键值对;具体地,对于大文件,键值对的值为指向该文件在本地文件***中的存储位置的指针,而对于小文件,键值对的值为该小文件中的数据;由此能够优化对小文件的存储性能。
(4)本发明所提供的文件管理方法,在对第一数据表和第二数据表进行合并的同时,根据所读取的第二数据表的数量对第一数据表进行***操作或整合操作,维持了目录与第一数据表之间的动态映射关系,由此能够根据目录中所包含文件的多少合理分配存储资源,并减少数据写入过程中的合并操作次数,优化了存储***性能。
附图说明
图1为本发明实施例提供的嵌入横向扩展键值存储***的文件***示意图;
图2为图1所示文件***中数据组织示意图;
图3为本发明实施例提供的二级索引结构示意图;
图4为本发明实施例提供的对第一数据表执行***操作的示意图;其中,(a)为针对同时属于两个目录的第一数据表执行***操作的示意图,(b)为针对仅属于一个目录的第一数据表执行***操作的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明所提供的嵌入横向扩展键值存储***的文件***及文件管理方法,可适用于任意一种架构的存储***,为便于清楚解释本发明的技术方案,以下仅结合一种具体架构的存储***对本发明的技术方案进行具体说明。
本发明所提供的嵌入横向扩展键值存储***的文件***,包括:内存层、第一键值存储层以及第二键值存储层;如图1所示,在由DRAM(Dynamic Random Access Memory,动态随机存取存储器)、NVM(Non-volatile Memory,非易失存储器)及SSD(Solid State Disk,固态硬盘)构成的存储***中,内存层位于DRAM中,第一键值存储层位于NVM中,第二键值存储层位于SSD中;
内存层用于接收并缓存外来写入数据,并在外来写入数据达到预设的写入量时,将所缓存的外来写入数据写入第一键值存储层;其中,外来写入数据是指将本地文件***的目录和文件数据转化后的键值对数据,具体地,将目录绝对路径的字符串和文件名字符串转化为哈希值后作为键值对的键,将大文件的指向本地文件的指针和文件元数据作为大文件的值,将小文件的元数据和数据本身作为小文件的值,将目录的元数据(这里的元数据是在本地文件***中的元数据,以便于可以兼容本地文件***)作为目录的值),写入量可根据存储***的存储能力及负载特性相应设定,在本实施例中,具体设置为2MB;
第一键值存储层包括一个或多个第一数据表,以及二级索引结构;在本实施例中,将第一数据表记为DTable;第一数据表DTable用于以键值对的形式对文件或目录进行持久化存储;二级索引结构中,第一级索引结构用于以目录绝对路径为索引,记录目录所对应的第一数据表DTable;二级索引结构中,第二级索引结构用于以文件名为索引,记录文件在第一数据表DTable中的偏移量;每个第一数据表DTable内部的键值无序,属于不同目录的第一数据表DTable之间的键值范围无序,并且属于同一目录的第一数据表DTable之间键值范围有序;第一键值存储层用于通过第一数据表DTable接收并存储来自内存层的数据,并在任意一个第一数据表DTable满时将其中存储的内容写入第二键值存储层;
第二键值存储层包括一个或多个第二数据表,在本实施例中,将第二数据表记为SSTable;第二数据表SSTable用于以键值对的形式对文件或目录进行持久化存储;一个第一数据表DTable的键值范围与一个或多个第二数据表SSTable的键值范围重叠,与同一个第一数据表DTable的键值范围重叠的多个第二数据表SSTable之间键值范围有序,并且每一个第二数据表SSTable内部的键值有序;第二键值存储层用于通过第二数据表SSTable接收并存储来自第一键值存储层的数据。
图2所示为本发明实施例中数据组织的一个示例,/home目录下包含了两个第一数据表Dtable,这两个第一数据表DTable的键值范围之间无交集且并集为全集,每个第一数据表DTable又分别与两个第二数据表SSTable的键值范围重叠;属于/home目录的两个第一数据表Dtable之间键值范围有序。属于不同目录(例如/目录和/home目录)的第一数据表Dtable之间键值范围无序,即便是共用同一个第一数据表DTable的两个目录(例如/home/cat目录和/abc目录)之间键值范围也是无序的,这样不仅极大的减少了排序代价,还不会造成任何的性能降级。在本发明中,属于同一目录的第一数据表DTable之间键值范围有序,具体是指属于同一目录的第一数据表DTable的键值范围之间无交集,且并集为该目录所对应的键值范围;与同一个第一数据表DTable的键值范围重叠的多个第二数据表SSTable之间键值范围有序,具体是指与同一个第一数据表DTable的键值范围有序的多个第二数据表SSTable的键值范围之间无交集,且并集为该第一数据表DTable的键值范围。
本发明所提供的嵌入横向扩展存储***的文件***,用于对文件或目录进行持久化存储的结构,如图2所示,是一种改进的日志结构合并树结构,其中的第一数据表DTable和第二数据表SSTable为该树结构的节点;不同于传统的日志结构合并树的层级结构,本发明中的日志结构合并树为第一数据表DTable和第二数据表SSTable构成的两层结构,通过层内横向扩展的方式实现对海量小文件的存储,由于属于同一目录的第一数据表DTable之间键值范围有序,在执行范围读操作的时候无需遍历两层结构,并且有效减少了写操作需要执行合并操作的次数,能够有效减小读放大和写放大;此外,相比于传统的层级结构,本发明大大减小了整个文件***中的空间放大。总的来说,本发明所提供的嵌入横向扩展存储***的文件***,有效改善了现有的用于存储海量小文件的文件***所存在的读放大、写放大和空间放大的问题。
图3为本发明实施例提供的二级索引结构示意图,在本实施例中,二级索引结构具体为一个两层哈希的索引结构,第一级索引结构为全路径的目录哈希索引层,其中每一项包含一个<目录绝对路径的哈希值,对应的DTable的地址>的二元组,用于记录目录所对应的第一数据表DTable;二级索引结构为相对文件名的文件哈希索引层,其中每一项包含一个<文件名的哈希值,对应的DTable的偏移量>,用于记录文件在第一数据表DTable中的偏移量;结合二级索引结构,通过两次哈希操作即可获得与数据相对应的第一数据表DTable。在二级索引结构中,每一个目录拥有自己的文件哈希表,能够有效避免哈希冲突,提高文件***的整体性能。
本发明所提供的嵌入横向扩展存储***的文件***,结合文件***与键值存储***的特性,设计了双层索引结构,在执行读操作,尤其是范围读操作时,无需进行层级查找,仅通过两次哈希操作即可完成,由此极大地优化了文件***的读消耗。
在一个可选的实施方式中,如图1所示,上述嵌入横向扩展键值存储***的文件***,第一键值存储层还可包括日志结构log,日志结构log用于在数据写入内存层之前,对待写入的数据进行备份。
在一个可选的实施方式中,第一数据表和第二数据表中,用于存储大文件的键值对的键(key)为文件名,值(value)为指向该文件在本地文件***中的存储位置的指针;用于存储小文件的键值对的键(key)为文件名,值(value)为该小文件中的数据;用于存储目录的键值对的键(key)为目录名,值(value)为该目录的元数据;
其中,大文件的大小大于预设的文件阈值,小文件的大小小于或等于文件阈值;用于区分大文件和小文件的文件阈值可根据负载特性,相应设定,在本实施例中,文件阈值具体设置为4KB,即在本实施例中,将小于4KB的文件视为小文件,反之则视为大文件;本地文件***(Local FileSystem),即传统的内核态文件***;
本发明所提供的嵌入横向扩展存储***的文件***,针对不同大小的文件,会通过不同的方式构建键值对;具体地,对于大文件,键值对的值为指向该文件在本地文件***中的存储位置的指针,而对于小文件,键值对的值为该小文件中的数据;由此能够优化对小文件的存储性能。
在本实施例中,第一数据表和第二数据表均采用追加写的方式写入数据;通过追加写的方式写入数据,可以优化海量小文件的写速度。
为了进一步优化读性能,在图1所示的嵌入横向扩展键值存储***的文件***中,还可包括元数据索引结构,本质上就是一个常规的读缓存。
应当说明的是,图1所示仅为对本发明的一种示例性说明,不应理解为对本发明可适用的存储架构的唯一限定;在其他架构的存储***中,本发明所提供的嵌入横向扩展键值存储***的文件***同样适用,例如,在由DRAM和SSD构成的存储***中,内存层、二级索引结构位于DRAM中,且第一数据表和第二键值存储层位于SSD中,若第二键值存储层中还包括日志结构log,则日志结构log也位于SSD中;更多的实例,在此不做一一列举。
基于图1所示的嵌入横向扩展存储***的文件***,本发明还提供了一种文件管理方法,包括:
接收外来写入数据时,根据预设的写入量在内存层中创建用于缓存外来写入数据的数据结构,记为内存数据表,即图1中的Memtable;在内存数据表Memtable写满时,将其标记为只读内存数据表,即图1中的Immutable Memtable,并在内存层中重新创建一个内存数据表,由新创建的内存数据表接收并缓存外来写入数据,同时将只读内存数据表中的数据写入到第一键值存储层中;在只读内存数据表中的数据写入完成后,将其(ImmutableMemtable)删除;
将内存层的数据写入第一键值存储层时,根据二级索引结构获得待写入数据所对应的第一数据表,使得该第一数据表接收与其键值范围重叠的数据并追加写入到其末尾;在任意一个第一数据表写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠第二数据表中。
在本实施例中,对于任意一个第一数据表DTable1,在第一数据表DTable1写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠的第二数据表中,包括:
将第一数据表DTable1及与其范围重叠的第二数据表中存储的数据均读取到内存层,删除其中陈旧的数据并进行重新排序,利用重新排序后的数据生成新的第二数据表,并将新生成的第二数据表写回到第二键值存储层,以完成合并操作;此合并操作与日志结构合并树中的原生合并操作相同;
在执行合并操作的同时,判断所读取的第二数据表的个数N所满足的条件,若N≥N_MAX,则在第一键值存储层新建立两个第一数据表,将第一数据表DTable1的键值范围平均分配给新建立的两个数据表,以完成对第一数据表的***操作;若则在第一键值存储层新建立一个第一数据表,并标记第一数据表DTable1为可整合;若 则在第一键值存储层新建立一个第一数据表;
由新建立的第一数据表替代第一数据表DTable1接收并存储来自内存层的数据;
其中,N_MAX为预设的扩展阈值,其取值可根据实际的应用需求相应设定,在本实施例中,N_MAX的设置与日志结构合并树中的设置相同,具体为N_MAX=10;
在执行合并操作的同时,若内存层中同时存在两个或多个可整合的第一数据表,则将其中两个可整合的第一数据表整合为一个第一数据表,使得整合之后原本追加写入两个第一数据表的数据,均追加写入到一个第一数据表中;
若与整合所得的第一数据表键值范围重叠的第二数据表个数不超过则将其标记为可整合,并选择另一个可整合的第一数据表与其再次进行整合;重复此步骤,直至整合所得的第一数据表不可整合,或内存层中不存在其他可整合的第一数据表,从而通过两两整合的方式将两个或多个可整合的第一数据表整合为一个第一数据表;作为一种优选的实施方式,选择进行整合的两个第一数据表时,优先选择互为上下级目录的两个目录所对应的第一数据表作为整合对象;本发明将拥有上下级关系的目录整合在一起,符合文件***的空间局部性原理,当对一个目录进行递归查询时,可以快速查询到其子目录包含的文件。
本实施例所提供的***操作的一个实例如图4所示;初始时刻,文件***中每个目录下的数据量较少,此时存在大量多个目录对应一个第一数据表DTable的情况,例如,图4(a)中,/home/cat和/abc共用同一个第一数据表DTable;随着数据量的增多共用同一个DTable会带来较大的写堵塞问题,所以需要对DTable进行***操作;如图4(a)所示,将一个DTable***后其对应的SSTable也***,由此能够保证合并操作简单高效;本发明具体在对第一数据表DTable和第二数据表SSTable进行合并操作的同时对需要进行***的DTable进行***操作,能够防止出现多余的数据迁移;如图4(b)所示,随着数据量的持续增多,一个第一数据表DTable会对应多个第二数据表SSTable。为了减少合并过程的写放大问题,优选将属于一个目录的第一数据表DTable进行***,***后的两个DTable之间键值不重叠。
上述文件管理方法,通过对第一数据表DTable的***操作和整合操作,维护了目录与第一数据表DTable之间的动态映射关系,具体满足:
当目录较小时,多个目录对应一个第一数据表DTable,即多个目录的写入数据追加到同一个第一数据表DTable中;
当目录较大时,逐渐转变为一个目录对应一个第一数据表DTable;
当目录的继续增大时,出现一个目录对应多个第一数据表DTable的映射关系;
当文件***中某个目录中的文件大量减少时,可以将目录与第一数据表DTable的一对多关系再逐渐转换为一对一或多对一关系。
本发明所提供的文件管理方法,在对第一数据表和第二数据表进行合并的同时,根据所读取的第二数据表的数量对第一数据表进行***操作或整合操作,维持了目录与第一数据表之间的动态映射关系,由此能够根据目录中所包含文件的多少合理分配存储资源,并减少数据写入过程中的合并操作次数,优化了存储***性能。
上述文件管理方法,还包括:在执行对第一数据表的***操作和整合操作后,更新所述二级索引结构;当一个目录下文件较多且写入量大时,可以对应多个第一数据表DTable;例如,图3中,/home目录下对应两个第一数据表DTable,这两个第一数据表DTable共享同一个文件哈希表。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种嵌入横向扩展键值存储***的文件***,其特征在于,包括:内存层、第一键值存储层以及第二键值存储层;
所述内存层用于接收并缓存外来写入数据,并在外来写入数据达到预设的写入量时,将所缓存的外来写入数据写入所述第一键值存储层;
所述第一键值存储层包括一个或多个第一数据表,以及二级索引结构;所述第一数据表用于以键值对的形式对文件或目录进行持久化存储;所述二级索引结构中,第一级索引结构用于以目录绝对路径为索引,记录目录所对应的第一数据表;所述二级索引结构中,第二级索引结构用于以文件名为索引,记录文件在第一数据表中的偏移量;每个第一数据表内部的键值无序,属于不同目录的第一数据表之间的键值范围无序,并且属于同一目录的第一数据表之间的键值范围有序;所述第一键值存储层用于通过第一数据表接收并存储来自所述内存层的数据,并在任意一个第一数据表满时将其中存储的内容写入所述第二键值存储层;
所述第二键值存储层包括一个或多个第二数据表,所述第二数据表用于以键值对的形式对文件或目录进行持久化存储;一个第一数据表的键值范围与一个或多个第二数据表的键值范围重叠,与同一个第一数据表的键值范围重叠的多个第二数据表之间键值范围有序,并且每一个第二数据表内部的键值有序;所述第二键值存储层用于通过第二数据表接收并存储来自所述第一键值存储层的数据。
2.如权利要求1所述的嵌入横向扩展键值存储***的文件***,其特征在于,所述第一键值存储层还包括日志结构,所述日志结构用于在数据写入所述内存层之前,对待写入的数据进行备份。
3.如权利要求1或2所述的嵌入横向扩展键值存储***的文件***,其特征在于,所述第一数据表和所述第二数据表中,用于存储大文件的键值对的键为文件名,值为指向该文件在本地文件***中的存储位置的指针;用于存储小文件的键值对的键为文件名,值为该小文件中的数据;用于存储目录的键值对的键为目录名,值为该目录的元数据;
其中,大文件的大小大于预设的文件阈值,小文件的大小小于或等于所述文件阈值。
4.如权利要求1或2所述的嵌入横向扩展键值存储***的文件***,其特征在于,若存储***由DRAM和SSD构成,则所述内存层、所述二级索引结构位于DRAM中,且所述第一数据表和所述第二键值存储层位于所述SSD中;
若存储***由DRAM、NVM及SSD构成,则所述内存层位于DRAM中,所述第一键值存储层位于NVM中,所述第二键值存储层位于SSD中。
5.如权利要求1或2所述的嵌入横向扩展键值存储***的文件***,其特征在于,所述第一数据表和所述第二数据表均采用追加写的方式写入数据。
6.一种基于权利要求1-5任一项所述的嵌入横向扩展键值存储***的文件***的文件管理方法,其特征在于,包括:
接收外来写入数据时,根据预设的写入量在所述内存层中创建用于缓存外来写入数据的数据结构,记为内存数据表;在内存数据表写满时,将其标记为只读内存数据表,并在所述内存层中重新创建一个内存数据表,由新创建的内存数据表接收并缓存外来写入数据,同时将所述只读内存数据表中的数据写入到所述第一键值存储层中;在所述只读内存数据表中的数据写入完成后,将其删除;
将所述内存层的数据写入所述第一键值存储层时,根据所述二级索引结构获得待写入数据所对应的第一数据表,使得该第一数据表接收与其键值范围重叠的数据并追加写入到其末尾;在任意一个第一数据表写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠第二数据表中。
7.如权利要求6所述的文件管理方法,其特征在于,对于任意一个第一数据表DTable1,在所述第一数据表DTable1写满时,通过合并操作将其中存储的数据写入到与其键值范围重叠的第二数据表中,包括:
将所述第一数据表DTable1及与其范围重叠的第二数据表中存储的数据均读取到所述内存层,删除其中陈旧的数据并进行重新排序,利用重新排序后的数据生成新的第二数据表,并将新生成的第二数据表写回到所述第二键值存储层,以完成合并操作;
在执行合并操作的同时,判断所读取的第二数据表的个数N所满足的条件,若N≥N_MAX,则在所述第一键值存储层新建立两个第一数据表,将所述第一数据表DTable1的键值范围平均分配给新建立的两个数据表,以完成对第一数据表的***操作;若则在所述第一键值存储层新建立一个第一数据表,并标记所述第一数据表DTable1为可整合;若则在所述第一键值存储层新建立一个第一数据表;
由新建立的第一数据表替代所述第一数据表DTable1接收并存储来自所述内存层的数据;
其中,N_MAX为预设的扩展阈值。
8.如权利要求7所述的文件管理方法,其特征在于,还包括:
在执行合并操作的同时,若所述内存层中同时存在两个或多个可整合的第一数据表,则将其中两个可整合的第一数据表整合为一个第一数据表,使得整合之后原本追加写入两个第一数据表的数据,均追加写入到一个第一数据表中;
若与整合所得的第一数据表键值范围重叠的第二数据表个数不超过则将其标记为可整合,并选择另一个可整合的第一数据表与其再次进行整合;重复此步骤,直至整合所得的第一数据表不可整合,或所述内存层中不存在其他可整合的第一数据表,从而通过两两整合的方式将两个或多个可整合的第一数据表整合为一个第一数据表。
9.如权利要求8所述的文件管理方法,其特征在于,选择进行整合的两个第一数据表时,优先选择互为上下级目录的两个目录所对应的第一数据表作为整合对象。
10.如权利要求8所述的文件管理方法,其特征在于,还包括:在执行对第一数据表的***操作和整合操作后,更新所述二级索引结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910490456.3A CN110347852B (zh) | 2019-06-06 | 2019-06-06 | 嵌入横向扩展键值存储***的文件***及文件管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910490456.3A CN110347852B (zh) | 2019-06-06 | 2019-06-06 | 嵌入横向扩展键值存储***的文件***及文件管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110347852A true CN110347852A (zh) | 2019-10-18 |
CN110347852B CN110347852B (zh) | 2021-11-02 |
Family
ID=68181573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910490456.3A Active CN110347852B (zh) | 2019-06-06 | 2019-06-06 | 嵌入横向扩展键值存储***的文件***及文件管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110347852B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储*** |
CN111857582A (zh) * | 2020-07-08 | 2020-10-30 | 平凯星辰(北京)科技有限公司 | 一种键值存储*** |
CN112395212A (zh) * | 2020-11-05 | 2021-02-23 | 华中科技大学 | 减少键值分离存储***的垃圾回收和写放大的方法及*** |
CN112416940A (zh) * | 2020-11-27 | 2021-02-26 | 深信服科技股份有限公司 | 键值对存储方法、装置、终端设备以及存储介质 |
CN112527804A (zh) * | 2021-01-27 | 2021-03-19 | 中智关爱通(南京)信息科技有限公司 | 文件存储方法、文件读取方法和数据存储*** |
CN113051241A (zh) * | 2019-12-27 | 2021-06-29 | ***通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN113377292A (zh) * | 2021-07-02 | 2021-09-10 | 北京青云科技股份有限公司 | 一种单机存储引擎 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
WO2024022329A1 (zh) * | 2022-07-25 | 2024-02-01 | 华为云计算技术有限公司 | 一种基于键值存储***的数据管理方法及其相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106709048A (zh) * | 2017-01-05 | 2017-05-24 | 无锡江南计算技术研究所 | 一种面向高性能计算的分布式数据组织方法 |
US20180089244A1 (en) * | 2016-09-26 | 2018-03-29 | Vmware, Inc. | Key-value stores implemented using fragmented log-structured merge trees |
CN109683811A (zh) * | 2018-11-22 | 2019-04-26 | 华中科技大学 | 一种混合内存键值对存储***的请求处理方法 |
-
2019
- 2019-06-06 CN CN201910490456.3A patent/CN110347852B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180089244A1 (en) * | 2016-09-26 | 2018-03-29 | Vmware, Inc. | Key-value stores implemented using fragmented log-structured merge trees |
CN106709048A (zh) * | 2017-01-05 | 2017-05-24 | 无锡江南计算技术研究所 | 一种面向高性能计算的分布式数据组织方法 |
CN109683811A (zh) * | 2018-11-22 | 2019-04-26 | 华中科技大学 | 一种混合内存键值对存储***的请求处理方法 |
Non-Patent Citations (1)
Title |
---|
王立新: "并行文件***元数据管理研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051241A (zh) * | 2019-12-27 | 2021-06-29 | ***通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN113051241B (zh) * | 2019-12-27 | 2023-08-15 | ***通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储*** |
CN111857582A (zh) * | 2020-07-08 | 2020-10-30 | 平凯星辰(北京)科技有限公司 | 一种键值存储*** |
CN111857582B (zh) * | 2020-07-08 | 2024-04-05 | 平凯星辰(北京)科技有限公司 | 一种键值存储*** |
CN112395212A (zh) * | 2020-11-05 | 2021-02-23 | 华中科技大学 | 减少键值分离存储***的垃圾回收和写放大的方法及*** |
CN112416940A (zh) * | 2020-11-27 | 2021-02-26 | 深信服科技股份有限公司 | 键值对存储方法、装置、终端设备以及存储介质 |
CN112416940B (zh) * | 2020-11-27 | 2024-05-28 | 深信服科技股份有限公司 | 键值对存储方法、装置、终端设备以及存储介质 |
CN112527804B (zh) * | 2021-01-27 | 2022-09-16 | 中智关爱通(上海)科技股份有限公司 | 文件存储方法、文件读取方法和数据存储*** |
CN112527804A (zh) * | 2021-01-27 | 2021-03-19 | 中智关爱通(南京)信息科技有限公司 | 文件存储方法、文件读取方法和数据存储*** |
CN113377292B (zh) * | 2021-07-02 | 2024-02-02 | 北京青云科技股份有限公司 | 一种单机存储引擎 |
CN113377292A (zh) * | 2021-07-02 | 2021-09-10 | 北京青云科技股份有限公司 | 一种单机存储引擎 |
CN113961514B (zh) * | 2021-12-20 | 2022-03-08 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
WO2024022329A1 (zh) * | 2022-07-25 | 2024-02-01 | 华为云计算技术有限公司 | 一种基于键值存储***的数据管理方法及其相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110347852B (zh) | 2021-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110347852A (zh) | 嵌入横向扩展键值存储***的文件***及文件管理方法 | |
CN106708427B (zh) | 一种适用于键值对数据的存储方法 | |
US9047301B2 (en) | Method for optimizing the memory usage and performance of data deduplication storage systems | |
CN100483420C (zh) | 基于快照的细粒度文件与目录版本管理方法 | |
US9449005B2 (en) | Metadata storage system and management method for cluster file system | |
US10242050B2 (en) | Database caching in a database system | |
CN106951375B (zh) | 在存储***中删除快照卷的方法及装置 | |
CN103838853B (zh) | 一种基于不同存储介质的混合文件*** | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
CN103577123A (zh) | 一种基于hdfs的小文件优化存储方法 | |
CN103246700A (zh) | 基于HBase的海量小文件低延时存储方法 | |
CN101488153A (zh) | 嵌入式Linux下大容量闪存文件***的实现方法 | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
KR101356470B1 (ko) | 플래시 파일 시스템 | |
CN105912687A (zh) | 海量分布式数据库存储单元 | |
CN105117415A (zh) | 一种优化的ssd数据更新方法 | |
CN104424219B (zh) | 一种数据文件的管理方法及装置 | |
CN100424699C (zh) | 一种属性可扩展的对象文件*** | |
Lee et al. | An efficient index buffer management scheme for implementing a B-tree on NAND flash memory | |
CN101986649A (zh) | 应用于电信行业计费***的共享数据中心 | |
CN103473337A (zh) | 一种分布式存储***中处理面向海量目录和文件的方法 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN108287869A (zh) | 一种基于快速存储设备的海量小文件解决方法 | |
CN107291876A (zh) | 一种分布式数据管理方法 | |
CN103942301B (zh) | 一种面向多数据类型访问应用的分布式文件*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |