CN110019016A - 提供逻辑键的kv存储设备及其方法 - Google Patents

提供逻辑键的kv存储设备及其方法 Download PDF

Info

Publication number
CN110019016A
CN110019016A CN201711474660.3A CN201711474660A CN110019016A CN 110019016 A CN110019016 A CN 110019016A CN 201711474660 A CN201711474660 A CN 201711474660A CN 110019016 A CN110019016 A CN 110019016A
Authority
CN
China
Prior art keywords
key
file system
catalogue
file
directory
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.)
Pending
Application number
CN201711474660.3A
Other languages
English (en)
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.)
Beijing Memblaze Technology Co Ltd
Original Assignee
Beijing Memblaze Technology 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 Beijing Memblaze Technology Co Ltd filed Critical Beijing Memblaze Technology Co Ltd
Priority to CN201711474660.3A priority Critical patent/CN110019016A/zh
Priority to PCT/CN2018/093285 priority patent/WO2019128166A1/zh
Priority to US17/044,432 priority patent/US20210248107A1/en
Publication of CN110019016A publication Critical patent/CN110019016A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations

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)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了提供逻辑键的KV存储设备及其方法。所提供的使用KV存储设备提供文件系统的方法,包括:获取待访问的文件系统对象的文件系统路径;获取同所述文件系统路径对应的键(K);用所述键(K)访问KV存储设备中同所述键(K)对应的值(V);其中所述值是所述文件系统中同所述文件系统路径对应的对象。

Description

提供逻辑键的KV存储设备及其方法
技术领域
本申请涉及KV存储设备,具体地,涉及提供逻辑键(Key)的KV存储设备及其方法。
背景技术
图1A展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)等是常见的NVM。
接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。
控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。
控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。
存储器目标(Target)是NAND闪存封装内的共享CE(,Chip Enable,芯片使能)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
FTL表包括多个FTL表条目(或称表项)。在一种情况下,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一种情况下,每个FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一种情况下,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一种情况下,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
在“DFTL:A Flash Translation Layer Employing Demand-based SelectiveCaching of Page-level Address Mappings”公开了改进的FTL表法及其在固态存储设备中被应用的方式,其全文可从http://www.cse.psu.edu/~buu1/papers/ps/dftl-asplos09.pdf获得。
支持Key-Value(键-数据,也简称为“KV”)存储模型的存储设备,提供基于键(Key)的读操作(Get(Key))与写操作(Put(Key,Value))。为执行写操作,主机向存储设备提供键(Key)与数据(Value),以将数据写入存储设备,并将键作为所写入的数据的索引。为执行读操作,主机向存储设备提供键,存储设备根据键找到数据,并将数据提供给主机。因而在KV存储系统中,键是用来访问数据的索引,而数据(Value)是被访问的数据。一般地,键与数据的长度均不是定长。以及可选地,为了降低复杂性,键和/或数据的长度可具有指定范围。
图1B展示了现有技术的固态存储设备的地址转换系统的示意图。支持KV存储模型的固态存储设备的地址转换系统(也称为FTL表)提供从由到物理地址(例如,PPA,PhysicalPage Address,物理页地址)的映射。可选地,除了物理页地址,FTL表中记录的物理地址可以是物理页内部的数据帧(Data frame)的起始地址。数据帧是具有固定大小的数据单元,物理页包括1个或多个数据帧。
主机提供的键的长度不定,数据的长度也不定。键作为FTL表的索引。用键作为索引查询FTL表,得到对应的物理地址。FTL表可以由数组、链表、树等多种数据结构实现。可选地,将不定长的键进行哈希运算,得到定长的哈希键(例如,4字节/8字节),作为FTL表的索引。
发明内容
KV存储设备提供的操作包括例如读操作(Get(Key))、写操作(Put(Key,Value))与删除操作(Delete(Key))。然而应用中还有对数据的其他操作需求,包括但不限于对键本身的修改操作、对键及其数据的复制操作、对属于某一范围内的键及其数据的查询(或读)操作等。这些操作难以由现有技术的KV存储设备提供。
根据本申请的第一方面,提供了根据本申请第一方面的第一使用KV存储设备提供文件系统的方法,包括:获取待访问的文件系统对象的文件系统路径;获取同所述文件系统路径对应的键(K);用所述键(K)访问KV存储设备中同所述键(K)对应的值(V);其中所述值是所述文件系统中同所述文件系统路径对应的对象。
根据本申请第一方面的第一使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第二使用KV存储设备提供文件系统的方法,其中所述文件系统维护排序表,通过排序表获取同文件系统路径对应的键(K)。
根据本申请第一方面的第一使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第三使用KV存储设备提供文件系统的方法,其中所述KV存储设备提供排序表,所述文件系统通过访问KV存储设备的排序表获取同文件系统路径对应的键(K)。
根据本申请第一方面的第一或第二使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第四使用KV存储设备提供文件系统的方法,其中所述KV存储设备以其<键(K),值(V)>存储服务提供排序表,其中排序表条目记录的文件系统路径作为KV存储设备的键(K),排序表条目的记录的同文件系统路径对应的键作为KV存储设备的值(V)。
根据本申请第一方面的第一至第三使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第五使用KV存储设备提供文件系统的方法,其中,所述文件系统的对象包括文件内容与目录内容;目录内容包括目录所包含的子目录的键(K)与名字,所包含的文件的键(K)与名字;所述方法还包括:通过文件系统路径获取待访问的文件系统对象所在的第一目录;通过所述第一目录的键(K)从KV存储设备访问所述第一目录的目录内容,从所述第一目录的目录内容中获取待访问的文件系统对象的键(K)。
根据本申请第一方面的第一至第三使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第六使用KV存储设备提供文件系统的方法,其中所述文件系统的对象包括文件内容、目录元数据与目录属性内容;目录元数据包括目录所包含的子目录的键(K),以及所包含的文件的键(K);目录元数据包括目录所包含的子目录的名字,所包含的文件的名字;所述方法还包括:通过文件系统路径获取待访问的文件系统对象所在的第一目录;通过所述第一目录的键(K)获得所述第一目录的目录元数据的键与第一目录的目录属性的键;从KV存储设备访问所述第一目录的目录元数据与目录属性,以获取待访问的文件系统对象的键(K)。
根据本申请第一方面的第五或第六使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第七使用KV存储设备提供文件系统的方法,其中所述文件系统的对象作为值(V)被存储在所述KV存储设备。
根据本申请第一方面的第五使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第八使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中创建文件,为待创建的文件分配用于KV存储设备的键(K),在所述第一目录的目录内容中记录为待创建文件所分配的键(K)与待创建文件的名字。
根据本申请第一方面的第五或第八使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第九使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中修改文件系统对象的名字,更新所述第一目录的目录内容中记录的待修改文件系统对象的名字。
根据本申请第一方面的第五、第八或第九使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中删除目录,删除待删除目录的所有子目录,以及从待删除目录的目录内容中获取待删除目录所包含的所有文件的键(K),使用获取的键(K)从KV存储设备删除对应的文件内容,以及删除第一目录的目录内容中记录的对应于待删除目录的条目。
根据本申请第一方面的第五、第八至第十使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第十一使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中读取文件,在所述第一目录的目录内容中查询待读取文件的名字对应的条目,从条目中获取待读取文件的键(K),从获取的键(K)从KV存储设备读取对应的文件内容。
根据本申请第一方面的第六使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十二使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中创建文件,为待创建的文件分配用于KV存储设备的键(K),在所述第一目录的目录元数据中记录为待创建文件所分配的键(K),在所述第一目录的目录属性内容中记录为待创建文件的名字。
根据本申请第一方面的第六或第十二使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十三使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中修改文件系统对象的名字,更新所述第一目录的目录属性内容中记录的待修改文件系统对象的名字。
根据本申请第一方面的第六、第十二或第十三使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十四使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中删除目录,删除待删除目录的所有子目录,以及从待删除目录的目录元数据中获取待删除目录所包含的所有文件的键(K),使用获取的键(K)从KV存储设备删除对应的文件内容,以及删除第一目录的目录元数据与目录属性内容中记录的对应于待删除目录的条目。
根据本申请第一方面的第六、第十二至第十四使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第十五使用KV存储设备提供文件系统的方法,还包括:响应于在所述文件系统中读取文件,在所述第一目录的目录属性内容与目录元数据中查询待读取文件的名字对应的条目,从条目中获取待读取文件的键(K),从获取的键(K)从KV存储设备读取对应的文件内容。
根据本申请第一方面的第五至第十五使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第十六使用KV存储设备提供文件系统的方法,还包括:同获取所述第一目录相比,优先通过排序表获取待访问的文件系统对象的键(K)。
根据本申请第一方面的第十六使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十七使用KV存储设备提供文件系统的方法,还包括:响应于修改文件系统对象的名字,为排序表中同待修改文件系统对象关联的文件系统路径所对应的条目加锁。
根据本申请第一方面的第十六使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十八使用KV存储设备提供文件系统的方法,还包括:响应于修改文件系统对象的名字,为排序表加锁。
根据本申请第一方面的第十七或第十八使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第十九使用KV存储设备提供文件系统的方法,还包括:更新排序表中记录的关联于修改文件系统对象的一个或多个条目的文件系统路径。
根据本申请第一方面的第十九使用KV存储设备提供文件系统的方法,提供了根据本申请第一方面的第二十使用KV存储设备提供文件系统的方法,还包括:响应于对排序表更新完成,解除所加的锁。
根据本申请第一方面的第十七至第二十使用KV存储设备提供文件系统的方法之一,提供了根据本申请第一方面的第二十一使用KV存储设备提供文件系统的方法,其中:响应于访问文件系统的对象,若待访问的对象的文件系统路径在文件系统中被加锁,从KV存储设备访问所述第一目录,以获取待访问的文件系统对象的键(K)。
根据本申请的第二方面,提供了根据本申请第二方面的第一文件系统,包括存储在计算机可读介质中的程序,当所述程序被处理器执行时,实施根据本申请第一方面的第一至第二十一使用KV存储设备提供文件系统的方法之一。
根据本申请第二方面的第一文件系统,提供了根据本申请第二方面的第二文件系统,所述第二文件系统耦合到所述KV存储设备。
根据本申请第二方面的第一文件系统,提供了根据本申请第二方面的第三文件系统,所述文件系统被实施于所述KV存储设备。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1A是相关技术中固态存储设备的框图;
图1B展示了现有技术的固态存储设备的地址转换系统的示意图;
图2A是根据本申请实施例的基于逻辑键的KV存储设备的示意图;
图2B是根据本申请又一实施例的基于逻辑键的KV存储设备的示意图;
图2C是根据本申请另一实施例的基于逻辑键的KV存储设备的示意图;
图3A-图3E展示了根据本申请实施例处理操作接口命令的流程图;
图4A是根据本申请又一实施例的KV存储设备的示意图;
图4B是根据本申请实施例的主机访问图4A所示的KV存储设备的流程图;
图4C是根据本申请又一实施例的主机访问图4A所示的KV存储设备的流程图;
图5展示了根据本申请另一实施例的KV存储设备的地址转换系统的示意图;
图6是根据图5实施例的固态存储设备的地址转换系统的详细示意图;
图7A-图7C是根据图5或图6的实施例的存储设备响应主机访问的流程图;
图8是根据本申请实施例的基于KV存储设备的文件系统的示意图;
图9展示了根据本申请实施例的基于KV存储设备的文件系统的示意图;
图10是根据本申请又一实施例的基于KV存储设备的文件系统的示意图;
图11A-11H记录了根据本申请的基于KV存储设备的文件系统的提供文件系统服务的流程图;
图12是根据本申请另一实施例的基于KV存储设备的文件系统的示意图;
图13A是根据本申请又一实施例的基于逻辑键的KV存储设备的示意图;以及
图13B是根据本申请另一实施例的基于逻辑键的KV存储设备的示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图2A是根据本申请实施例的基于逻辑键的KV存储设备的示意图。
根据本申请实施例的存储设备,提供或利用两种键,以提供更多的数据操作能力。所利用的两种键分别称为逻辑键与物理键,在不发生混淆的情况下,后者也简称为“键”。逻辑键与物理键一一对应。作为举例,逻辑键是例如网页地址(例如,www.abc.com/foo.html)、文件系统的路径(例如,/root/dir1/a.txt)或现有技术的存储协议(例如,NVMe协议)中的逻辑地址。而物理键是便于存储设备处理的键的形式。例如,物理键为具有指定长度的UUID(Universally Unique Identifier,通用唯一标识符)。优选地,物理键具有指定的长度。作为又一个例子,物理键是通过对逻辑键进行哈希运算得到的结果。依然可选地,物理键是现有技术的KV存储设备所使用的键。在申请号为201711392529.2的中国专利申请提供了一种KV存储设备,将其全文合并于本申请。
参看图1A与图2A,根据本申请实施例的KV存储设备,包括控制部件、存储器NVM存储介质。KV存储的控制部件维护排序表与KV FTL。排序表与KV FTL的数据可被存储在存储器或控制部件内部的缓存中。可选地,排序表和/或KV FTL的部分或全部,被存储在NVM存储介质中。
排序表记录了逻辑键与物理键(图2A中,记为“键”)的对应关系。排序表包括多个条目,每个条目记录了一对逻辑键与物理键的对应关系。排序表的多个条目按逻辑键排序。从而根据逻辑键或其前缀的部分,能够快速且高效地从排序表中查询到对应的物理键。而且由于排序表的条目按逻辑键排序,根据逻辑键的前缀部分(对应了具有相同前缀的一组逻辑键,这些逻辑键对应的条目在排序表中相邻),能够快速且高效地从排序表中查询到对应的一个或多个物理键。排序表可以由数组、链表、树等多种数据结构实现。
KV FTL记录了物理键(图2中,记为“键”)与存储设备的逻辑地址或物理地址的对应关系。通过逻辑地址或物理地址,得以访问存储设备。逻辑地址是例如存储协议(例如,NVMe协议)的逻辑地址,而物理地址指示了NVM芯片的物理存储位置。KV FTL可以由数组、链表、树、哈希表等多种数据结构实现。可选地,KV FTL是现有技术的KV存储设备的FTL。
根据图2A的实施例的KV存储设备,同KV存储设备耦合的例如主机,通过逻辑键访问KV存储设备。例如,主机向KV存储设备发出的读操作(Get(Key))中指示要读取的Key为逻辑键。KV存储设备接收逻辑键,用逻辑键查询排序表得到物理键,再用物理键查询KV FTL得到逻辑地址或物理地址,并用该逻辑地址或物理地址访问同逻辑键对应的数据。可选地,使用现有技术的KV存储设备来处理根据物理键的访问。
可选地,根据本申请实施例的KV存储设备,除了向主机提供同现有技术的KV存储设备类似的操作接口(例如,读操作(Get(逻辑键))、写操作(Put(逻辑键,Value))和/或删除操作(Delete(逻辑键))),还提供例如访问物理键的操作,例如读物理键操作(GetKey(逻辑键),响应于该操作,KV存储设备输出排序表中记录的同逻辑键对应的物理键)。
图2B是根据本申请又一实施例的基于逻辑键的KV存储设备的示意图。
根据图2B展示的实施例的KV存储设备,包括控制部件、存储器NVM存储介质。控制部件包括CPU 1与CPU 2。CPU 1维护排序表,而CPU 2维护KV FTL。以读操作(Get(逻辑键)为例,CPU 1根据逻辑键从排序表中获取同逻辑键对应的物理键,而CPU 2根据物理键从KVFTL中获取同物理键对应的物理地址或逻辑地址。
图2C是根据本申请另一实施例的基于逻辑键的KV存储设备的示意图。
根据图2C展示的实施例的KV存储设备向主机提供的操作接口是基于物理键的,例如,读操作(Get(物理键))、写操作(Put(物理键,Value))和/或删除操作(Delete(物理键))。在同KV存储设备耦合的主机维护排序表,用于将逻辑键映射到物理键。例如,主机中运行的KV存储设备的驱动程序维护排序表。应用程序利用逻辑键访问KV存储设备,而KV存储设备的驱动程序接收逻辑键并查询排序表以得到物理键,并利用物理键访问KV存储设备。
图3A-图3E展示了根据本申请实施例处理操作接口命令的流程图。
图3A是处理读操作接口命令的流程图。读操作接口命令(简称“读操作”)指示了逻辑键(也记为LK)。接收读操作的KV存储设备从读操作中获取逻辑键(LK)(310)。KV存储设备根据逻辑键(LK)查询排序表以获取物理键(记为PK)(312)。以及根据物理键(PK)访问KVFTL以获取逻辑地址或物理地址,并从逻辑地址或物理地址读出数据,作为同逻辑键(LK)对应的值(314)。
图3B是处理写操作接口命令的流程图。写操作接口命令(简称“写操作”)指示了逻辑键(也记为LK)与待写入的数据(V)。接收写操作的KV存储设备从写操作中获取逻辑键(LK)(320)。KV存储设备根据逻辑键(LK)查询排序表以识别该逻辑键(LK)在排序表中是否存在(322)。若逻辑键(LK)在排序表中不存在(322),为逻辑键(LK)分配新的物理键(PK),并将逻辑键(LK)与新生成的物理键(PK)添加到排序表(324)。例如,根据物理键的生成规则,对逻辑键(LK)进行哈希运算生成物理键(PK);或者,获取在排序表中尚不存在的UUID,分配给逻辑键(LK)。以及更新新生成的物理键(PK)所对应的数据(V)(329)。
若逻辑键(LK)在排序表中已存在(322),则查询排序表以获取同逻辑键(LK)对应的物理键(PK),以及更新查询到的物理键(PK)所对应的数据(V)(329)。
为更新物理键(PK)所对应的数据(V)(329),例如,为查询到的物理键(PK)分配新的物理地址,在KV FTL中,记录查询到的物理键(PK)与新分配的物理地址,将数据(V)写入分配的新物理地址。可选地,为查询到的物理键(PK)分配新的逻辑地址,以及根据现有技术的存储设备的更新方式,将分配的新逻辑地址的值更新为待写入的数据(V)。依然可选地,根据现有技术的KV存储设备的更新方式,向新生成的物理键(PK)写入所对应的数据(V)。
图3C是处理修改逻辑键操作接口命令的流程图。修改逻辑键操作接口命令(简称“修改键操作”)指示将修改前的逻辑键(也记为LK_S)更新为修改后的逻辑键(LK_D)。接收修改键操作的KV存储设备从修改键操作中获取修改前的逻辑键(LK_S)与修改后的逻辑键(LK_D)(330)。KV存储设备根据修改前的逻辑键(LK_S)查询排序表以识别该修改前的逻辑键(LK_S)在排序表中是否存在(332)。若修改前的逻辑键(LK_S)在排序表中不存在(332),指示出现错误(336)。
若修改前的逻辑键(LK_S)在排序表中存在(332),将排序表中的修改前的逻辑键(LK_S)更新为修改后的逻辑键(LK_D)(334)。
图3D是处理复制操作接口命令的流程图。复制操作接口命令(简称“复制操作”)指示复制待复制的逻辑键(也记为LK_S),使得用新的逻辑键(LK_D)可以访问待复制的逻辑键(LK_S)的数据(V)。接收复制操作的KV存储设备从复制操作中获取待复制的逻辑键(LK_S)与新的逻辑键(LK_D)(350)。KV存储设备根据待复制的逻辑键(LK_S)查询排序表以识别该待复制的逻辑键(LK_S)在排序表中是否存在(352)。若待复制的逻辑键(LK_S)在排序表中不存在(352),指示出现错误(356)。
若待复制的逻辑键(LK_S)在排序表中存在(352),从排序表中获取同待复制的逻辑键(LK_S)对应的物理键(PK),以及生成新的排序表条目,其中记录了新的逻辑键(LK_D)与获取的对应于待复制的逻辑键(LK_S)的物理键(PK)的对应关系,并将新生成的排序表条目添加到排序表(354)。以及可选地,将新生成的排序表条目添加到排序表,并使排序表中的条目依然按逻辑键排序。
图3E是处理范围查询操作接口命令的流程图。范围查询操作接口命令(简称“范围查询操作”)指示了待访问的逻辑键的范围(也记为LK_R)。例如,以逻辑键前缀的形式或由带通配符的逻辑键的形式表达逻辑键范围(LK_R)。接收范围查询操作的KV存储设备从范围查询操作中获取逻辑键范围(LK_R)(360)。KV存储设备根据逻辑键范围(LK_R)查询排序表以获取同属于该逻辑键范围(LK_R)的一个或多个逻辑键(LK)对应的一个或多个物理键(PK)(362)。以及对于每个获取的物理键(PK),访问KV FTL以获取逻辑地址或物理地址,并从逻辑地址或物理地址读出数据,作为同逻辑键(LK)对应的值(364)。可选地,对于每个物理键(PK),根据现有技术的KV存储设备的读取方式,读取同物理键(PK)对应的数据(V)。
在一个实施方式中,根据图3A-图3E所示的流程,由根据本申请实施例的存储设备实施。
在又一个实施方式中,主机同KV存储设备耦合,主机维护排序表,而KV存储设备维护KV FTL。从而图3A到3E中,获取物理键之前的步骤,由主机执行,而根据物理键访问对应的值的步骤,由存储设备执行。例如,图3A的步骤310与步骤312由主机执行,其他步骤由KV存储设备执行。图3B的步骤320、步骤322、步骤324与步骤326由主机执行,步骤329由KV存储设备执行。图3C与图3D的流程的各步骤均由主机执行。图3E的步骤360与步骤362由主机执行,步骤364由KV存储设备执行。
图4A是根据本申请又一实施例的KV存储设备的示意图。
参看图4A,根据本申请实施例的KV存储设备,包括控制部件、存储器NVM存储介质。KV存储的控制部件维护排序表与KV FTL。KV FTL包括多个L1哈希表。每个L1哈希表由键(Key)索引。通过键(Key)索引L1哈希表内记录的条目。L1哈希表的条目记录了例如存储键(Key)所对应数据的存储单元的物理地址或逻辑地址。
排序表包括多个条目,每个条目记录了排序索引与L1哈希表之一的基地址的对应关系。排序表的多个条目按排序索引排序。从而根据排序索引或其前缀的,能够快速且高效地从排序表中查询到对应的L1哈希表。
在一种实施方式中,根据图4A的实施例的KV存储设备向同其耦合的主机提供的操作接口命令中指示键(Key)与排序索引。主机提供的排序索引,是用于接口命令中的键(Key)的排序索引。排序索引是用于键(Key)的索引,并且可排序。排序索引同键(Key)一一对应,或者是一对多关系。例如,主机提供的键是例如UUID,而排序索引是数字或字符串。在又一个例子中,排序索引是URL的部分前缀,而键(Key)是完整URL。
根据图4A的实施例,主机为访问KV存储系统,为所使用的键(Key)分配或生成排序索引。例如,对于形式为文件系统路径的键,截取路径的前缀部分作为排序索引。一些情况下,对于由<键,数据>所构成的记录,生成记录的主机知晓其排序规则,从而由主机根据记录的排序规则,为键(Key)生成排序索引,并提供给KV存储设备。
图4B是根据本申请实施例的主机访问图4A所示的KV存储设备的流程图。
以主机向KV存储设备发出读操作接口命令(Get(键,排序索引))为例。为读取同键(K)对应的数据,主机获取要读取的键(K)(410),,为键(K)生成排序索引或者获取同键(K)对应的排序索引(SK)(415),并向KV存储设备发出读操作接口命令,在读操作接口命令中指示了键(K)与排序索引(SK)。
KV存储设备接收读操作接口命令中的键(K)与排序索引(SK)(420),用排序索引(SK)查询排序表,根据得到的L1哈希表地址得到对应的L1哈希表(425)。并用读操作接口命令中的键查询L1哈希表,得到对应的逻辑地址或物理地址(430),并用以访问存储设备,从逻辑地址/或物理地址读出数据,并提供给主机,作为对读操作接口命令额响应。可选地,L1哈希表是现有技术的KV存储设备的FTL。
作为又一个例子,主机向KV存储设备发出写操作接口命令(Put(键,排序索引,数据))。主机获取要读取的键(K),为键(K)生成排序索引或者获取同键(K)对应的排序索引。并用写操作接口命令将键(K)与排序索引(SK)提供给KV存储设备。KV存储设备接收写操作接口命令中的键与排序索引,用排序索引查询排序表,根据得到的L1哈希表地址得到对应的L1哈希表。并用写操作接口命令中的键查询L1哈希表,得到对应的逻辑地址或物理地址,并向其写入写操作接口命令指示的数据。若在排序表中未找到对应排序索引的记录,或者L1哈希表中未找到对应键的记录,则表明待写入的键在KV存储设备中不存在,而向排序表中添加对应于排序索引的记录,向L1哈希表中添加对应于键的记录。以及在需要时,还生成新的L1哈希表。
在又一种实施方式中,根据图4A的实施例的KV存储设备向同其耦合的主机提供的操作接口命令中仅指示键(Key)而不指示排序索引。由KV存储设备根据所接收的键(Key)生成排序索引。排序索引是例如为键(Key)分配的序号,或键(Key)的部分或前缀。
图4C是根据本申请又一实施例的主机访问图4A所示的KV存储设备的流程图。
主机向KV存储设备发出范围查询操作接口命令(简称“范围查询操作”)。范围查询操作指示了待访问的键的范围(也记为K_R)(450)。例如,键是文件系统的路径,而键的范围是某目录下的所有文件,并且键的范围的形式为键前缀的形式或由带通配符的键的形式。主机还根据键的范围,生成排序索引(SK)(460)。排序索引所对应的键覆盖了待访问的键的范围。作为举例,排序表是前缀树,而生成的排序索引(SK)指示的前缀树的节点的所有子节点,覆盖了待访问的键的范围内的所有键。
主机将待访问的键的范围(也记为K_R)与排序索引(SK)发给KV存储设备。KV存储设备根据排序索引(SK)访问排序表,从中获取一个或多个L1哈希表的地址(470)。例如,根据排序索引(SK)所命中的节点,获取该节点在排序表中的所有子节点所记录的L1哈希表地址。对于获取的每个哈希表,从中获取同键范围(K_R)匹配的所有条目中记录的逻辑地址或物理地址(480),并访问逻辑地址/或物理地址,例如从中读出数据。在一个例子中,遍历L1哈希表,获取其中的每个键,从同键范围(K_R)匹配的条目中获取逻辑地址或物理地址。
图5展示了根据本申请另一实施例的KV存储设备的地址转换系统的示意图。
KV存储设备的NVM芯片(也参看图1,NVM芯片105)提供了多个物理块。物理块被用作数据块。数据块包括物理页或数据帧,用于记录被写入固态存储设备的数据。
以物理页为例,图5展示的数据块包括5个物理页。每个物理页包括头部字段(分别记为“头部1”、“头部2”……与“头部5”)。每个物理页具有物理地址(记为PPA),通过使用PPA可访问对应的物理页。物理页中记录了键(K)与值(Value),键(Key)与值(Value)是主机写入数据时提供的键(Key)与值(Value)。物理页中还记录了头部字段,头部字段用于指示键(Key)和/或值(Value)的起始地址和/或长度。
例如图5中由“头部1”所指示的物理页,包括头部字段(头部1)、键1与值1。头部字段记录了键(Key)的长度与值(Value)的长度(而头部字段的长度为定值),根据PPA所指示的物理地址和头部字段的长度可计算出键(Key)的起始地址和值(Value)的起始地址。在一个例子中,头部字段记录键(Key)的长度,根据PPA所指示的物理地址和头部字段的长度,以及键(Key)的长度可计算出值(Value)的起始地址。以及在又一个例子中,键(Key)的起始地址是固定的,头部字段记录值(Value)的起始地址。在又一个例子中,键(Key)与值(Value)是不定长的。
可选地,物理页中记录多个<键,值>对。以“头部2”所指示的物理页为例,其中记录的“键2”与“值2”为一对,而“键3”与“值3”为另一对。以及根据“头部2”寻址<键2,值2>与<键3,值3>的每对。
依然可选地,物理页(例如图5中由“头部3”所指示的物理页)头部字段、键(Key)和值(Value)的长度的总和不足以填满物理页,则以填充(dummy)数据填满物理页。
由“头部4”与“头部5”所指示的物理页是物理地址连续的物理页,键5与“值5”是主机写入数据时提供的键(Key)与值(Value)。由于“值5”的大小超过了物理页所能容纳的大小,在由“头部4”所指示的物理页中记录了键5与主机提供的值5的一部分,在由“头部5”所指示的物理页中记录了“值5”的余下部分。头部字段“头部4”与“头部5”,用于指示“键5”和“值5”在物理页中的起始地址和/或长度。可选地,在头部字段中还记录所占用物理页的数量(该数量为2)。
可选地,依然参看图5的“头部4”与“头部5”所指示的物理页,头部字段以及键(Key)与值(Value)的大小不足以填满两个物理页,以填充(dummy)数据填满由“头部5”所指示的物理页。
继续参考图5,主机或用户提供的键(K)包括或被分为排序索引(SK)与RK两部分。排序索引(SK)与RK组合得到键(K)。对RK进行哈希计算,得到得到哈希键(记为HRK)。可选地,哈希键(HRK)具有指定的长度。依然可选地,哈希键(HRK)被分为多个部分。例如,哈希键(HK)分为2部分,分别记为HRK1与HRK2。例如,长度为128比特的哈希键(HRK),HRK1是哈希键(HRK)的前64比特,HRK2是哈希键(HRK)的接下来的64比特。可以理解地,有多种其他方式将哈希键(HRK)分为多个部分,而不限制选取哈希键(HRK)的比特的方式、顺序和/或长度等。
在可选的实施方式中,主机或用户提供的键(K)作为RK,以及额外获取或生成同RK对应的排序索引(SK)。例如,截取RK的部分,作为排序索引(SK)。在此实施方式中,RK同键(K)相同。
依然参看图5,存储设备的存储器(也参看图1,例如DRAM 110)中记录多种数据表,包括排序表、L1哈希表与冲突链表。
排序表包括多个条目,每个条目记录了排序索引(SK)与L1哈希表之一的基地址的对应关系。排序表的多个条目按排序索引排序。从而根据排序索引或其前缀的,能够快速且高效地从排序表中查询到对应的L1哈希表。
提供一个或多个L1哈希表。L1哈希表由哈希键(HRK)的部分HRK1索引。例如,以HRK1作为L1哈希表内的偏移值来获取L1哈希表的条目。L1哈希表的条目记录了数据块的逻辑地址/物理地址或冲突表的地址。
提供一个或多个冲突表。L1哈希表的条目记录冲突表的地址,从而依据L1哈希表的条目可寻址冲突表。(每个)冲突表由键(K)索引。冲突表的条目记录了数据块的物理页(或数据单元)地址。
在可选的实施方式中,提供一个或多个L2哈希表。L1哈希表的条目,可选地记录L2哈希表的地址,从而依据L1哈希表的条目可寻址L2哈希表。(每个)L2哈希表由哈希键(HRK)的部分HRK2索引。例如,以HRK2作为L2哈希表内的偏移值来获取L2哈希表的条目。L2哈希表的条目记录了数据块的物理地址/逻辑地址或冲突表的地址。
图6是根据图5实施例的固态存储设备的地址转换系统的详细示意图。
冲突表的每个条目由排序索引(SK)索引,而条目的值是L1哈希表的地址。作为举例,以排序索引(SK)为索引访问排序表,得到匹配了排序索引(SK)的排序表条目。参看图6,若排序索引(SK)为字符串“hello”,其将匹配图6中的排序表的第4个条目,该条目记录了例如L1哈希表622的地址。
对RK进行指定的哈希计算得到哈希键(HRK)。L1哈希表的每个条目由哈希键(HRK)的部分(HRK1)索引,而条目的值是数据块的逻辑地址/物理地址或者冲突表地址。作为举例,以HRK1为地址或偏移值访问L1哈希表的条目。若L1哈希表的条目记录数据块的物理地址/逻辑地址,该地址指示<键(K),数据(V)>对在NVM存储介质中的存储位置。
可以理解地,L1哈希表的索引HRK1不同于哈希键(HRK)。且HRK1与哈希键(HRK)不是一一对应关系,而是多个哈希键(HRK)可能都对应相同的HRK1。从而,依据HRK1从L1哈希表索引到的数据块的物理地址/逻辑地址访问到的<键(K),数据(V)>,有一定概率不是对应于主机/用户所访问的、被用于生成哈希键(HRK)的RK,从而发生错误。在一些情况下,这种错误的发生是极小概率的,并且可以被用户或固态存储设备所遵循的技术标准所接受。在另一些情况下,不能接受这种错误,还要比较从L1哈希表索引到的数据块的物理地址/逻辑地址访问到的键(K)与用户要访问的RK与排序索引(SK)的组合是否相同,来识别错误是否发生。
若L1哈希表的条目记录冲突表地址,该地址指示同该条目关联的冲突表之一在存储器中的位置。从而该冲突表的条目也关联于HRK1。
例如,参看图6,L1哈希表中620,以HRK1-1为索引的条目,记录了物理地址PPA,以HRK1-2为索引的条目,记录了冲突表640的地址,以HRK1-4为索引的条目,记录了冲突表642的地址。哈希表622中,以HRK1-8为索引的条目,记录了冲突表644的地址。
冲突表的每个条目由RK索引,而条目的值是数据块的物理地址/逻辑地址。图6展示了冲突表640、冲突表642与冲突表644。冲突表是例如数组、链表、线性表或树。可选地,冲突表是排序的,例如按RK的数值排序,以支持通过RK在冲突表中快速查找由RK索引的条目。
根据图3所示的实施例,L1哈希表的每个条目关联于排序索引(SK)与HRK1。而多个RK可能都对应相同的排序索引(SK)与HRK1的组合。例如,RK1与RK2都对应的相同的排序索引(SK)与HRK1的组合,从而依据键(K1)得到的排序索引(SK)与HRK1_2关联于由HRK1_2所指示的L1哈希表620的条目,依据键(K2)得到的排序索引(SK)与HRK1_2也关联于由HRK1_2所指示的L1哈希表的条目。在此情况下,由HRK1_2所指示的L1哈希表的条目发生冲突。为解决冲突,创建冲突表640,以记录键(K1)或RK1与其物理地址/逻辑地址的关联关系,还记录键(K2)或RK2与其物理地址/逻辑地址的关联关系。以及在HRK1_2所指示的L1哈希表的条目中记录冲突表640的地址。
可选地,L1哈希表具有指定的大小(例如,1KB-4MB),而冲突表的条目数量没有限制。依然可选地,选择L1哈希表与冲突表的大小,使其易于被操作系统或内存管理单元(MMU,Memory Management Unit)访问,和/或易于存储到NVM存储介质。
在依然可选的实施方式中,固态存储设备中包括多个如图6所示的地址转换系统。而固态存储设备的每个命名空间(Name Space)对应如图6所示的地址转换系统之一。
图7A-图7C是根据图5或图6的实施例的存储设备响应主机访问的流程图。
根据图7A,存储设备响应主机发出的读操作接口命令(Get(K))。为读取同键(K)对应的数据,存储设备从读操作中获取键(K)(710),根据键(K)生成排序索引(SK)与RK,对RK进行指定的哈希计算得到哈希键(HSK)(715)。例如,取键(K)的前面指定长度部分作为排序索引(SK),而将键(K)的其他部分作为RK。
用排序索引(SK)查询排序表,根据得到的L1哈希表地址得到对应的L1哈希表(720)。并用从读操作接口命令得到的哈希键(HRK)的部分HRK1查询L1哈希表(725)。若L1哈希表中不存在同哈希键部分HRK1对应的条目,则指示同读操作接口命令对应的键(K)不存在。
访问用HRK1得到的L1哈希表条目,若L1哈希表条目指示不存在冲突(730),则L1哈希表条目中记录了逻辑地址或物理地址,访问该逻辑地址或物理地址(739),将读出的数据作为同键(K)对应的数据。可选地,还从读出的数据中获取键(Kp),比较键(Kp)与键(K)是否相同。若键(Kp)与键(K)相同,则NVM存储介质中同键(Kp)关联地存储的值,是同键(K)对应的值,将该值作为读操作的结果。若键(Kp)与键(K)不同,则NVM存储介质中同键(Kp)关联地存储的值,不是同键(K)对应的值,则指示同键(K)对应的值在固态存储设备中不存在。
若用HRK1得到的L1哈希表条目指示存在冲突(730),则L1哈希表条目中记录的是冲突表的地址,用该地址获取冲突表,以及用RK查询冲突表(735),得到冲突表条目。在冲突表条目中记录了逻辑地址或物理地址,访问该逻辑地址或物理地址(737),将读出的数据作为同键(K)对应的数据。可选地,还从读出的数据中获取键(Kp),比较键(Kp)与键(K)是否相同。若键(Kp)与键(K)相同,则NVM存储介质中同键(Kp)关联地存储的值,是同键(K)对应的值,将该值作为读操作的结果。若键(Kp)与键(K)不同,则NVM存储介质中同键(Kp)关联地存储的值,不是同键(K)对应的值,则指示同键(K)对应的值在固态存储设备中不存在。
在可选的实施方式中,冲突表的索引是键(K),在步骤735,用键(K)查询冲突表。
根据图7B,存储设备响应主机发出的范围查询操作接口命令(简称“范围查询操作”)。范围查询操作指示了待访问的键的范围(也记为K_R)(740)。存储设备根据键的范围(K_R),生成排序索引(SK)(745)。排序索引(SK)所对应的键覆盖了待访问的键的范围(K_R)。作为举例,排序表是前缀树,而生成的排序索引(SK)指示的前缀树的节点的所有子节点,覆盖了待访问的键的范围(K_R)内的所有键。作为又一个例子,通过排序索引(SK)从排序表中查询到单一的条目(例如,排序树的叶节点),该条目所记录的L1哈希表覆盖了待反问的键的范围(K_R)内的所有键。
根据排序索引(SK)访问排序表,从中获取一个或多个L1哈希表的地址(750)。例如,根据排序索引(SK)所命中的节点,获取该节点在排序表中的所有子节点所记录的L1哈希表地址。对于获取的每个L1哈希表,用同键范围(K_R)匹配的所有键(K)所对应的哈希键部分HSK1访问L1哈希表(755),得到哈希表条目。
对于从各个L1哈希表中获得的每个条目,识别其是否存在冲突(760)。若L1哈希表条目指示不存在冲突(760),则L1哈希表条目中记录了逻辑地址或物理地址,访问该逻辑地址或物理地址(769),将读出的数据作为同键(K)对应的数据。若L1哈希表条目指示存在冲突(760),则L1哈希表条目中记录的是冲突表的地址,用该地址获取冲突表,以及用命中了该L1哈希表的条目的哈希键部分HRK1所对应的RK查询冲突表(765),得到冲突表条目。在冲突表条目中记录了逻辑地址或物理地址,访问该逻辑地址或物理地址(737),将读出的数据作为同键(K)对应的数据。
在一个例子中,作为对步骤755的替代,遍历每个L1哈希表,获取其中的每个条目所记录的部件键HRK1,从同键范围(K_R)匹配的部件键HRK1所在的条目中获取逻辑地址或物理地址。若L1哈希表的条目存在冲突,从对应的冲突表中记录的所有条目中获取逻辑地址/物理地址,并读出数据。
在另一个例子中,作为对步骤755的替代,遍历每个L1哈希表,获取其中的所有条目,并从每个L1哈希表条目中获取物理地址/逻辑地址或者与其对应的冲突表的所有条目中的物理地址/逻辑地址。以及从物理地址/逻辑地址获取数据,作为对范围查询操作接口命令的响应。
根据图7C,存储设备响应主机发出的写操作接口命令(Put(K,V))。为向键(K)写入数据,存储设备从写操作中获取键(K)(770),根据键(K)生成排序索引(SK)与RK,对RK进行指定的哈希计算得到哈希键(HSK)(772)。例如,取键(K)的前面指定长度部分作为排序索引(SK),而将键(K)的其他部分作为RK。
用排序索引(SK)查询排序表(774)。若排序表中不存在同排序索引(SK)匹配的条目(776),则创建新的L1哈希表,向排序表添加新的条目,新的条目同排序索引(SK)匹配,并且在新的排序表条目中记录新建的L1哈希表的基地址。以及还为待写入的数据分配物理地址/逻辑地址,在新建的L1哈希表中添加记录,所添加的记录以哈希键(HSK)的部分HSK1为索引,以分配的物理地址/逻辑地址为值(778)。还将写操作接口命令对应的数据写入所分配物理地址/逻辑地址。
若排序索引(SK)匹配了排序表的条目(776),从匹配的条目中获取L1哈希表的基地址,并用哈希键部分HRK1查询L1哈希表(780)。
若L1哈希表中不存在同哈希键部分HRK1对应的条目(782),则指示同写操作接口命令对应的键(K)不存在。更新L1哈希表(784),在L1哈希表中添加条目,添加的条目以哈希键部分HRK1为索引,在条目中记录分配的物理地址/逻辑地址。并向新分配的物理地址/逻辑地址写入数据。
若部分键HRK1在L1哈希表中存在(782),进一步识别部分键HRK1在L1哈希表中是否存在冲突(786)。若不存在冲突,将数据写入新分配的物理地址/逻辑地址,将根据部分键HRK1索引的L1哈希表条目中记录的地址更新为新分配的物理地址/逻辑地址(788)
若部分键HRK1在L1哈希表中存在冲突(786),根据部分键HRK1索引的L1哈希表条目获取冲突表的地址,并用RK查询冲突表(790)。若在冲突表中,查询到以RK为索引的条目(792),用分配的物理地址/逻辑地址更新该条目(796),若冲突表中不存在以RK为索引的条目(792),在冲突表中添加以RK为索引且以分配的物理地址/逻辑地址为值的条目(794)。
图8是根据本申请实施例的基于KV存储设备的文件系统的示意图。
主机同KV存储设备耦合。KV存储设备向主机提供基于键(K)的访问接口。KV存储设备是例如现有技术的KV存储设备,或者根据本申请实施例的KV存储设备。主机包括文件系统,以使用KV存储设备,并向用户或应用提供文件系统服务。
文件系统采用文件系统路径描述文件或目录。并提供诸如读文件、写文件、删除文件、创建目录、删除目录、修改路径等文件系统服务。文件系统提供文件系统接口,文件系统接口包括例如,读文件接口、写文件接口、创建文件接口、删除文件接口、文件改名接口、创建目录接口、删除目录接口、目录改名接口、复制文件或目录接口、创建文件或目录的链接的接口等。通过文件系统接口访问文件系统。
可选地,由KV存储设备提供文件系统。例如,在KV存储设备的CPU上运行实现了文件系统的程序,并向耦合到KV存储设备的主机提供文件系统接口。
图9展示了根据本申请实施例的基于KV存储设备的文件系统的示意图。
以文件的文件系统路径为例,其包括文件所在目录的完整路径与文件名。拼接文件所在目录的完整路径与文件名,得到用于文件的文件系统路径。对于目录,其文件系统路径为目录的完整路径。目录与文件都是文件系统的对象。文件系统包括唯一的根目录,
例如,将根目录记为“/”,目录的文件系统路径以根目录为开始,并包括目录的各级父目录的路径。文件系统路径为“/abc”的目录,是根目录“/”的子目录。文件系统路径为“/abc/hello”的目录,是根目录“/”的子目录“abc”的子目录。
根据图9的实施例,在排序表的条目记录文件系统路径与对应的键。以文件系统路径为条目的排序索引,而对应的键为条目的值。例如,键是为文件系统路径生成的UUID。排序表中记录文件系统管理的每个目录与文件所对应的条目。可选地,排序表中允许两个或多个条目记录相同的UUID,以为文件系统提供链接、复制等功能。
作为举例,排序表作为文件系统的部分,由主机提供。文件系统用文件系统路径查询排序表,得到同文件系统路径对应的键(或UUID),并用键访问KV存储设备。
KV存储设备中,记录了同键(K)相对应的值(V)。对于通过文件的文件系统路径得到的键,其值是文件的内容。可选地,该值还包括文件的属性信息。依然可选地,对于通过文件的文件系统路径得到的键(K),生成两个或更多键(例如,K与K_1),在KV存储设备中,通过键(K)得到同文件对应的值,而通过键(K_1)得到同问文件对应的属性信息。对于通过目录的文件系统路径得到的键,其在KV存储设备中记录的值是目录的内容,包括例如以该目录为所在目录的所有文件与子目录的包括文件名或目录名的属性信息。
图10是根据本申请又一实施例的基于KV存储设备的文件系统的示意图。
KV存储设备记录了键(K)与对应的值(V)。键是例如UUID,而值是文件内容或目录内容。例如,键UUID100对应的值是根目录内容,键UUID101对应的值是子目录1的内容,UUID200对应的值是文件1的内容,而键UUID201对应的值是文件2的内容。
图10还展示了示例的文件系统结构。文件系统的根目录是“/”,其下包括子目录“dummy”与文件“dummy.txt”。子目录“dummy”中还包括对根目录下的文件“dummy.txt”的链接。
图10中还展示了根目录内容与子目录“dummy”的内容。
根目录的内容,是在KV存储设备中记录的同例如键UUID100对应的值。根目录内容包括多条记录,每条记录描述了以根目录为所在目录的所有文件与子目录的每个的包括文件名或目录名的属性信息。图10中的根目录内容,包括4条记录,第一条记录(第1行)指示了该目录(根目录)的父目录的UUID(UUID 100);第二条记录(第2行)指示了该目录(根目录)自己的UUID(UUID 100)。可选地,在第二条记录中,还记录根目录自己的名字、类型、属性等信息。由于“根目录”没有父目录,在第一条记录中也记录了根目录自己的UUID。图10中的根目录内容,第三条记录(第3行)指示了根目录所包含的对象的UUID(UUID 101),还指示了该对象的名字(“dummy”),该对象的类型是“目录”,该对象的相关属性、创建日期、权限等。图10中的根目录内容,第四条记录(第4行)指示了根目录所包含的对象的UUID(UUID 200),还指示了该对象的名字(“dummy.txt”),该对象的类型是“文件”,该对象的相关属性、创建日期、权限等。可选地,在第四条记录(第4行)还记录了文件系统中指向该对象的一个或多个链接所在的目录的UUID(UUID列表)。
可以理解地,为根目录所包含的每个子目录以及每个文件,在根目录内容中提供对应的记录。
目录“dummy”的内容,是在KV存储设备中记录的同例如键UUID101对应的值。目录内容包括多条记录,每条记录描述了以该子目录为所在目录的所有文件与子目录的每个的包括文件名或目录名的属性信息。图10中的子目录“dummy”的内容,包括3条记录,第一条记录(第1行)指示了该子目录(子目录“dummy”)的父目录的UUID(UUID 100,即根目录的UUID);第二条记录(第2行)指示了该子目录(子目录“dummy”)自己的UUID(UUID 101),还指示了自己的名字(“dummy”),自己的类型是“目录”,自己的相关属性、创建日期、权限等。图10中的子目录“dummy”内容,第3条记录(第3行)指示了该目录所包含的对象的UUID(UUID201),还指示了该对象的名字(“dummy.txt”),该对象的类型是“链接”,该链接的目标的UUID(即根目录下的文件“dummy.txt”的UUID)、该对象的相关属性、创建日期、权限等。可选地,在第三条记录(第3行)还记录了文件系统中指向该对象的一个或多个链接所在的目录的UUID(UUID列表)。
可以理解地,为子目录“dummy”所包含的每个子目录以及每个文件,在子目录内容中提供对应的记录。
图11A-11H记录了根据本申请的基于KV存储设备的文件系统的提供文件系统服务的流程图。
图11A展示了文件系统提供读文件服务的流程。为读取文件,向文件系统提供待读取文件的文件系统路径,包括文件所在目录与文件名(1110)。文件系统从接收的文件系统路径中获取文件所在目录,并识别目录是否存在(1112)。文件系统通过目录的父目录内容,从父目录内容搜索同目录名匹配的记录,来识别目录是否存在。以及从根目录开始,通过逐级查找文件所在目录的各级父目录,来识别待访问目录的各级父目录是否存在,并获取各级父目录的UUID,通过各级父目录的UUID得到待访问目录的父目录的UUID,并获取待访问目录的父目录的目录内容。根目录的UUID是例如已知的。
在步骤1112,若目录不存在,则文件系统向用户或应用指示出错(1119),因为待访问的文件不存在。若目录存在,获取目录的UUID,利用UUID访问KV存储设备,得到目录内容(1114)。用待读取文件的文件名搜索步骤1114获得的目录内容中的记录,来识别目录内容中是否记录了同待读取文件的文件名关联的记录(1116)。如步骤1116未找到待读取的文件,向用户或文件系统指示待读取文件不存在(1119)。若步骤1116找到了待读取文件对应的记录,从记录中获取待读取文件的UUID,并用该UUID读取KV存储设备,以读出待读取的文件内容(1118)。
图11B展示了文件系统提供删除文件服务的流程。为删除文件,向文件系统提供待删除文件的文件系统路径,包括文件所在目录与文件名(1120)。文件系统从接收的文件系统路径中获取文件所在目录,并识别目录是否存在(1122)。在步骤1122,若目录不存在,则文件系统向用户或应用指示出错(1129),因为待删除的文件不存在。在步骤1122,若目录存在,获取目录的UUID,利用UUID访问KV存储设备,得到目录内容(1124)。用待删除文件的文件名搜索步骤1124获得的目录内容中的记录,来识别目录内容中是否记录了同待删除文件的文件名关联的记录(1126)。如步骤1126未找到待删除的文件,向用户或文件系统指示待删除文件不存在(1129)。若步骤1126找到了待删除文件对应的记录,从记录中获取待删除文件的UUID,并用该UUID访问KV存储设备,以删除同UUID对应的值,以及还用待删除文件所在目录的UUID访问KV存储设备,以更新待删除文件所在目录的目录内容,在文件内容中删除同待删除文件对应的记录(1128)。
图11C展示了文件系统提供写文件服务的流程。为写文件,向文件系统提供待写的文件的文件系统路径,包括文件所在目录与文件名(1130)。文件系统从接收的文件系统路径中获取文件所在目录,并识别目录是否存在(1132)。在步骤1132,若目录不存在,则文件系统向用户或应用指示出错(1139),因为待写的文件不存在。在步骤1132,若目录存在,获取目录的UUID,利用UUID访问KV存储设备,得到目录内容(1134)。用待写的文件的文件名搜索步骤1134获得的目录内容中的记录,来识别目录内容中是否记录了同待写文件的文件名关联的记录(1136)。如步骤1136未找到待写的文件,向用户或文件系统指示待写文件不存在(1139)。若步骤1136找到了待写文件对应的记录,从记录中获取待写文件的UUID,并用该UUID访问KV存储设备,以更新同UUID对应的值(1138)。可选地,还用待写文件所在目录的UUID访问KV存储设备,以更新待写文件所在目录的目录内容,在文件内容中更新同待写文件对应的记录的属性信息,例如,文件上次被更新的时间。
对于文件系统提供的修改文件的服务,以图11C所展示的类似流程被处理。在步骤1138,用待修改文件的UUID从KV存储设备读出待修改文件,并将修改后的文件用相同的UUID写入KV存储设备。或者向KV存储设备指示待修改文件的UUID、待修改文件被修改的位置与修改后的值。
对于文件系统提供的创建文件的服务,以图11C所展示的类似流程被处理。在步骤1136,如步骤1136找到了待创建的文件,向用户或文件系统指示出错(已存在待创建文件)。如步骤1136未找到待创建的文件,在待创建文件所在目录的目录内容中增加记录,以指示为待创建文件分配的UUID、文件名、属性信息等。可选地,无须用待创建文件的UUID访问KV存储设备,因为该待创建文件尚未被写入内容。
图11D展示了文件系统提供创建链接服务的流程。待创建的链接具有其文件系统路径,以及链接所指向的文件系统的目录或文件的文件系统路径(称为目标文件系统路径)。为创建链接,向文件系统提供待创建链接的文件系统路径,包括链接所在目录与文件名(1140)。文件系统从接收的文件系统路径中获取链接所在目录,并识别目录是否存在(1142)。在步骤1142,若目录不存在,则文件系统向用户或应用指示出错(1149)。在步骤1142,若目录存在,获取目录的UUID,利用UUID访问KV存储设备,得到目录内容(1144)。用待创建链接的名称搜索步骤1144获得的目录内容中的记录,来识别目录内容中是否记录了同待创建链接的名称关联的记录(1146)。如步骤1146找到了待创建的链接,向用户或文件系统指示出错(已存在待创建链接)。如步骤1146未找到待创建的链接,为待创建链接分配的UUID,获取待创建链接所指向的目标的UUID(称为目标UUID)与目标所在目录的UUID(称为目标父UUID),通过目标父UUID访问KV存储设备以得到目标父UUID对应的目录内容,在目录内容中更新同目标UUID对应的记录,在记录中增加所创建链接的UUID和/或所创建的链接所在目录的UUID。还在待创建链接所在目录的目录内容中增加记录,以指示为待创建链接分配的UUID、链接名称、属性信息等,还在增加的记录中指示所创建链接所指向的目标UUID和/或目标父UUID(1148)。可选地,无须用所创建链接的UUID访问KV存储设备。
图11E展示了文件系统提供创建目录服务的流程。为创建目录,向文件系统提供待创建目录的文件系统路径,包括待创建目录所在目录(父目录)与待创建目录名(1150)。文件系统从接收的文件系统路径中获取父目录的文件系统路径,并识别父目录是否存在(1152)。在步骤1152,若父目录不存在,则文件系统向用户或应用指示出错(1159)。在步骤1152,若父目录存在,获取父目录的UUID,利用UUID访问KV存储设备,得到父目录内容(1154)。用待创建的目录名搜索步骤1154获得的父目录内容中的记录,来识别目父录内容中是否记录了同待创建目录的目录名关联的记录(1156)。如步骤1156找到了待创建目录的目录名,向用户或文件系统指示出错(1159)。若步骤1156未找到待创建目录对应的记录,在待创建目录的父目录内容中增加记录,以指示为待创建目录分配的UUID、目录名、属性信息等(1158)。
图11F展示了文件系统提供删除目录服务的流程。为删除目录,向文件系统提供待删除目录的文件系统路径,包括待删除目录的父目录的文件系统路径与待删除目录名(1160)。文件系统从接收的父目录文件系统路径中获取待删除目录的父目录,并识别父目录是否存在(1161)。在步骤1161,若父目录不存在,则文件系统向用户或应用指示出错(1169),因为待删除的目录不存在。在步骤1161,若父目录存在,获取父目录的UUID,利用UUID访问KV存储设备,得到父目录内容(1162)。用待删除目录的目录名搜索步骤1162获得的父目录内容中的记录,来识别父目录内容中是否记录了同待删除目录的目录名关联的记录(1163)。如步骤1163未找到待删除的目录,向用户或文件系统指示待删除目录不存在(1169)。若步骤1163找到了待删除目录对应的记录,从记录中获取待删除目录的UUID,并用该UUID访问KV存储设备,以得到待删除目录的待删除目录内容(1164)。遍历待删除目录内容的各个记录,若待删除目录内容指示待删除目录为空(例如,仅有对应待删除目录自身的记录与对应待删除目录父目录的记录),则通过待删除目录UUID访问KV存储设备以删除待删除目录内容,并更新待删除目录的父目录的内容,从中删除与待删除目录相关的记录(1166)。
若待删除目录内容指示待删除目录还包括子目录和/或文件,则删除每个子目录与文件(1167)。例如,为删除子目录,重复从步骤1160开始的流程;而为删除文件,实施图11B所示的流程。
图11G展示了文件系统提供目录重命名服务的流程。为重命名目录,向文件系统提供待重命名目录的文件系统路径,包括待重命名目录的父目录的文件系统路径与待重命名目录名与新目录名(1170)。文件系统从接收的父目录文件系统路径中获取待重命名目录的父目录,并识别父目录是否存在(1172)。在步骤1172,若父目录不存在,则文件系统向用户或应用指示出错(1179),因为待重命名的目录不存在。在步骤1172,若父目录存在,获取父目录的UUID,利用UUID访问KV存储设备,得到父目录内容(1174)。用待重命名目录的目录名搜索步骤1174获得的父目录内容中的记录,来识别父目录内容中是否记录了同待重命名目录的目录名关联的记录(1176)。如步骤1176未找到待重命名的目录,向用户或文件系统指示待重命名目录不存在(1179)。若步骤1176找到了待重命名目录对应的记录,修改该记录中的目录名为新目录名(1178),即完成了目录重命名。
对于文件重命名服务,以类似于图11G的方式实施。在步骤1176,若在父目录内容中找到了对应待重命名的文件的记录,修改该记录中的文件名为新文件名,即完成了文件重命名。
图11H展示了文件系统提供列目录内容服务的流程。为列出目录内容,向文件系统提供待列出内容的目录(称为目标目录)的文件系统路径,包括目标目录的父目录的文件系统路径与目标目录的目录名(1180)。文件系统从接收的父目录文件系统路径中获取目标目录的父目录,并识别父目录是否存在(1182)。在步骤1182,若父目录不存在,则文件系统向用户或应用指示出错(1189),因为目标目录不存在。在步骤1182,若父目录存在,获取父目录的UUID,利用UUID访问KV存储设备,得到父目录内容(1184)。用目标目录的目录名搜索步骤1184获得的父目录内容中的记录,来识别父目录内容中是否记录了同目标目录的目录名关联的记录(1186)。如步骤1186未找到目标目录,向用户或文件系统指示目标目录不存在(1189)。若步骤1186找到了目标目录对应的记录,获取目标目录的UUID,用目标目录的UUID访问KV存储设备得到目标目录内容,并遍历目标目录内容的各个记录,列出目标目录所包括的所有对象(例如,子目录与文件)。
图12是根据本申请另一实施例的基于KV存储设备的文件系统的示意图。
KV存储设备记录了键(K)与对应的值(V)。键是例如UUID,而值是文件内容、目录元数据内容或目录属性内容。例如,键UUID100对应的值是根目录的元数据内容,键UUID101对应的值是子目录1的元数据内容,UUID200对应的值是文件1的内容,而键UUID201对应的值是文件2的内容,键UUID101+P对应的值是子目录1的属性,UUID200对应的值是文件1的属性。根据图12的实施例,同一文件系统对象(文件或目录)的元数据内容与属性,由相关联的键索引,例如,用键UUID101索引子目录1的元数据内容,而用通过键UUID101附加指定后缀“P”得到的键索引子目录1的属性。从而,若已知子目录1对应的键,可得到用于访问子目录1的属性的键。
图12还展示了示例的文件系统结构。文件系统的根目录是“/”,其下包括子目录“dummy”与文件“dummy.txt”。子目录“dummy”中还包括对根目录下的文件“dummy.txt”的链接。
图12中还展示了根目录元数据内容、子目录“dummy”的元数据内容、子目录“dummy”的属性内容与文件“dummy.txt”的属性内容。
根目录的元数据内容,是在KV存储设备中记录的同例如键UUID100对应的值。根目录元数据内容包括多条记录,每条记录描述了以根目录为所在目录的所有文件与子目录的每个的键(UUID)。图12中的根目录元数据内容,包括4条记录,第一条记录(第1行)指示了该目录(根目录)的父目录的UUID(UUID 100);第二条记录(第2行)指示了该目录(根目录)自己的UUID(UUID 100)。由于“根目录”没有父目录,在第一条记录中也记录了根目录自己的UUID。第三条记录(第3行)指示了根目录所包含的对象的UUID(UUID 101)第四条记录(第4行)指示了根目录所包含的对象的UUID(UUID 200)。
根据图12的实施例的目录元数据中,仅记录UUID,而不记录其他信息。
可以理解地,为根目录所包含的每个子目录以及每个文件,在根目录元数据内容中提供对应的记录。
目录“dummy”的元数据内容,是在KV存储设备中记录的同例如键UUID101对应的值。目录元数据内容包括多条记录,每条记录描述了以该目录为所在目录的所有文件与子目录的每个的UUID。图12中的子目录“dummy”的元数据内容,包括3条记录,第一条记录(第1行)指示了该子目录(子目录“dummy”)的父目录的UUID(UUID 100,即根目录的UUID);第二条记录(第2行)指示了该目录(目录“dummy”)自己的UUID(UUID 101);第3条记录(第3行)指示了该目录所包含的对象的UUID(UUID 201)。可以理解地,目录“dummy”所包含的每个子目录以及每个文件,在目录元数据内容中都有对应的记录。
目录“dummy”的目录属性内容,是在KV存储设备中记录的同例如键UUID101+P对应的值。目录属性内容,记录了自己的名字(“dummy”),自己的类型是“目录”,自己的相关属性、创建日期、权限等。可选地,目录属性内容还记录了文件系统中指向自己的一个或多个链接所在的目录的UUID(UUID列表)。可选地,在目录属性内容中,还记录自己所在的目录的名字。
可选地,目录属性内容的各条目中无须记录对应的UUID,而通过联合查询目录元数据内容得到对应的UUID。例如,目录元数据内容中的记录,同目录属性内容中的条目按顺序一一对应,从而根据目录属性内容的记录的序号,访问目录元数据内容中的对应记录,以得到对应的UUID。
根据图12所示的文件系统中,文件没有对应的元数据内容,文件有属性内容。文件“dummy.txt”的文件属性内容,是在KV存储设备中记录的同例如键UUID200+P对应的值。文件属性内容,记录了自己的名字(“dummy.txt”),自己的类型是“文件”,自己的相关属性、创建日期、权限等。可选地,文件属性内容还记录了文件系统中指向自己的一个或多个链接所在的目录的UUID(UUID列表)。依然可选地,在文件属性内容中,还记录自己所在的目录的名字。
为从根据图12的实施例的文件系统读取文件,向文件系统提供待读取文件的文件系统路径,包括文件所在目录与文件名。文件系统从接收的文件系统路径中获取文件所在目录,并识别目录是否存在。
为了识别目录是否存在,文件系统获取目录的父目录的元数据内容,从父目录的元数据内容获取该父目录所包含的所有对象的UUID。并对每个UUID生成对应的对象的属性内容的键(UUID+P),用UUID+P访问KV存储设备得到对应对象的属性内容,从属性内容中识别该属性内容,是否是待识别存在性的目录的属性内容。如果找到了待识别存在性的目录的属性内容,则确定目录存在。若遍历了父目录包含的所有对象的属性内容,依然找不到待识别存在性的目录,则确定目录不存在。
以及从根目录开始,通过逐级查找文件所在目录的各级父目录所包含的对象的属性内容,来识别待访问目录的各级父目录是否存在。根目录的UUID是例如已知的。
若待访问的文件所在的目录不存在,则文件系统向用户或应用指示出错,因为待访问的文件不存在。若待访问的文件所在的目录存在,获取目录所包含的所有对象的UUID,并对每个UUID生成对应的对象的属性内容的键(UUID+P),用UUID+P访问KV存储设备得到对应对象的属性内容,从属性内容中识别该属性内容是否是待访问文件的属性内容。
若找到了待访问文件的属性内容,则得到待访问文件的UUID,从而根据待访问文件的UUID访问KV存储设备,以读出待读出文件的内容。
为从根据图12的实施例的文件系统删除文件,向文件系统提供待删除文件的文件系统路径,包括文件所在目录与文件名。文件系统从接收的文件系统路径中获取文件所在目录,并识别目录是否存在。
若待访问的文件所在的目录不存在,则文件系统向用户或应用指示出错,因为待访问的文件不存在。若待访问的文件所在的目录存在,获取目录所包含的所有对象的UUID,并对每个UUID生成对应的对象的属性内容的键(UUID+P),用UUID+P访问KV存储设备得到对应对象的属性内容,从属性内容中识别该属性内容是否是待删除文件的属性内容。
若找到了待删除文件的属性内容,则得到待删除文件的UUID,从而根据待删除文件的UUID访问KV存储设备,以删除该文件的内容。
为从根据图12的实施例的文件系统重命名目录,向文件系统提供待重命名目录的文件系统路径,包括待重命名目录所在目录(父目录)、待重命名目录的目录名与新目录名。文件系统从接收的文件系统路径中获取父目录,并识别父目录是否存在。
若父目录不存在,则文件系统向用户或应用指示出错。若父目录存在,获取父目录所包含的所有对象的UUID,并对每个UUID生成对应的对象的属性内容的键(UUID+P),用UUID+P访问KV存储设备得到对应对象的属性内容,从属性内容中识别该属性内容是否是待重命名目录的属性内容。
若找到了待重命名目录的属性内容,则将其中记录的文件名修改为新文件名,即完成目录重命名操作。
根据上面描述的实施例,所属领域技术人员将容易得到根据图12的实施例的文件系统进行修改文件、创建链接、删除链接、创建目录、删除目录、列出目录内容等操作的实施方式。
图13A是根据本申请又一实施例的基于逻辑键的KV存储设备的示意图。根据图13A的实施例,对根据图12的实施例的文件系统进行加速。
参看图13A,运行文件系统的主机同KV存储设备相耦合。KV存储设备提供<键,值>服务,其中键为例如UUID,而值为例如根据图12的实施例的文件内容、目录元数据内容、目录属性内容或文件属性内容。
运行文件系统的主机中还维护排序表,排序表中记录了文件系统中存在的任何文件系统路径同用于KV存储设备的键(例如,UUID)的对应关系。通过排序表,将作为逻辑键的文件系统路径映射为键(UUID)。从而为访问文件系统(的文件内容、目录元数据内容、目录属性内容或文件属性内容),根据文件系统路径,从排序表中得以快速查询到文件系统路径对应的UUID,以省去遍历文件系统,寻找待访问的目标对象所在目录,并进一步遍历该目录得到待访问对象的UUID的过程。根据待访问对象的文件系统路径,也能便捷地获得待访问对象所在目录的文件系统路径,而从排序表中也能快速获得对应待访问对象所在目录的文件系统路径的UUID。排序表由运行文件系统的主机维护。文件系统根据获取的UUID,再访问KV存储设备,以访问访问文件系统的文件内容、目录属性内容或文件属性内容。
进一步地,对于引起修改文件系统路径的操作(例如,文件或目录的重命名),对排序表设置标志(例如,加锁),以指示同被修改的文件或目录对应的排序表节点待被修改,以及还指示待被修改的目录的所有子目录对应的排序表节点。在访问排序表时,若被访问的节点被设置了标志,则根据图12的实施例所示的方式根据待访问的文件系统路径遍历文件系统。以及还更新排序表,以反应对文件系统路径的修改。响应于排序表更新完成,撤销对排序表所设置的标志。有利的是以前缀树存储加速表,从而有利于对加速表节点的修改。
图13B是根据本申请另一实施例的基于逻辑键的KV存储设备的示意图。根据图13B的实施例,对根据图12的实施例的文件系统进行加速。
在一个实施方式中,KV存储设备提供可由主机的文件系统访问的排序表服务,将文件系统路径作为访问KV存储系统的键(或排序表服务的键),而将加速表中的节点的UUID作为KV存储系统的值(或排序表服务提供的对应于文件系统路径的值)。
运行于主机的文件系统通过KV存储设备访问排序表。为访问文件系统(的文件内容、目录元数据内容、目录属性内容或文件属性内容),向KV存储设备的排序表服务提供文件系统路径,KV存储设备的排序表服务输出文件系统路径对应的UUID作为响应,从而以省去遍历文件系统,寻找待访问的目标对象所在目录,并进一步遍历该目录得到待访问对象的UUID的过程。
运行于主机的文件系统基于获取的UUID,按照图12所示的实施例提供的方式访问文件内容、目录元数据内容、目录属性内容或文件属性内容,以提供文件系统服务。
进一步地,响应于创建文件或创建目录的操作,文件系统还向排序表中添加条目,添加的条目记录所创建的文件或目录的文件系统路径同新分配的UUID的对应关系。可由文件系统或KV存储设备分配UUID。
进一步地,响应于写文件的操作,文件系统从排序表获取同文件系统路径对应的UUID,更新KV存储设备中的同UUID对应的值。以及可选地,还更新KV存储设备中记录的同例如“UUID+P”对应的被更新文件的属性信息。
依然进一步地,响应于修改文件名的操作,文件系统还修改排序表中的条目,以从排序表中找到修改前的文件名对应的文件系统路径对应的条目,并更新其文件系统路径。
依然进一步地,响应于修改目录名的操作,文件系统修改排序表中的同被修改的目录对应的条目,还修改被修改目录所包含的所有对象在排序表中的条目。例如,对于根目录的子目录“dummy/”,其完整路径为“/dummy/”,其包括子目录“dummy1/”与文件“dummy1.txt”,响应于子目录“dummy/”的名字被修改为“dummyNew/”,除了要修改其自身在排序表中的记录,还修改子目录“dummy1/”与文件“dummy1.txt”在排序表中的记录,因为其文件系统路径发生了变化。由于排序表待修改的条目较多,需要一段时间处理,在修改完成前,排序表不响应对被修改条目的访问。例如,响应于要修改排序表的条目,对排序表加锁,或者对排序表的被修改的条目加锁,从而阻止对排序表的正被修改的条目的访问。而文件系统则根据图12的实施例所示的方式根据待访问的文件系统路径遍历文件系统(的目录元数据内容与目录属性内容)来获取同文件系统路径对应的UUID。
在又一种实施方式中,KV存储设备按<键,值>形式提供排序表服务。排序表的条目的文件系统路径作为访问KV存储系统的键,而排序表中的条目的UUID作为KV存储系统的值。
依然可选地,KV存储设备按用前缀树实现排序表。
根据本申请的实施例还提供了一种固态存储设备,该设备包括控制器与非易失存储器芯片,其中,控制器执行本申请实施例提供的任意一种处理方法。
根据本申请的实施例还提供了一种存储在可读介质上的程序,当被固态存储设备的控制器运行时,使得固态存储设备执行根据本申请实施例提供的任意一种处理方法。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种使用KV存储设备提供文件系统的方法,包括:
获取待访问的文件系统对象的文件系统路径;
获取同所述文件系统路径对应的键(K);
用所述键(K)访问KV存储设备中同所述键(K)对应的值(V);其中所述值是所述文件系统中同所述文件系统路径对应的对象。
2.根据权利要求1所述的方法,其中
所述KV存储设备提供排序表,所述文件系统通过访问KV存储设备的排序表获取同文件系统路径对应的键(K)。
3.根据权利要求1或2所述的方法,其中
所述KV存储设备以其<键(K),值(V)>存储服务提供排序表,其中排序表条目记录的文件系统路径作为KV存储设备的键(K),排序表条目的记录的同文件系统路径对应的键作为KV存储设备的值(V)。
4.根据权利要求1-3之一所述的方法,其中,
所述文件系统的对象包括文件内容与目录内容;
目录内容包括目录所包含的子目录的键(K)与名字,所包含的文件的键(K)与名字;
所述方法还包括:通过文件系统路径获取待访问的文件系统对象所在的第一目录;
通过所述第一目录的键(K)从KV存储设备访问所述第一目录的目录内容,从所述第一目录的目录内容中获取待访问的文件系统对象的键(K)。
5.根据权利要求1-3之一所述的方法,其中
所述文件系统的对象包括文件内容、目录元数据与目录属性内容;
目录元数据包括目录所包含的子目录的键(K),以及所包含的文件的键(K);
目录元数据包括目录所包含的子目录的名字,所包含的文件的名字;
所述方法还包括:通过文件系统路径获取待访问的文件系统对象所在的第一目录;
通过所述第一目录的键(K)获得所述第一目录的目录元数据的键与第一目录的目录属性的键;
从KV存储设备访问所述第一目录的目录元数据与目录属性,以获取待访问的文件系统对象的键(K)。
6.根据权利要求4所述的方法,还包括:
响应于在所述文件系统中创建文件,为待创建的文件分配用于KV存储设备的键(K),在所述第一目录的目录内容中记录为待创建文件所分配的键(K)与待创建文件的名字。
7.根据权利要求4或6所述的方法,还包括:
响应于在所述文件系统中修改文件系统对象的名字,更新所述第一目录的目录内容中记录的待修改文件系统对象的名字。
8.根据权利要求4、6或7所述的方法,还包括:
响应于在所述文件系统中删除目录,删除待删除目录的所有子目录,以及从待删除目录的目录内容中获取待删除目录所包含的所有文件的键(K),使用获取的键(K)从KV存储设备删除对应的文件内容,以及删除第一目录的目录内容中记录的对应于待删除目录的条目。
9.根据权利要求4所述的方法,还包括:
响应于在所述文件系统中创建文件,为待创建的文件分配用于KV存储设备的键(K),在所述第一目录的目录元数据中记录为待创建文件所分配的键(K),在所述第一目录的目录属性内容中记录为待创建文件的名字。
10.一种文件系统,包括存储在计算机可读介质中的程序,当所述程序被处理器执行时,实施根据权利要求1-9之一所述的方法。
CN201711474660.3A 2017-12-29 2017-12-29 提供逻辑键的kv存储设备及其方法 Pending CN110019016A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201711474660.3A CN110019016A (zh) 2017-12-29 2017-12-29 提供逻辑键的kv存储设备及其方法
PCT/CN2018/093285 WO2019128166A1 (zh) 2017-12-29 2018-06-28 Kv存储设备以及使用kv存储设备提供文件系统
US17/044,432 US20210248107A1 (en) 2017-12-29 2018-06-28 Kv storage device and method of using kv storage device to provide file system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711474660.3A CN110019016A (zh) 2017-12-29 2017-12-29 提供逻辑键的kv存储设备及其方法

Publications (1)

Publication Number Publication Date
CN110019016A true CN110019016A (zh) 2019-07-16

Family

ID=67187210

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711474660.3A Pending CN110019016A (zh) 2017-12-29 2017-12-29 提供逻辑键的kv存储设备及其方法

Country Status (1)

Country Link
CN (1) CN110019016A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN111580742A (zh) * 2019-08-30 2020-08-25 上海忆芯实业有限公司 使用加速器处理读(Get)/Put(写)请求的方法及其信息处理系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1983266A (zh) * 2005-07-01 2007-06-20 Qnx软件操作系统德国有限公司 闪速类介质中存储事务记录的文件系统
CN102413159A (zh) * 2011-03-15 2012-04-11 北京邮电大学 一种面向网络化操作系统的可信任在线存储系统
CN103902632A (zh) * 2012-12-31 2014-07-02 华为技术有限公司 键值存储系统中构建文件系统的方法、装置及电子设备
CN107066498A (zh) * 2016-12-30 2017-08-18 成都华为技术有限公司 键值kv存储方法和装置
CN107180092A (zh) * 2017-05-15 2017-09-19 中国科学院上海微系统与信息技术研究所 一种文件系统的控制方法、装置及终端

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1983266A (zh) * 2005-07-01 2007-06-20 Qnx软件操作系统德国有限公司 闪速类介质中存储事务记录的文件系统
CN102413159A (zh) * 2011-03-15 2012-04-11 北京邮电大学 一种面向网络化操作系统的可信任在线存储系统
CN103902632A (zh) * 2012-12-31 2014-07-02 华为技术有限公司 键值存储系统中构建文件系统的方法、装置及电子设备
CN107066498A (zh) * 2016-12-30 2017-08-18 成都华为技术有限公司 键值kv存储方法和装置
CN107180092A (zh) * 2017-05-15 2017-09-19 中国科学院上海微系统与信息技术研究所 一种文件系统的控制方法、装置及终端

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111580742A (zh) * 2019-08-30 2020-08-25 上海忆芯实业有限公司 使用加速器处理读(Get)/Put(写)请求的方法及其信息处理系统
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN110837584B (zh) * 2019-10-18 2022-10-04 中山大学 一种分块并行构造后缀数组的方法及系统

Similar Documents

Publication Publication Date Title
WO2018064962A1 (zh) 数据存储方法、电子设备和计算机非易失性存储介质
US10242050B2 (en) Database caching in a database system
CN103812939B (zh) 一种大数据存储系统
CN110119425A (zh) 固态驱动器、分布式数据存储系统和利用键值存储的方法
CN108804510A (zh) 键值文件系统
CN106294190B (zh) 一种存储空间管理方法及装置
CN106874383A (zh) 一种分布式文件系统元数据的解耦合分布方法
JP5589205B2 (ja) 計算機システム及びデータ管理方法
WO2019128166A1 (zh) Kv存储设备以及使用kv存储设备提供文件系统
KR20160046729A (ko) 키-값 저장 엔진 및 그것의 효과적인 키 충돌 관리 방법
JP2017504924A (ja) ファイルシステムのコンテンツベースの編成
CN104123359A (zh) 一种分布式对象存储系统的资源管理方法
CN104778192B (zh) 表示可内容寻址存储系统的目录结构
CN102609446B (zh) 一种分布式Bloom过滤系统及其使用方法
US9183212B2 (en) Representing directory structure in content-addressable storage systems
CN102982151B (zh) 多个物理文件合并为一个逻辑文件的方法
US20200117543A1 (en) Method, electronic device and computer readable storage medium for data backup and recovery
CN104424219B (zh) 一种数据文件的管理方法及装置
CN110347852A (zh) 嵌入横向扩展键值存储系统的文件系统及文件管理方法
CN100424699C (zh) 一种属性可扩展的对象文件系统
WO2014110940A1 (en) A method, apparatus and system for storing, reading the directory index
CN104054071A (zh) 访问存储设备的方法和存储设备
CN102567415B (zh) 一种数据库的控制方法和装置
CN110275838A (zh) Kv存储设备的地址转换及其加速器
CN107679182A (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
CB02 Change of applicant information

Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing

Applicant after: Beijing yihengchuangyuan Technology Co.,Ltd.

Address before: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing

Applicant before: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd.

CB02 Change of applicant information