CN108804510A - 键值文件系统 - Google Patents
键值文件系统 Download PDFInfo
- Publication number
- CN108804510A CN108804510A CN201810358147.6A CN201810358147A CN108804510A CN 108804510 A CN108804510 A CN 108804510A CN 201810358147 A CN201810358147 A CN 201810358147A CN 108804510 A CN108804510 A CN 108804510A
- Authority
- CN
- China
- Prior art keywords
- file
- key
- catalogue
- data
- file system
- 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/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- 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/13—File access structures, e.g. distributed indices
-
- 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/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- 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/1724—Details of de-fragmentation performed by the file system
-
- 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/18—File system types
- G06F16/185—Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Software Systems (AREA)
Abstract
一种文件系统包括:应用编程接口(API),其配置为提供对在主机上运行的应用的文件系统访问;键值文件系统,其配置为将文件或目录表示为包括一个或多个键值对的索引节点;虚拟文件系统,其配置为将从应用接收的文件系统调用引导到键值文件系统;以及键值API,其配置为提供对存储在数据存储设备中的数据的文件系统访问。索引节点中包含的每个键值对都包括作为键的文件或目录的名称以及作为值的与文件或目录相关联的容器的标识符。文件的数据存储在数据存储设备中,被分成一个或多个固定大小的数据块,并且与文件的数据相关联的一个或多个数据块中的每一个数据块都可使用一个或多个键值对在键值文件系统内访问到。
Description
相关申请的交叉引用
本申请要求于2017年4月26日提交的美国临时专利申请第62/490,297号和2017年7月10日提交的美国非临时专利申请第15/645,916号的权益和优先权,这些专利申请的全部内容通过引用的方式并入本文中。
技术领域
本公开总体上涉及一种用于数据存储系统的文件系统,更具体地涉及一种利用键值对来表示文件和目录的文件系统。
背景技术
计算机系统的文件系统采用了名称空间,并对文件系统的文件和目录进行管理。这种名称空间允许在计算机系统上运行的应用通过遍历目录以到达存储在数据存储设备中的所需文件来实现对数据的访问。
名称空间还维护高速缓存并组织存储在数据存储设备上的数据,由此使得应用能更快地访问数据。例如,包含许多文件的大型目录可以分布在数据存储设备上的许多数据块中。对数据块进行管理需要的是多级元数据。若要查找大型目录中的条目(例如,文件或目录),名称空间需要遍历大型目录的所有元数据。因此,遍历大型目录涉及到对存储条目的数据存储设备执行多次输入/输出(I/O)操作。
文件系统还对脏数据加以维护。文件系统通常会向数据存储设备执行多次往返,以便为脏数据和高速缓存中的关联元数据分配数据块。通过在主机上运行的同步线程,脏数据块定期地被冲刷到数据存储设备。主机可以采用各种算法以最佳方式将脏数据从高速缓存冲刷到数据存储设备。文件系统还可以结合元数据来管理空闲的数据块和使用过的数据块。文件系统的性能取决于写入数据存储设备的数据的效率。文件系统可以高效地分配和释放数据存储设备上的数据块,从而实现最佳性能。
当数据被写入到数据存储设备上时,文件系统可以发生碎片化。发生了碎片化的文件系统可以按照对数据存储设备执行随机I/O操作的碎片化模式来运行。某些文件系统可以支持数据碎片整理以及连续数据块中的数据重组,进而提高I/O性能。然而,传统的文件系统消耗了大量的主机中央处理单元(CPU)周期来执行数据块管理以及存储在数据存储设备中的数据的碎片整理。
发明内容
根据一个实施例,一种文件系统包括:应用编程接口(API),其配置为提供对在主机上运行的应用的文件系统访问;键值文件系统,其配置为将文件或目录表示为包括一个或多个键值对的索引节点;虚拟文件系统,其配置为将从应用接收的文件系统调用引导到键值文件系统;以及键值API,其配置为提供对存储在数据存储设备中的数据的文件系统访问。索引节点中包含的每个键值对都包括作为键的文件或目录的名称以及作为值的与文件或目录相关联的容器的标识符。文件的数据存储在数据存储设备中,被分成一个或多个固定大小的数据块,并且与文件的数据相关联的一个或多个数据块中的每一个数据块都可使用一个或多个键值对在键值文件系统内访问到。
根据另一个实施例,一种方法包括:将文件或目录存储在数据存储设备中作为包括键值文件系统中的一个或多个键值对的索引节点;从在主机上运行的应用接收文件系统访问请求;将文件系统访问请求引导至对数据存储设备的文件系统调用;以及提供对存储在数据存储设备中的数据的文件系统访问。索引节点中包含的每个键值对都包括作为键的文件或目录的名称以及作为值的与文件或目录相关联的容器的标识符。文件的数据存储在数据存储设备中,被分成一个或多个固定大小的数据块,并且与文件的数据相关联的一个或多个数据块中的每一个数据块都可使用一个或多个键值对在键值文件系统内访问到。
现在将参考附图更具体地描述并在权利要求中指出包括各种新颖的实施细节和事件组合的上述及其他优选特征。将会理解的是,本文描述的特定系统和方法仅通过说明方式示出,并不具有限制性。如本领域技术人员将会理解的,在不脱离本公开的范围的情况下,可以在各种和多个实施例中采用本文所描述的原理和特征。
附图说明
被包括作为本说明书的一部分的附图示出了当前优选的实施例,并且与上面给出的一般性描述和下面给出的优选实施例的详细描述一起用于解释和教导本文所描述的原理。
图1示出了根据一个实施例的示例性键值文件系统的各层;
图2示出了根据一个实施例的示例性键值存储器的框图;
图3示出了根据一个实施例的用于容器目录的示例性键值存储器;
图4示出了根据一个实施例的包括内联目录的示例性键值存储器;
图5示出了根据一个实施例的包括容器文件的示例性键值存储器;
图6示出了根据一个实施例的包括内联文件的示例性键值存储器;以及
图7示出了根据一个实施例的示例性键值存储器中的分布式数据和路径遍历。
附图并不一定按比例进行绘制,并且具有类似结构或功能的元件在整个附图中通常用相同的附图标记来表示。附图仅旨在有助于描述本文所述的各种实施例。附图没有描述本文所公开的教导的每一个方面,并且不会限制权利要求的范围。
具体实施方式
本文公开的每个特征和教导可以单独地或者与其他特征和教导相结合地使用来提供一种键值文件系统以及一种使用该键值文件系统来管理文件和目录的方法。参考附图进一步详细描述了单独地和组合地利用许多这些附加特征和教导的代表性示例。此详细描述仅旨在向本领域技术人员教导用于实践本教导的各方面的更多细节,并且不期望限制权利要求的范围。因此,下面在详细描述中公开的各特征的组合对于以最广泛含义来实践教导而言可能不是必需的,而是仅被教导为描述本教导的特定代表性示例。
在下面的描述中,仅出于解释的目的,阐述了特定的术语来提供对本公开的透彻理解。然而,对于本领域技术人员而言将会是显而易见的是,实践本公开的教导不需要这些特定细节。
本文的详细描述的某些部分是按照对计算机存储器内数据位的操作的算法和符号表示来呈现。这些算法描述和表示被数据处理领域的技术人员用来将他们工作的实质有效传达给本领域的其他技术人员。算法在这里通常被认为是导致期望结果的前后一致的步骤序列。这些步骤是那些需要对物理量进行物理操纵的步骤。通常情况下但并不是一定地,这些量采用的形式是能够被存储、传输、组合、比较和以其他方式操纵的电信号或磁信号。主要出于常见用途的原因,有时将这些信号称为比特、值、元素、符号、字符、术语、数字等被证明是方便的。
但应该记住,所有这些术语和类似术语都与适当的物理量相关联,并且仅仅是适用于这些数量的便利标签。除非作出特别陈述,否则从以下讨论中显而易见的是,将认识到在整个说明书中,利用诸如“处理”或“计算(computing)”或“计算(calculating)”或“确定”或“显示”等术语的讨论涉及到计算机系统或类似电子计算设备的动作和过程,所述计算机系统或类似电子计算设备将在计算机系统的寄存器和存储器内表示为物理(电子)量的数据操纵并转换为在计算机系统存储器或寄存器内或其他这种信息存储、传输或显示设备内类似地表示为物理量的其他数据。
此外,代表性示例和从属权利要求的各种特征可以按照未具体地且明确地列举的方式进行组合,以便提供本教导的其他有用实施例。还明确指出的是,出于原始公开的目的以及出于限制所要求保护的主题的目的,实体组的所有值范围或指示都公开了每个可能的中间值或中间实体。还明确指出的是,附图中所示组件的尺寸和形状被设计成便于理解如何实践本教导,但不旨在限制示例中所示的尺寸和形状。
本公开描述了一种在数据存储设备上操作的键值文件系统(KVFS)。在此,操作KVFS的数据存储设备被称为键值(KV)存储器、KV驱动器或KV固态驱动器(SSD)。本公开进一步描述了一种使用KV名称空间来组织和管理KV存储器中的数据的方法。数据存储空间将文件和目录的数据存储在包含在一个或多个索引节点中的一个或多个键值对中,并使用这些键值对来对文件系统的目录和文件进行高效管理。
本KVFS可以将数据块管理从主机CPU卸载到KV存储器。可以在本KVFS中减少用于访问存储在KV存储器中的数据的I/O操作。主机CPU无需分配和释放KV存储器的数据块。另外,KVFS无需显式地执行碎片整理来提高KV存储器中的数据存储效率。
本KVFS维护分层数据结构,这些分层数据结构留存在KV存储器上,用于组织KV名称空间。通过在KV存储器中使用容器,本KVFS可以在单次I/O操作中查找目录或该目录内的文件。为了获得文件,常规的文件系统需要遍历多级元数据,从而导致了多次I/O操作。
常规系统以间接块的形式维护元数据,以便支持大文件。支持大文件涉及到维护间接块的高速缓存。截断文件涉及到遍历所有间接块以释放它们,从而导致了从主机到数据存储设备的多次往返。本KVFS在KV存储器中提供容器并将截断操作完全卸载到KV存储器。本KVFS可以在单次I/O操作中执行截断操作。
图1示出了根据一个实施例的示例性键值文件系统(KVFS)的各层。KVFS堆栈110包括Unix便携式操作系统接口(POSIX)应用编程接口(API)111、虚拟文件系统(VFS)112、键值文件系统(KVFS)113和键值API(KAPI)114。尽管本示例示出了KVFS堆栈110包括POXIS API111,由此暗示出底层操作系统(OS)为Unix,但应该理解的是,除Unix以外的操作系统可以包括本KVFS 113而不会偏离本公开的范围。
KVFS 113可以使用提供与KV存储器120的接口的KVAPI 114来访问存储在KV存储器120中的数据。KVAPI 114支持针对存储在KVFS堆栈110中的每个目录和文件生成唯一标识符的接口。这种唯一标识符可以用作索引节点名称或索引节点编号。在一个实施例中,KVAPI 114可以被实现为在KVFS 113内运行以访问存储在KV存储器120上的数据的设备驱动程序。根据KV存储器120的类型,一个或多个KVAPI 114可以由KVFS堆栈110提供。
KVFS 113实现由操作系统(如Linux)暴露的不同的VFS接口,并且在操作系统的内核(如Linux内核)中运行。KVFS集成到现有的文件系统堆栈中,并使用KVAPI 114来访问KV存储器120。符合POSIX的应用130可以通过POSIXAPI 111在VFS 112上运行。应用130可以产生标准VFS调用,从而通过KVAPI 114实现对KV存储器120的访问。KVFS堆栈110允许应用130使用标准VFS调用来通过POSIX API 111访问KV存储器120,因此无需对改变应用接口。应用130产生的目的地为KV存储器120的VFS调用可以被引导至KVFS 113和KVAPI 114。
根据一个实施例,KVFS 113可以构造并管理索引节点,以表示KVFS堆栈110中的文件或目录。KVFS堆栈110中的每个文件或目录可以由对应的索引节点来表示。根据一个实施例,KVFS 113使用键值对来表示索引节点。在文件的情况下,索引节点可以表示键本身。对索引节点的查找就是对键的查找。
根据一个实施例,还可以将索引节点的属性存储在对应于索引节点的键值对的键值中。在创建索引节点时,属性的大小可以是固定的。取回索引节点涉及到取回与索引节点相对应的键值对和读取该键值对的键值。如果索引节点的属性存储在键值中,则在取回键值对时也可以读取索引节点的属性。将索引节点的属性和键值存储在同一键值中可以提高KVFS堆栈110的性能。备选地,可以将索引节点的属性存储在与对应于索引节点的键值不同的键值中。在这种情况下,取回属性可以涉及到对与索引节点本身相对应的第一键值对和对存储属性的第二键值对的两次单独访问。
根据一个实施例,表示索引节点的键值对包括KVFS堆栈110中的名称和索引节点,即(名称,索引节点)。名称是用户创建的文件/目录名称,而索引节点是KVFS堆栈110所分配的键,如上所述。目录键值对的名称可以以多种格式和字段进行存储。为了便于解释,在以下示例中使用包括单个名称条目的目录条目。
图2示出了根据一个实施例的示例性键值存储器的框图。KV存储器220可以包括多个容器250a和250b,并且每个容器可以将数据存储在多个键值对中。某些键值对可以是不属于任何容器的全局键值对。任何两个容器250a和250b都可以具有相同的键。
KVFS堆栈110使用包括名称空间的文件系统元数据。名称空间包括目录和文件。KVFS堆栈110对块元数据进行管理(其中包括空闲块的管理),并且将元数据块管理卸载到KV存储器120。
根目录是KVFS堆栈110中作为已知键的特殊目录。根目录是对KVFS堆栈110的文件或目录进行路径遍历的起点。
KVFS堆栈110可以将目录作为键值对或者包括多个键值对的容器进行管理。根据一个实施例,KVFS堆栈110支持内联目录和容器目录,这具体取决于目录中条目的数量。
图3示出了根据一个实施例的用于容器目录的示例性键值存储器。在本示例中,KV存储器320包括三个索引节点350a、350b和350c。每个索引节点350a、350b和350c表示包含一个以上子目录的容器目录。应该理解,在不背离本公开的范围的情况下,KV存储器320中可以存在有任何数量的容器目录。在一些实施例中,KV存储器320可以包括容器目录和内联目录的混合,如图4所示。
容器目录中的目录的属性存储在特殊的键值对中。实际属性存储在键值对的值部分中。容器目录的属性值可以包括与容器目录有关的各种参数,例如许可、所有者、组等。
根据一个实施例,当目录包含大量条目(如子目录和文件)时,本KVFS使用容器目录(如容器目录350a、350b和350c)。表示为KVFS的索引节点(如索引节点350a、350b或350c)的容器目录存储在KV存储器320中。包含在容器目录中的文件和子目录可以被存储为键值对。键值对(键、值)包括键和对应的值。例如,键值对的键是文件或目录(或子目录)的名称,而键值对的值是与该文件或目录相关联的容器的标识符。为了访问KVFS中的文件,KVFS可以执行I/O操作来查找与待访问的文件或目录的名称相对应的容器。根据访问文件所需的条目数量,可能需要执行相同数量的I/O操作。例如,如果文件存储在KVFS的root/dir1/dir11中,则需要三次I/O操作来访问文件,这三次I/O操作包括针对目录根(root)、dir1和dir11各自的I/O操作。无论为了到达目标文件或目录的条目数量如何,查找操作都可以被卸载到KV存储器320。
对于存储在容器中的各个键值对,KVFS使用它们的名称来加以暴露。键值对可以是另一个容器(如子目录的容器)的条目。键值对的名称是用作可以在KVFS的名称空间中进行搜索的键,并且键值对的值用于存储与对应的键有关的信息。值可以是在KVFS的名称空间中可标识出的索引节点的标识符。目录属性可以作为一个特殊键值对存储在容器中。每个容器目录可以包括一个或多个特殊键值对来存储容器的属性。
参考图3,索引节点350a表示容器C0。容器C0在KVFS的名称空间中被标识为“Dir0”。目录Dir0包括多个键值对,其中包括自身的属性键值以及包括在目录Dir0中的两个子目录Dir1和Dir2的另外两个键值对。子目录Dir1的键值对具有作为键的名称“Dir1”和作为值的“容器C1”。容器C1对应于KVFS中的另一个索引节点350b。子目录Dir2的键值对具有作为键的名称“Dir2”和作为值的“容器C2”。容器C2对应于KVFS中的另一个索引节点350c。
容器C1在KVFS的名称空间中被标识为“Dir1”。容器C1包括多个键值对,其中包括自身的属性键值以及两个子目录Dir11和Dir12的另外两个键值对。子目录Dir11的键值对具有作为键的名称“Dir11”和作为值的“容器C11”。子目录Dir12的键值对具有作为键的名称“Dir12”和作为值的“容器C12”。容器C11和C12对应于KVFS中的另一个索引节点(未示出)。
容器C2在KVFS的名称空间中被标识为“Dir2”。容器C2包括多个键值对,其中包括自身的属性键值以及两个子目录Dir21和Dir22的另外两个键值对。子目录Dir21的键值对具有作为键的名称“Dir21”和作为值的“容器C21”。子目录Dir22的键值对具有作为键的名称“Dir22”和作为值的“容器C22”。容器C21和C22对应于KVFS中的另一个索引节点(未示出)。
图4示出了根据一个实施例的包括内联目录的示例性键值存储器。在本示例中,KV存储器420包括单个索引节点450。索引节点450表示在KVFS的名称空间中被标识为“Dir0”的内联目录。应该理解,在不背离本公开的范围的情况下,KV存储器420中可以存在有任何数量的目录容器。在一些实施例中,KV存储器420可以包括内联目录和容器目录的混合。
根据一个实施例,当目录中的条目数量较小时,KVFS可以使用内联目录。内联目录存储在单个键值对中。键值对的名称是内联目录Dir0的可以在KVFS的名称空间中被搜索的键。键值对的值可以保存包括内联目录Dir0的属性和多个键值对的数据451。数据451中的键值对可以包括内联目录Dir0的属性以及内联目录Dir0中包括的每个子目录(如Dir11、Dir12和Dir13)的一个或多个键值对。例如,内联目录Dir0的属性存储在数据451的前512个字节中。键值对的值对应于子目录Dir11、Dir12和Dir13的容器C11、C12和C13。容器C11、C12和C13对应于KVFS中的另一个索引节点(未示出)。
当创建内联目录时,可以包括在内联目录Dir0中的条目的最大数量可以是固定的。KVFS通过查找键值对的值来查找索引节点(如文件和目录)的名称,进而找出与该名称相关联的索引节点。索引节点可以是内联目录Dir0中的文件或子目录的键。可以通过读取文件或子目录的属性来确定该文件或子目录的类型。在内联目录Dir0中查找名称是有界的,这是因为内联目录中的条目的最大数量是固定的。
根据一个实施例,当条目数量超过阈值大小时,可以将内联目录转换为容器目录。类似地,当条目数量减少到阈值大小以下时,可以将容器目录转换为内联目录。例如,阈值大小是64。
根据一个实施例,本KVFS支持内联文件和容器文件,具体取决于文件的大小。大文件可以存储为容器文件,而小文件可以存储为内联文件。
图5示出了根据一个实施例的包括容器文件的示例性键值存储器。名为“File00”的容器文件是KVFS的索引节点。容器560可以保存与包括属性的容器文件File00相关联的所有数据以及存储该数据的一个或多个数据块。容器文件File00的属性作为特殊键存储在容器文件560的开始处。容器文件File00的数据可以存储在一个或多个键值对中。每个键值对包括作为键的块编号和作为值的关联数据。例如,如果文件系统块的大小是4kB,则块0可以保存0-4kB的数据,块1可以保存4kB-8kB的数据,以此类推。随着容器文件大小的逐渐变大,可以在容器560中添加更多的块。根据一个实施例,每个键值对的值可以指向同一KV存储器520或不同KV存储器上的不同容器中的另一个键。
根据一个实施例,KV存储器520支持对容器文件File00的键值对的更新。容器文件File00的文件截断可以被完全卸载到KV存储器520。当截断容器文件File00的数据时,KVFS可以删除容器内的数据和关联块。在这种情况下,无需遍历键来截断或删除容器文件File00。当在多个文件容器或多个KV存储器中截断在容器中包括数据块的容器文件的数据时,可以通过访问包含截断数据的每个数据块来删除截断数据。删除或截断数据块的最大遍历数由访问数据块的I/O操作的数量决定。
图6示出了根据一个实施例的包括内联文件的示例性键值存储器。内联文件File00存储在KV存储器620的容器文件660中。容器文件660是KVFS的索引节点。与内联目录类似,内联文件File00可以存储在单个键值对中。键值对的键是索引节点名称“File00”,并且键值对的值保存与内联文件相关联的数据661。节点的属性存储在数据661的开始处,并且内联文件File00的数据存储在固定大小的一个或多个键值对中。根据文件File00的大小,文件File00的数据可以被分成多个数据块。包含在数据661中的每个键值对可以包括作为键的数据块的名称以及作为值的与数据块相关联的数据。例如,内联文件File00的数据被分成两个数据块Block0和Block1。Block0存储有键“kdata0”,而Block1存储有键“kdata1”。内联文件中数据块的大小可以是固定的,如4kB。在这种情况下,Block0保存0-4kB的数据,而Block1保存4kB-8kB的数据。
根据一个实施例,可以将超过预定文件大小(例如,1MB)的内联文件(或者,固定大小数据块的条目数量超过阈值)转换为容器文件。类似地,文件大小减小到比预定文件大小更小的容器文件可以被转换为内联文件。
图7示出了根据一个实施例的示例性键值存储器中的分布式数据和路径遍历。应用发布文件访问命令,以通过POSIX API 711访问存储在KV存储器720a中的File01。来自应用的文件访问命令引发VFS 712中的通用VFS调用。VFS 712将VFS调用引导到KVFS 713中的KVFS调用。在KVFS 713中,所请求的文件File01存储在目录Root/Dir0中。
KVFS 713包括索引节点750、751、752和753。索引节点750对应于KVFS的包含三个条目的根目录,这三个条目包括两个目录Dir0和Dir1以及文件File1。根的子目录Dir0包含三个条目,其包括两个目录Dir01和Dir02以及一个文件File01。根的子目录Dir01对应于索引节点753,并且包含属性,但却没有包含条目。所请求的文件File01存储在索引节点751中。根据一个实施例,索引节点750是包括子目录Dir0和Dir1的键值对在内的容器目录。
目录内的查找可以被完全卸载到KV存储器720。I/O操作的数量是有界的并且等于遍历路径中的子目录的数量。在本示例中,两次I/O操作可以到达所请求的文件File01,其中包括对索引节点750的I/O操作和对索引节点751的另一次I/O操作。相反,传统文件系统中的路径遍历可能采取多次I/O操作,这具体取决于多种因素,例如路径中每个子目录中的条目数量以及元数据的管理方式。为了找出路径中的下一个索引节点而对索引节点中的条目进行的查找被卸载到KV存储器720。通过有效地排列和管理存储在KV存储器中的键,可以进一步改进KVFS的性能。
与应用对File01的文件访问命令相对应的KVFS调用使得能够访问存储File01的实际数据的KV存储器720a。KVAPI 714将文件访问接口提供给KV存储器720a。
根据一个实施例,本KVFS不需要元数据来管理数据块。使用键值对来将块管理完全卸载到KV存储器。KV存储器可以通过将文件的数据存储在同一容器中的一个或多个数据块中来有效地管理数据块。在一些实施例中,文件的数据块可以存储在一个以上的容器或一个以上的KV存储器中。例如,可以将复制数据存储在在地理上与存储原始数据的KV存储器分开的KV存储器中。在这种情况下,KVFS的索引节点可以具有键值元组,例如(KV存储器id、键、容器id)。这样便允许KVFS跨越由KV存储器ID识别出的多个KV存储器。
根据一个实施例,一种文件系统包括:应用编程接口(API),其配置为提供对在主机上运行的应用的文件系统访问;键值文件系统,其配置为将文件或目录表示为包括一个或多个键值对的索引节点;虚拟文件系统,其配置为将从应用接收的文件系统调用引导到键值文件系统;以及键值API,其配置为提供对存储在数据存储设备中的数据的文件系统访问。索引节点中包含的每个键值对都包括作为键的文件或目录的名称以及作为值的与文件或目录相关联的容器的标识符。文件的数据存储在数据存储设备中,被分成一个或多个固定大小的数据块,并且与文件的数据相关联的一个或多个数据块中的每一个数据块都可使用一个或多个键值对在键值文件系统内访问到。
API可以是Unix便携式操作系统接口(POSIX)API,并且文件系统的操作系统可以是Linux。
索引节点的属性可以存储在一个或多个键值对的键值对中。
根据在目录的容器中包含的键值对条目的数量,目录可以由容器目录或内联目录来表示。
内联目录的容器可以包括单个键值对。此单个键值对的值可以包括内联目录的属性以及与内联目录的一个或多个子目录或存储在内联目录中的一个或多个文件相对应的一个或多个键值对。
当条目数量超过预定大小时,可以将内联目录转换为容器目录,并且当条目数量减少到预定大小以下时,可以将容器目录转换为内联目录。
根据在文件的容器中包含的键值对条目的数量,文件可以由容器文件或内联文件表示。
容器文件的容器可以包括与容器文件的数据的一个或多个数据块相对应的一个或多个键值对。
内联文件的容器可以包括一个或多个键值对,并且一个或多个键值对中的至少一个键值对可以包括内联文件的名称以及与内联文件相关联的数据。至少一个键值对的数据包括与存储内联文件的数据的数据块相对应的一个或多个键值对。
当内联文件的容器中的条目数量超过预定大小时,可以将内联文件转换为容器文件,并且当条目数量减少到预定大小以下时,可以将容器文件转换为内联文件。
文件可以存储在多个数据存储设备中,并且索引节点可以包括一个或多个键值元组,该一个或多个键值元组包括数据存储设备的标识符、容器的标识符和键。
文件在键值文件系统内的单次I/O操作中可以是可截断的或可删除的,无需遍历与存储有文件的一个或多个目录相对应的各元数据层。
根据另一个实施例,一种方法包括:将文件或目录存储在数据存储设备中作为包括键值文件系统中的一个或多个键值对的索引节点;从在主机上运行的应用接收文件系统访问请求;将文件系统访问请求引导至对数据存储设备的文件系统调用;以及提供对存储在数据存储设备中的数据的文件系统访问。索引节点中包含的每个键值对都包括作为键的文件或目录的名称以及作为值的与文件或目录相关联的容器的标识符。文件的数据存储在数据存储设备中,被分成一个或多个固定大小的数据块,并且与文件的数据相关联的一个或多个数据块中的每一个数据块都可使用一个或多个键值对在键值文件系统内访问到。
可以通过POSIX API接收来自应用的文件系统访问请求,并且键值文件系统的操作系统可以是Linux。
索引节点的属性可以存储在一个或多个键值对的键值对中。
根据在目录的容器中包含的键值对条目的数量,目录可以由容器目录或内联目录来表示。
内联目录的容器可以包括单个键值对。此单个键值对的值可以包括内联目录的属性以及与内联目录的一个或多个子目录或存储在内联目录中的一个或多个文件相对应的一个或多个键值对。
当条目数量超过预定大小时,可以将内联目录转换为容器目录,并且当条目数量减少到预定大小以下时,可以将容器目录转换为内联目录。
根据在文件的容器中包含的键值对条目的数量,文件可以由容器文件或内联文件表示。
容器文件的容器可以包括与容器文件的数据的一个或多个数据块相对应的一个或多个键值对。
内联文件的容器可以包括一个或多个键值对,并且一个或多个键值对中的至少一个键值对可以包括内联文件的名称以及与内联文件相关联的数据。至少一个键值对的数据包括与存储内联文件的数据的数据块相对应的一个或多个键值对。
当内联文件的容器中的条目数量超过预定大小时,可以将内联文件转换为容器文件,并且当条目数量减少到预定大小以下时,可以将容器文件转换为内联文件。
文件可以存储在多个数据存储设备中,并且索引节点可以包括一个或多个键值元组,该一个或多个键值元组包括数据存储设备的标识符、容器的标识符和键。
该方法可以进一步包括:在键值文件系统内的单次I/O操作中截断或删除文件,无需遍历与其内存储有文件的一个或多个目录相对应的各元数据层。
以上已经描述了上述示例性实施例来说明实现一种键值文件系统以及一种使用该键值文件系统来管理文件和目录的方法的各种实施例。本领域的普通技术人员将会想到对所公开的示例性实施例的各种修改和偏离。旨在落入本发明范围内的主题在以下权利要求中进行阐述。
Claims (10)
1.一种文件系统,包括:
应用编程接口(API),配置为提供对在主机上运行的应用的文件系统访问;
键值文件系统,配置为将文件或目录表示为包括一个或多个键值对的索引节点;
虚拟文件系统,配置为将从所述应用接收的文件系统调用引导到所述键值文件系统;以及
键值API,配置为提供对存储在数据存储设备中的数据的所述文件系统访问,
其中所述索引节点中包含的每个键值对都包括作为键的所述文件或所述目录的名称以及作为值的与所述文件或所述目录相关联的容器的标识符,并且
其中所述文件的数据存储在所述数据存储设备中,被分成一个或多个固定大小的数据块,并且与所述文件的数据相关联的所述一个或多个数据块中的每一个数据块都能够使用所述一个或多个键值对在所述键值文件系统内访问到。
2.根据权利要求1所述的文件系统,其中所述API是Unix便携式操作系统接口(POSIX)API,并且所述文件系统的操作系统是Linux。
3.根据权利要求1所述的文件系统,其中所述索引节点的属性存储在所述一个或多个键值对的键值对中。
4.根据权利要求1所述的文件系统,其中根据在所述目录的所述容器中包含的键值对条目的数量,所述目录由容器目录或内联目录来表示。
5.根据权利要求4所述的文件系统,其中所述内联目录的所述容器包括单个键值对,并且其中所述单个键值对的所述值包括所述内联目录的属性以及与所述内联目录的一个或多个子目录或存储在所述内联目录中的一个或多个文件相对应的一个或多个键值对。
6.根据权利要求4所述的文件系统,其中当所述条目的数量超过预定大小时,将所述内联目录转换为所述容器目录,并且当所述条目的数量减少到所述预定大小以下时,将所述容器目录转换为所述内联目录。
7.根据权利要求1所述的文件系统,其中根据在所述文件的所述容器中包含的键值对条目的数量,所述文件由容器文件或内联文件来表示。
8.根据权利要求7所述的文件系统,其中所述容器文件的所述容器包括与所述容器文件的数据的一个或多个数据块相对应的一个或多个键值对。
9.根据权利要求7所述的文件系统,其中所述内联文件的所述容器包括一个或多个键值对,并且所述一个或多个键值对中的至少一个键值对包括所述内联文件的名称以及与所述内联文件相关联的数据,并且其中所述至少一个键值对的数据包括与存储所述内联文件的数据的数据块相对应的一个或多个键值对。
10.一种方法,包括:
将文件或目录在数据存储设备中存储为键值文件系统中的包括一个或多个键值对的索引节点;
从在主机上运行的应用接收文件系统访问请求;
将所述文件系统访问请求引导至对所述数据存储设备的文件系统调用;以及
提供对存储在所述数据存储设备中的数据的所述文件系统访问,
其中所述索引节点中包含的每个键值对都包括作为键的所述文件或所述目录的名称以及作为值的与所述文件或所述目录相关联的容器的标识符,并且
其中所述文件的数据存储在所述数据存储设备中,被分成一个或多个固定大小的数据块,并且与所述文件的数据相关联的所示一个或多个数据块中的每一个数据块都能够使用所述一个或多个键值对在所述键值文件系统内访问到。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762490297P | 2017-04-26 | 2017-04-26 | |
US62/490,297 | 2017-04-26 | ||
US15/645,916 US11030155B2 (en) | 2017-04-26 | 2017-07-10 | Key value file system |
US15/645,916 | 2017-07-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108804510A true CN108804510A (zh) | 2018-11-13 |
CN108804510B CN108804510B (zh) | 2023-09-12 |
Family
ID=61070908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810358147.6A Active CN108804510B (zh) | 2017-04-26 | 2018-04-19 | 键值文件系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11030155B2 (zh) |
KR (1) | KR102615616B1 (zh) |
CN (1) | CN108804510B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656886A (zh) * | 2018-12-26 | 2019-04-19 | 百度在线网络技术(北京)有限公司 | 基于键值对的文件系统实现方法、装置、设备和存储介质 |
CN110647568A (zh) * | 2019-09-16 | 2020-01-03 | 金色熊猫有限公司 | 一种图数据库数据转化为编程语言数据方法及装置 |
CN111078139A (zh) * | 2019-11-14 | 2020-04-28 | 北京迈格威科技有限公司 | 一种实现s3标准对象存储接口的方法及装置 |
CN113535857A (zh) * | 2021-08-04 | 2021-10-22 | 阿波罗智联(北京)科技有限公司 | 数据同步方法及装置 |
TWI828901B (zh) * | 2019-04-18 | 2024-01-11 | 南韓商三星電子股份有限公司 | 使用電路實現的軟體和用於金鑰值儲存的方法 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11726955B2 (en) * | 2010-06-19 | 2023-08-15 | Hewlett Packard Enterprise Development Lp | Methods and apparatus for efficient container location database snapshot operation |
US9323775B2 (en) | 2010-06-19 | 2016-04-26 | Mapr Technologies, Inc. | Map-reduce ready distributed file system |
US11301422B2 (en) * | 2016-02-23 | 2022-04-12 | Samsung Electronics Co., Ltd. | System and methods for providing fast cacheable access to a key-value device through a filesystem interface |
US10579606B2 (en) * | 2018-05-03 | 2020-03-03 | Samsung Electronics Co., Ltd | Apparatus and method of data analytics in key-value solid state device (KVSSD) including data and analytics containers |
US10684958B1 (en) | 2018-12-10 | 2020-06-16 | International Business Machines Corporation | Locating node of named data elements in coordination namespace |
US10915460B2 (en) | 2018-12-12 | 2021-02-09 | International Business Machines Corporation | Coordination namespace processing |
US11288208B2 (en) | 2018-12-12 | 2022-03-29 | International Business Machines Corporation | Access of named data elements in coordination namespace |
US11144231B2 (en) | 2018-12-12 | 2021-10-12 | International Business Machines Corporation | Relocation and persistence of named data elements in coordination namespace |
US11204911B2 (en) * | 2020-03-20 | 2021-12-21 | Sap Se | Efficient and non-disruptive online defragmentation with record locking |
US20220092046A1 (en) * | 2020-09-18 | 2022-03-24 | Kioxia Corporation | System and method for efficient expansion of key value hash table |
CN115981570B (zh) * | 2023-01-10 | 2023-12-29 | 创云融达信息技术(天津)股份有限公司 | 一种基于kv数据库的分布式对象存储方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 分布式数据库系统、在其中建立索引的方法和查询方法 |
CN102725755A (zh) * | 2011-12-31 | 2012-10-10 | 华为技术有限公司 | 文件访问方法及系统 |
US20130103729A1 (en) * | 2011-10-24 | 2013-04-25 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
CN105009111A (zh) * | 2012-12-13 | 2015-10-28 | 微软技术许可有限责任公司 | 使用键值存储系统的分布式sql查询处理 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2067633C (en) | 1991-07-24 | 1996-10-01 | Eric Jonathan Bauer | Method and apparatus for accessing a computer-based file system |
US6173293B1 (en) | 1998-03-13 | 2001-01-09 | Digital Equipment Corporation | Scalable distributed file system |
US8285878B2 (en) | 2007-10-09 | 2012-10-09 | Cleversafe, Inc. | Block based access to a dispersed data storage network |
US9088591B2 (en) * | 2008-04-28 | 2015-07-21 | Vmware, Inc. | Computer file system with path lookup tables |
US8478799B2 (en) | 2009-06-26 | 2013-07-02 | Simplivity Corporation | Namespace file system accessing an object store |
US8806143B1 (en) | 2009-10-09 | 2014-08-12 | Netapp, Inc. | Queuing received write blocks for reducing file fragmentation |
US20110137966A1 (en) | 2009-12-08 | 2011-06-09 | Netapp, Inc. | Methods and systems for providing a unified namespace for multiple network protocols |
US9323775B2 (en) | 2010-06-19 | 2016-04-26 | Mapr Technologies, Inc. | Map-reduce ready distributed file system |
US20120284317A1 (en) | 2011-04-26 | 2012-11-08 | Dalton Michael W | Scalable Distributed Metadata File System using Key-Value Stores |
US8595267B2 (en) | 2011-06-27 | 2013-11-26 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
US9037556B2 (en) | 2012-12-03 | 2015-05-19 | Vmware, Inc. | Distributed, transactional key-value store |
CN103902632B (zh) | 2012-12-31 | 2018-01-02 | 华为技术有限公司 | 键值存储系统中构建文件系统的方法、装置及电子设备 |
US9378067B1 (en) | 2014-05-08 | 2016-06-28 | Springpath, Inc. | Automated load balancing across the distributed system of hybrid storage and compute nodes |
US9767104B2 (en) | 2014-09-02 | 2017-09-19 | Netapp, Inc. | File system for efficient object fragment access |
US9438426B2 (en) | 2014-10-03 | 2016-09-06 | Seagate Technology Llc | Key-value data storage device with hybrid architecture |
-
2017
- 2017-07-10 US US15/645,916 patent/US11030155B2/en active Active
-
2018
- 2018-03-06 KR KR1020180026424A patent/KR102615616B1/ko active IP Right Grant
- 2018-04-19 CN CN201810358147.6A patent/CN108804510B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 分布式数据库系统、在其中建立索引的方法和查询方法 |
US20130103729A1 (en) * | 2011-10-24 | 2013-04-25 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
CN102725755A (zh) * | 2011-12-31 | 2012-10-10 | 华为技术有限公司 | 文件访问方法及系统 |
CN105009111A (zh) * | 2012-12-13 | 2015-10-28 | 微软技术许可有限责任公司 | 使用键值存储系统的分布式sql查询处理 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656886A (zh) * | 2018-12-26 | 2019-04-19 | 百度在线网络技术(北京)有限公司 | 基于键值对的文件系统实现方法、装置、设备和存储介质 |
CN109656886B (zh) * | 2018-12-26 | 2021-11-09 | 百度在线网络技术(北京)有限公司 | 基于键值对的文件系统实现方法、装置、设备和存储介质 |
TWI828901B (zh) * | 2019-04-18 | 2024-01-11 | 南韓商三星電子股份有限公司 | 使用電路實現的軟體和用於金鑰值儲存的方法 |
CN110647568A (zh) * | 2019-09-16 | 2020-01-03 | 金色熊猫有限公司 | 一种图数据库数据转化为编程语言数据方法及装置 |
CN110647568B (zh) * | 2019-09-16 | 2023-12-12 | 金色熊猫有限公司 | 一种图数据库数据转化为编程语言数据方法及装置 |
CN111078139A (zh) * | 2019-11-14 | 2020-04-28 | 北京迈格威科技有限公司 | 一种实现s3标准对象存储接口的方法及装置 |
CN111078139B (zh) * | 2019-11-14 | 2023-10-20 | 北京迈格威科技有限公司 | 一种实现s3标准对象存储接口的方法及装置 |
CN113535857A (zh) * | 2021-08-04 | 2021-10-22 | 阿波罗智联(北京)科技有限公司 | 数据同步方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20180039650A9 (en) | 2018-02-08 |
KR102615616B1 (ko) | 2023-12-19 |
US11030155B2 (en) | 2021-06-08 |
KR20180120073A (ko) | 2018-11-05 |
CN108804510B (zh) | 2023-09-12 |
US20170316028A1 (en) | 2017-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108804510A (zh) | 键值文件系统 | |
US10346363B2 (en) | Deduplicated file system | |
CN108628753B (zh) | 内存空间管理方法和装置 | |
US9047301B2 (en) | Method for optimizing the memory usage and performance of data deduplication storage systems | |
US9342528B2 (en) | Method and apparatus for tiered storage | |
WO2018064962A1 (zh) | 数据存储方法、电子设备和计算机非易失性存储介质 | |
US7979478B2 (en) | Data management method | |
JP5589205B2 (ja) | 計算機システム及びデータ管理方法 | |
KR20200053512A (ko) | Kvs 트리 데이터베이스 | |
CN105683898A (zh) | 对储存系统中数据高效存储与检索的组相关哈希表组织 | |
US20160283501A1 (en) | Posix-compatible file system, method of creating a file list and storage device | |
CN108140040A (zh) | 存储器中数据库的选择性数据压缩 | |
CN100424699C (zh) | 一种属性可扩展的对象文件系统 | |
GB2439577A (en) | Storing data in streams of varying size | |
US10127238B1 (en) | Methods and apparatus for filtering dynamically loadable namespaces (DLNs) | |
US20170316042A1 (en) | Index page with latch-free access | |
CN112711564B (zh) | 合并处理方法以及相关设备 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
JP6006740B2 (ja) | インデックス管理装置 | |
CN116204130A (zh) | 一种键值存储系统和键值存储系统的管理方法 | |
EP3995972A1 (en) | Metadata processing method and apparatus, and computer-readable storage medium | |
CN104537023A (zh) | 一种反向索引记录的存储方法及装置 | |
Kvet | Database Block Management using Master Index | |
CN110019016A (zh) | 提供逻辑键的kv存储设备及其方法 | |
US10997126B1 (en) | Methods and apparatus for reorganizing dynamically loadable namespaces (DLNs) |
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 |