CN111108493B - 使用键值存储***简化文件***操作的***、方法和设备 - Google Patents
使用键值存储***简化文件***操作的***、方法和设备 Download PDFInfo
- Publication number
- CN111108493B CN111108493B CN201880061222.0A CN201880061222A CN111108493B CN 111108493 B CN111108493 B CN 111108493B CN 201880061222 A CN201880061222 A CN 201880061222A CN 111108493 B CN111108493 B CN 111108493B
- Authority
- CN
- China
- Prior art keywords
- file
- key
- value
- operations
- result
- 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.)
- Active
Links
Images
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/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/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- 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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- 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/188—Virtual file systems
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
公开了用于提供基于键值文件***操作的***和方法。在一个实施例中,该方法包括:从应用程序接收至少一文件操作,该文件操作包括文件路径和所请求的操作;以及基于文件操作生成键值操作,该键值操作包括包含文件路径的键;在键值存储引擎处执行键值操作;从键值存储引擎接收键值操作的结果;根据键值操作的结果生成结果值;并将结果值返回应用程序。
Description
相关申请的交叉引用
本申请要求美国专利申请No.15/711,409,于2017年9月21日提交的名称为“使用键值存储***简化文件***操作的***、方法和设备”的优先权,其全部内容通过引用合并于此。
版权声明
本应用程序包含可能受到版权保护的材料。版权所有者不反对任何人以专利和商标局文件或记录中的形式对专利公开进行传真复制,但在任何情况下均保留所有版权。
背景技术
所公开的实施例涉及文件***,并且尤其涉及基于键值的文件***。
随着计算设备所需的数据量和种类的增加,已经出现了许多类型的存储范例以适应应用程序的需求。在计算机***中,最常见的存储机制是文件***。通常,文件***是用于管理磁盘或分区上文件的组织范例。文件***的示例包括ext3,ReFS,NTFS等。当前,大多数计算设备使用分层文件***,其中,存储设备上的原始数据由操作***提供的文件***以分层的方式组织。
虽然分层文件***可以通过以树状方式组织文件来为用户带来好处,但是这些文件***的分层性质导致了严重的性能问题。另外,对于以编程方式访问存储设备(即,不是基于人机交互的过程),分层性质并是不必要的。已经创建了一些***通过尝试在分层文件***之上“分层”不同的范例,以提供更简单的基于键值的访问来解决该问题。
尽管进行了这些尝试,但是当前的分层文件***在处理即使基于基本键值的操作方面仍然存在主要的性能问题。这些性能问题通常是由于键和底层文件之间需要两层映射而引起的。
通常,现有***采用第一映射层将给定键映射到文件,并采用第二映射层将值映射到文件***中的特定文件。因此,需要中间值以便将键转换为文件的内容。例如,现有的解决方案通常利用哈希为文件或目录创建唯一键。此哈希映射到文件名,继而,该文件名映射到特定文件。因此,当前***将处理所有基于键值操作的处理量加倍。此外,由于分层文件***的基于树的结构,当前文件***在执行搜索操作时通常会产生性能问题。即,树遍历必然要求增加任何搜索和排序操作的操作复杂性。
因此,当执行导致缓慢或不可用的解决方案的通用操作时,尝试利用基于键值的操作的当前文件***会承受许多技术性能问题。
发明内容
为了补救这些缺陷,在此公开了利用键值存储引擎来优化并改善底层文件***上的基于键值操作的***、设备和方法。另外,本文公开的***、设备和方法描述了以前未被现有文件***提供的新文件***操作。所公开的实施例具体地使用可靠的查询***来提供改进的交互文件操作、批处理文件操作和搜索操作。所公开的实施例在现有的分层文件***之上提供了改进的功能,因此可以在保持与传统文件***操作的向后兼容性的同时,应用于现有的应用程序和文件***,这对于改进传统***的操作和效率是显着的优势。
在一个实施例中,一种方法包括从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作;基于所述文件操作生成键值操作,所述键值操作包括包含文件路径的键;在键值存储引擎上执行所述键值操作;从所述键值存储引擎接收所述收键值操作的结果;根据所述键值操作的结果生成结果值;并将所述结果值返回所述应用程序。
在另一个实施例中,公开了一种设备,所述设备包括处理器;非暂时性存储器,所述非暂时性存储器中存储有计算机可执行指令,当所述指令由所述处理器执行时,使设备执行以下操作:从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作;根据所述文件操作生成键值操作,所述键值操作包括包含文件路径的键;在键值存储引擎上执行所述键值操作;从所述键值存储引擎接收所述键值操作的结果;根据所述键值操作的结果生成结果值;并将所述结果值返回所述应用程序。
在另一实施例中,公开了一种***,所述***包括:在处理器上执行的一个或更多个应用程序;存储设备,其存储多个文件;键值存储引擎,所述键值存储引擎被配置为存储具有相关值的多个键,所述键对应于表示所述多个文件的文件路径;键值文件***模块,所述键值文件***模块被配置为:从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作;基于所述文件操作生成键值操作,所述键值操作包括包含文件路径的键;在键值存储引擎上执行所述键值操作;从所述键值存储引擎接收所述键值操作的结果;根据所述键值操作的结果生成结果值;并将所述结果值返回所述应用程序。
附图说明
通过以下对附图所示实施例的描述,本公开的前述和其它目的、特征以及优点将变得显而易见,在附图中,各个附图中的相同附图标记始终表示相同的部分。附图不一定按比例绘制和并且是非限制性的,而是将重点放在示出本公开的原理上,其也在所附权利要求中进一步叙述。
图1是示出根据本公开的一些实施例的用于提供键值文件***的计算***的逻辑图。
图2A是根据本公开的一些实施例的分层文件***的图。
图2B是根据本公开的一些实施例的分层文件***的键值表示的图。
图3是示出根据本公开的一些实施例的用于在键值文件***上执行操作的方法的流程图。
图4是示出根据本公开的一些实施例的用于在键值文件***上执行写操作的方法的流程图。
图5是示出根据本公开的一些实施例的用于在键值文件***上执行事务性操作的方法的流程图。
图6是示出根据本公开的一些实施例的用于在键值文件***上执行多命令操作的方法的流程图。
图7是示出根据本公开的一些实施例的用于在键值文件***上执行搜索操作的方法的流程图。
图8是示出根据本公开的一些实施例的用于提供键值文件***的设备的硬件图。
具体实施例
现在将在下文中参照附图更充分地描述本公开,所述附图形成本公开的一部分,并且通过图示的方式示出了某些示例实施例。然而,主题可以以各种不同的形式来体现,因此,涵盖或要求保护的主题旨在被解释为不限于本文阐述的任何示例性实施例。提供示例实施例仅仅是为了说明。同样,旨在要求保护或涵盖的主题合理地广泛的范围。除其它事项外,例如,主题可以体现为方法、设备、组件或***。因此,实施例可以例如采用硬件、软件、固件或其任何组合(除了软件本身)的形式。因此,以下详细描述并非旨在限制。
在整个说明书和权利要求书中,术语可能具有超出明确陈述的含义的上下文中隐含或暗示的细微含义。同样地,在此使用的短语“在一个实施例中”不一定指相同的实施例,而在本文使用的短语“在另一实施例中”不一定指不同的实施例。术语“示例性实施例”包括全部或部分示例实施例的组合。
通常,可以至少部分地根据上下文中的使用来理解术语。例如,本文所使用的诸如“和”,“或”或“和/或”之类的术语可以包括各种含义,其可以至少部分取决于使用这些术语的上下文。通常,“或”如果用于关联列表,例如A、B或C,旨在表示包含全部的A、B和C,以及包含单独的A、B或C。另外,本文所使用的术语“一个或更多个”至少部分地取决于上下文,可以用于以单数形式描述任何特征、结构或特性,或者用于以复数形式描述特征、结构或特性的组合。类似地,至少部分地取决于上下文,诸如“一个”、“一个”或“所述”之类的术语可以再次理解为表示单数用法或表示复数用法。此外,术语“基于”可以理解为不一定旨在表示一组排他的因素,并且,至少部分地取决于上下文,可以代替地表示允许存在不一定必须明确描述的其它因素。
以下将参考方法和设备的框图和操作图来描述本公开。应当理解,框图或操作图的每个框以及框图或操作图中的框的组合可以借助于模拟或数字硬件和计算机程序指令来实现。可以将这些计算机程序指令提供给如本文所述的通用计算机的处理器以改变其功能,专用计算机,ASIC,或其它可编程数据处理设备,以使得计算机处理器或其它可编程数据处理设备执行所述指令,实现所述框图或一个或更多个操作框中指定的功能/动作。在一些替代实施方式中,方框中指出的功能/动作可以不按照操作图中指出的顺序发生。例如,取决于所涉及的功能/动作,连续示出的两个框实际上可以基本上同时执行,或者有时可以以相反的顺序执行。
可以将这些计算机程序指令提供给以下处理器:通用计算机,以将其功能改变为特殊用途;专用计算机;ASIC;或其它可编程数字数据处理设备,使得通过计算机的处理器或其它可编程数据处理设备执行指令以实现框图或一个或更多个操作框中指定的功能/动作,从而根据本文的实施例转换其功能。
为了本公开的目的,计算机可读介质(或计算机可读存储介质)以机器可读的形式存储计算机数据,该数据可以包括可由计算机执行的计算机程序代码(或计算机可执行指令)。作为示例而非限制,计算机可读介质可以包括用于数据的有形或固定存储,或者用于含信号代码的瞬时解释的通信介质的计算机可读存储介质。如本文中所使用的,计算机可读存储介质是指物理或有形存储(与信号相对),并且包括但不限于以任何方法或技术实现的用于诸如计算机可读指令、数据结构、程序模块或其它数据的信息的有形存储的易失性和非易失性、可移动和不可移动介质。计算机可读存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它固态存储技术、CDROM、DVD或其它光学存储、磁带、磁带、磁盘存储或其它磁性存储设备、或可用于有形存储所需信息、数据或指令并可由计算机或处理器访问的任何其它物理或材料介质。
图1是示出根据本公开的一些实施例的用于提供键值文件***的计算***的逻辑图。
图1示出了计算***100,例如台式设备、服务器设备、便携式设备、移动设备、平板电脑或利用由文件***管理的存储设备(远程或本地)的任何计算设备。值得注意的是,图1示出了计算***100的功能组件,并且结合图8更全面地描述了与***100所利用的硬件类型的实施例有关的细节。其公开的内容通过引用全部合并于此。
***100被划分为用户空间120A和内核空间120B。用户内核边界120示出了这种划分。通常,内核空间120B软件指的是具有对设备的底层硬件完全或基本完全的访问权限的特权软件(例如,操作***和类似软件)。相比而言,用户空间120A软件是指没有权限直接访问***100的底层硬件,而必须通过***调用或操作***提供的类似机制访问任何硬件的软件和应用程序。用户空间120A软件和内核空间120B软件之间的划分取决于设备所采用的操作***类型(例如,在微内核体系架构中)。
***100在用户空间120A中执行一个或更多个应用程序102。应用程序102包括在***100上执行的任何应用程序或进程,包括编译的软件、解释的软件、应用程序、库或其它可执行或可链接的代码。在一个实施例中,应用程序102可以包括***级工具,例如由壳(例如,诸如ls、cp、rm等标准UNIX命令)提供的工具。替代地,或结合前述,应用程序102可以包括在用户空间120A中操作的成熟的特定领域应用程序或任何可执行程序。对于特定领域应用程序102,这些应用程序102可以利用键值文件***API(在此描述)对底层文件***(在此也描述)执行非POSIX操作。相反,标准工具只能执行POSIX兼容的操作。通常,应用程序102包括与***100的文件***交互的任何应用程序。
应用程序102通过***调用与底层硬件进行通信。在所示的实施例中,***调用由glibc 104提供。在所示的实施例中,glibc 104提供必要的POSIX***调用以及各种其它***调用,以允许应用程序102与操作***和底层硬件进行通信。尽管图示为glibc,但可以根据***100的底层操作***使用其它***调用库。
***100进一步包括虚拟文件***(Virtual Filesystem,VFS)106。VFS 106是具体或物理文件***上的抽象层。在所示的实施例中,VFS 106充当应用程序102和底层文件***之间的媒介,基于被访问的文件***将***调用转换为适当的文件***调用。在所示的实施例中,VFS 106提供标准化的接口以允许使用多个文件***(包括键值文件***)。在所示的实施例中,VFS 106从glibc 104接收***调用,并将***调用路由到适当的文件***,如本文所述。通常,VFS 106为所有文件***操作提供公共接口,而与存储介质所使用的底层文件***无关。
如图1所示,VFS 106提供至少两个执行路径。首先,VFS 108可以将***调用传输到已安装的内核模块(例如,KVFS内核模块118)。在操作中,***100可以包括安装在内核空间120B中的用于各种文件***(例如,ext4,ZFS等)的许多内核模块。在操作中,VFS 106确定应用102访问的文件***的类型,并且如果存在内核模块,则将该请求路由到适当的内核模块。本文更详细地描述了KFVS内核模块118的细节。
第二,VFS 106将***调用路由到FUSE 108。在所示的实施例中,FUSE 108是内核级模块,用于允许在不修改内核的情况下访问用户空间120A文件***。也就是说,FUSE 108允许用户安装的文件***与内核级文件***共存。用户空间文件***的示例包括sshfs,MooseFS等。通常,可以用FUSE 108通过执行注册用户空间文件***的应用程序来挂载用户空间文件***。在随后的***调用中,VFS 106将对用户空间文件***的任何***调用都路由到FUSE108。基于FUSE的文件操作通过FUSE 108被路由到用户空间120A中相应的FUSE库,例如KVFS库114,的FUSE库。FUSE库通常定义许多符合FUSE 108理解的标准化接口的端点。在一些实施例中,该库可以另外包括可以直接从应用程序调用的补充接口。
在所示的实施例中,***100的已安装文件***包括键值文件***(Key-ValueFileSystem,KVFS),键值文件***被实现为用户空间模块110和/或内核空间模块118。如本文所使用的,当涉及两个模块执行的操作时,KVFS用户控件模块110和KVFS内核模块118统称为键值文件***(KVFS)模块。
取决于KFVS的特定安装,***100可以包括KVFS用户空间模块110或模块118,或者可以前两者都包括。如本文所述,KVFS用户空间模块110和模块118两者都与底层键值(key-value,KV)存储引擎116通信。用户空间和内核空间的实现方式在具体处理上有所不同,两者均在此处进行了描述,但通常执行相同的操作。即,将请求路由到模块110和模块118的执行是不同的,但是由每个执行的操作基本上是相似的。
KVFS用户空间模块110包括KVFS库114,libfuse库112和glibc库104。glibc库104对应于先前所述的glibc库,其公开内容通过引用整体合并于此。通常,glibc库104允许经由各种***调用来访问底层操作***和硬件。尽管图示为glibc,但是可以使用任何提供对底层操作***的编程访问的***调用库。类似于glibc库104,KVFS用户空间模块110还包括一个libfuse库112。libfuse库112包括特定于FUSE 108的各种调用。例如,libfuse库112定义了必须由兼容FUSE的文件***实现的应用程序编程接口(Application ProgrammingInterface,API)。尽管显示为libfuse,但可以使用任何用户空间文件***库。通常,可以使用任何允许创建用户空间文件***的软件来代替libfuse。
KVFS库114包括实现KVFS用户空间模块110的特定于KVFS的应用程序代码。通常,KFVS库114包括一个或更多个已编译的可执行文件(例如,用于安装KFVS)和用于以编程方式访问键值存储引擎116的API。所述API可以允许执行非POSIX兼容命令,该命令可以由包括由KVFS库114提供的头文件的应用程序102执行。
作为第一示例,应用程序102可以包括用于写文件的程序代码。所述应用程序102可以作为写文件的一部分,发布包括文件描述符、数据缓存、以及从所述缓存写入由文件描述符标识的文件的字节数的“写”***调用。如所讨论的,该***调用由将所述调用发送到VFS 106的glibc 104提供。VFS 106分析与文件描述符相对应的文件***,并识别出例如底层文件***是KVFS用户空间模块110。然后,VFS 106将***调用发送到FUSE 108,FUSE 108将所述调用转发到KVFS库114(如前所述,通过glibc 104和libfuse 112)。在接收到调用(其可以包括前面的组件添加的其它详细信息)后,KVFS库114将***调用转换为命令或命令集,以在键值存储引擎116上执行。在一些实施例中,KVFS库114还可以通过对glibc 104返回***调用来发出***调用以将文件写入到在存储设备(未示出)上存储文件的分层文件***中。
在一个实施例中,KVFS库114然后可以将文件描述符或文件名转换成键值存储引擎116中的对应键。然后,KVFS库114执行由键值存储引擎116提供的PUT命令,以将缓存(或其部分)存储为键值存储引擎116中的标识的键的值。在完成操作之后,KVFS库114可以通过libfuse 112、glibc 104、FUSE 108和VFS 106向应用程序102返回值。继续该写示例,KVFS库114可以通过libfuse库112提供的API返回写入的字节数(如果未写入任何字节,则返回零)。然后,libfuse库112可以通过glibc 104将返回值传输到FUSE 108和VFS 106。
最后,通过glibc 104提供的***调用的返回值将所述返回值传输到调用应用程序。从应用程序102的角度来看,要写入的***调用和所述返回值表现为一标准接口(例如,与对另一个已安装操作***的***调用相同),而存储写缓存的底层机制与例如将文件写入分层文件***有很大不同。另外,由于KVFS库114将文件写到磁盘,所以文件***可以被加载或以其它方式被用作普通的分层文件***。因此,该***允许将任何现有文件***与基于KVFS的文件***一起使用。结合图4提供了对写操作的进一步讨论,其公开内容通过引用整体结合于此。
作为第二示例,应用程序102可以通过利用由KVFS库114提供的API来执行操作。在该示例中,KVFS库114提供了允许标准文件操作(例如,POSIX操作)以及专门操作(例如事务操作,多读取操作等)的API。通常,KVFS库文件114可以提供一个或更多个头文件,所述头文件允许应用程序102在编译期间(或在解释或执行期间)在应用程序102中包括KVFS API。因此,应用程序102可以调用由KVFS库114提供的一个或更多个功能,其又将API调用转换成要在键值存储引擎116上执行的操作。结合图4-7提供了这些调用的示例,其公开内容通过引用整体结合于此。
替代地,或者与前述结合,KVFS可以在内核空间中实现,即,作为底层操作***的一部分。在一些实施例中,KVFS内核模块118可以作为内核模块安装或者可以直接编译到操作***中。在基于内核的实现中,***调用的发布以与有关用户空间实现的描述相同的方式从应用程序102进行到VFS 106。
然而,值得注意的是,由于KVFS内核模块118是作为内核空间模块安装,因此VFS106绕过FUSE 108将***调用转发到KVFS内核模块118。在一个实施例中,KVFS内核模块118提供符合VFS 106可识别的标准接口的接口。一旦调用到达KVFS内核模块118,KVFS内核模块118即可执行与有关KVFS库114的描述的操作类似的操作。也就是说,KVFS内核模块118可以将***调用转换为一个或更多个将被发布给键值存储引擎116的命令,并且还可以直接在底层的分层文件***上直接执行命令。最后,KVFS内核模块118还以关于用户空间实现的描述的方式将任何操作的返回值返回给VFS 106,并最终返回给应用程序102。
作为示例,在可以经由KVFS内核模块118将KVFS作为内核空间软件的情况下,应用程序102如初始示例中所述方式(通过glibc 104)向VFS 106发出***调用,其公开内容通过引用整体结合于此。但是,值得注意的是,由于KVFS安装在内核空间中,因此VFS将***调用转发到KVFS内核模块118而不是转发至FUSE108。在所示的实施例中,KVFS内核模块118可以以关于KVFS库114所描述的方式执行相同的操作以将***调用转换为键值存储引擎116命令,其公开内容通过引用整体结合于此。
如上所述,KVFS将标准和自定义文件的命令转换为在键值存储引擎116上执行的键值操作。在一个实施例中,键值存储引擎116包括基于键值的数据库或存储引擎。即,键值存储引擎116可以包括基于软件的应用程序或模块。例如,键值存储引擎116可以包括ROCKSDB、MEMCACHED、REDIS或其它类型的软件数据库/存储引擎。在一些实施例中,键值存储引擎116是本地应用程序(即,在***100上运行的应用程序)。然而,在其它实施例中,键值存储引擎116可以包括远程或分布式键值数据库。最后,在一些实施例中,键值存储引擎116可以包括提供基于键值的存储操作的硬件设备。在该实施例中,键值存储引擎116包括可以本地执行键值指令的硬件存储器或处理设备。例如,键值存储引擎116可以包括ASIC或键值固态硬盘驱动器(SSD)。
在上述每个实施例中,***100可以通过KVFS库114和/或KVFS内核模块118在底层文件***上执行***调用。具体地,在一个实施例中,可以使用以下底层文件***(例如,分层文件***)与键值存储引擎116的联合来完成KVFS的使用。也就是说,现有的分层文件***可以作为KVFS挂载,并且操作可以并行进行,影响底层分层文件***和记录事务以及键值存储引擎116内的数据,并且正如关于特定操作更详细地讨论的那样。
尽管前面的描述主要集中在基于UNIX的组件(例如glibc,libfuse等)上,但是前述***100可以应用于具有类似组件的任何操作***中,并且本公开并不旨在仅限于基于UNIX的设备。例如,代替VFS,设备可以在基于WINDOWS的平台上使用可安装文件***。同样,可以在Windows上使用WINFSP代替libfuse。可以基于底层操作***根据需要对组件进行其它更改。
图2A是根据本公开的一些实施例的分层文件***的图。
如图所示,文件***200A包括位于文件***200A顶部的根节点201A。在所示的实施例中,根节点201A被存储为目录。根节点201A可以具有包括主目录202A和用户目录202B的多个子目录。主目录202A可以进一步包括子目录203A和203B。如图所示,子目录203A包括文件204B以及另一个包括文件205A和205B的子目录204A。类似地,目录203B包括子目录204C,其在子目录中包括文件205C。为了在分层结构上执行操作,必须花费大量资源维护文件在分层结构中的位置,并将文件的“路径”转换为磁盘上的特定位置,此外,还必须花费大量开销来组织文件以执行操作。
图2B是根据本公开的一些实施例的分层文件***的键值表示的图。
图2B的文件***200B示出了传统文件路径字符串到键值名称空间的映射。如上所述,POSIX***调用需要使用文件路径来执行基本文件操作。例如,“open()”***调用需要一个路径名来标识可用于后续文件操作的文件描述符。为了提供底层基于键值的解决方案,文件***200B示出了文件路径如何映射到键值存储中包含的特定键。
如图所示,文件路径(例如,目录和文件名)的每个部分被映射到特定键。因此,部分“/home”被映射到键211K,“/home/userl”被映射到键212K,“/home/userl/picture”被映射到键213K,完整文件路径(“/home/userl/picture/cat.png”)被映射到键214K。可以看出,文件路径的每个部分都映射到键值存储引擎中的单独的键上。
如进一步示出的,与每个键211K、212K、213K和214K相关联的值根据键的值而变化。对于键211K、212K和213K(目录键),存储的值(211V、212V、213V)是“存储”在所述目录的文件列表。在一个实施例中,值211V、212V、213V可用于遍历模拟的目录分层结构。在一些实施例中,值可包括与底层文件目录部分的每一个关联的附加信息(例如,文件/目录元数据)。尤其是对于键214K,值214V对应于文件“/home/userl/picture/cat.png”的内容。
在一些实施例中,文件的内容可以被存储为二进制大对象块(BLOB)或类似的数据结构。可替代地,或与前述相结合,内容可以被存储为指向存储文件的远程数据源或存储文件的本地数据源的指针。如果/当底层文件内容超过底层键值存储引擎的最大值大小时,可以使用指针。在一些实施例中,该值可以是存储引擎中的另一个键。例如,***可以将符号链接表示为与指向的文件路径相对应的值。
另外,每个键或值还可包括各种元数据字段(未示出)。例如,键211V、212V、213V中的每个文件还可以包括关于文件的各种元数据包括文件属性,例如大小、所有者等以及访问权限等。在一些实施例中,这些属性可以由底层键值***索引,从而允许基于该属性的快速搜索和排序。例如,在一种实现中,例如,211V的值可以存储为哈希对象数组,其中哈希对象的值由键值存储引擎索引。
图3是示出根据本公开的一些实施例的用于在键值文件***上执行操作的方法的流程图。
结合图1讨论的方法。图3针对涉及键值文件***的通用文件操作。图4至图7更详细地提供了关于特定操作的细节。正如结合图1更详细的讨论,可以通过用户空间中的键值文件***库执行图3至图7所公开的方法。可替代地,或与前面所述结合,所述方法可以由KVFS内核模块执行。参照图3,该方法可以作为实现符合兼容POSIX的文件操作集的一部分或由API提供的任何操作来执行,如结合图1更详细地讨论的。
在步骤302中,该方法接收并处理文件操作。
在一个实施例中,文件操作包括***调用,以访问或以其它方式检索与由文件路径标识的文件有关的信息。在一些实施例中,所述文件可以对应于分层文件***上存在的文件。可替代地,或与前述结合,文件可以对应于仅存储在键值数据库内的文件。
可以经由虚拟文件***并且在一些实施例中经由基于FUSE的文件***来接收文件操作。或者,可以通过对API的调用来接收文件操作,由应用程序使用KVFS生成这些调用。
在一个实施例中,文件操作包括选自包括创建、读取、写入、多读(mread)、多写(mwrite)、创建和删除,和修补操作集合中的操作。
在所示的实施例中,该方法处理文件操作(***调用)。在一个实施例中,处理文件操作包括执行***调用以修改或访问底层文件***(例如,分层文件***)。例如,在简单的示例中,该方法可以接收写***调用,并且可以简单地执行相同的写***调用。然而,在更复杂的示例中,该方法可以接收多个***调用,并且可以在执行它们之前对它们进行重新排序(如本文所述)。此外,在一些实施例中,该方法可以选择性地执行一些接收的文件操作。最后,在一些实施例中,文件操作可能不对应于***调用(例如,在应用程序直接调用键值文件***的API的情况下),并且***可能不执行与文件操作对应的任何***调用。
在步骤304中,该方法检查与文件相关联的权限。
在步骤302中接收到的文件操作由“用户”发出。用户是指操作***用户(例如,人类用户,守护进程等),通常指发起文件操作的进程的实体所有者。通常,存储在文件***中的每个文件都与一组权限相关联(例如,用户级别、组级别和全局权限)。权限可能包括读取、写入或执行文件的能力。因此,在步骤304中,该方法识别执行文件操作的用户(即,进程的所有者),并将该用户与和给定文件相关联的文件权限列表进行比较。在一些实施例中,该方法可以使用底层文件***来识别权限。但是,在其它实施例中,该方法可以使用键值存储引擎来检索存储的权限(如前所述)。
在一些实施例中,在文件操作修改或访问多个文件的情况下(如本文中图5至图7所进一步描述的),文件操作可以包括多个文件路径。在这些实施例中,该方法检查文件操作中包括的每个文件路径的权限。在一些实施例中,文件操作可以包括多个子操作。在这些实施例中,该方法检查每个子操作中每个文件路径的权限。如上所述,检查权限可能需要检查用户权限以及组和全局权限。
在步骤306中,该方法确定是否允许文件操作。
在文件操作包括单个操作并且该操作包括单个文件路径的情况。如果发布操作的用户被允许访问文件,则所述方法允许该操作。在一些实施例中,取决于文件的权限,允许用户访问文件可以包括:允许用户对文件的完全访问,或者仅允许用户访问权限的子集。如果不允许用户访问该文件,则该方法结束。在一些实施例中,结束该方法可以包括向用户返回错误代码,指示不允许该操作。在分析了多个文件部分的一些实施例中,该方法可以继续允许仅对用户有权访问的那些文件路径进行操作。
如上所述,可以针对每个操作以及每个操作中的每个文件重复该过程。在一些实施例中,如果子操作之一不被允许,则该方法可以禁止该操作中包括的所有子操作。可替代地,该方法可以基于确定允许哪些子操作而继续进行子操作的子集。例如,如果操作包括多个非原子读取子操作,并且那些操作之一不被允许,则该方法可以执行允许的子操作并拒绝被禁止的操作,而不是禁止所有子操作。
在步骤308中,该方法将文件路径转换为键。
在识别出文件操作(包括子操作)中涉及的所有文件路径之后,该方法将文件路径转换成用于访问键值存储的键。结合图2更全面地描述了将文件路径转换为键的过程。其公开内容通过引用整体结合于此。
在一些实施例中,如果允许文件操作,则该方法为文件路径的每个部分生成键。例如,如果该操作是针对文件“/dir/file.txt”的写操作,则该方法可以为“/dir”和“/dir/file.txt”生成键。“/dir”键的关联值包括位于“/dir”路径下的文件和目录的列表。另外,该方法可以存储对键“/dir”的访问权限以及从与目录相关联的底层文件***中检索到的其它元数据。对于键“/dir/file.txt”可以执行类似的操作。”
在一些实施例中,生成键可以包括确定相对文件路径的绝对路径。在一些实施例中,生成键可以包括将文件描述符转换为文件路径。通常,文件路径和键之间的映射不包括重要的处理(例如,哈希计算等),而是仅包括文件路径作为键。在许多调用中(例如,open()),文件路径是已知的,因此生成键可以包括简单地使用文件路径作为键。但是,在其它***调用中,可能会给出文件描述符,因此该方法必须查找文件描述符以获得路径。但是,值得注意的是,与现有***的复杂性相比,这是一个O(1)操作。
在步骤310中,该方法生成一个或更多个键值操作。
在一个实施例中,键值操作对应于可以在键值数据存储上执行的操作。此类操作的示例是GET、PUT、DELETE、APPEND和类似操作。通常,键值操作需要键来标识受影响的值,并且包括操作所需的可选数据。例如,GET操作可能只需要一个键,并且可能返回与键关联的值。相比而言,PUT操作可能需要键和与该键相关联的值。键值存储引擎支持的键值操作的数量必须取决于所使用的键值存储引擎,并且本公开内容并不旨在限于特定的操作集。本文讨论的特定键值操作仅是示例性的。
在一个实施例中,该方法可以生成单个键值操作。在替代实施例中,该方法可以生成多个键值操作。例如,在步骤302中接收的文件操作可以包括事务,该事务包括多个文件操作(如结合图5更详细地讨论的)。在此示例中,该方法生成多个键值操作以执行底层文件操作。例如,如果事务包括原子地打开文件并写入文件的文件操作,则该方法可以生成GET操作(使用文件路径)和PUT操作(使用GET操作返回的键和与写文件操作关联的数据)。所公开的实施例对可被生成以实现所接收的文件操作的键值操作的组合数量没有限制。
在步骤312中,该方法执行键值操作。
如前所述,键值操作可以在键值存储引擎处执行。在一些实施例中,该方法可以经由键值存储引擎提供的API将生成的键值操作提交给键值存储引擎。即,该方法可以经由被提供用来访问键值存储引擎的一个或更多个函数调用来发出操作。替代地,或结合前述内容,该方法可以通过网络连接(例如,到位于远程的键值存储引擎)发出文件操作。在一些实施例中,网络连接包括有线或无线的广域网或局域网连接。在替代实施例中,网络连接可以包括设备内的内部网络连接(例如,在通过客户端设备上的特定端口访问键值存储引擎并通过网络接口接受命令的情况下)。
在一些实施例中,该方法可以顺序地执行键值操作。在替代实施例中,该方法可以并行执行键值操作。在一些实施例中,该方法可以生成捆绑一个或更多个键值操作的事务,并且可以将该事务传输到键值存储引擎。
在步骤314中,该方法返回错误值或结果值。
在执行键值操作之后,键值存储引擎根据操作结果返回结果值或错误代码。例如,响应于GET操作,键值存储引擎返回与键相关联的值作为返回值,或者如果找不到键(即文件或目录不存在),则返回错误消息。
在一些实施例中,该方法可以将键值存储引擎的返回值转换为用于底层文件操作的适当的返回值。例如,在响应于PUT请求时,键值存储引擎可以将存储的值返回到键值存储引擎。作为响应,该方法可以返回存储在对应键(即,与写***调用的兼容POSIX的返回值对应的值)中的值的字节数。类似地,该方法可以返回POSIX兼容性错误代码,而不是键值存储引擎返回的更具描述性的错误。
在一些实施例中,可以基于***调用的类型来生成错误或返回值。如上所述,该方法可以将错误/返回值转换为用于所有POSIX***调用的POSIX兼容返回值。或者,对于非POSIX调用,该方法可以返回更多如面向外部API所定义的描述性错误/返回值。
在一些实施例中,可以响应于应用程序发出的***调用来执行图3中的方法。替代地,或结合前述,该方法可以执行图3中所示的相应于加载键值文件***的方法。即,该方法可以分析底层文件***,并用关于现有文件***的数据填充键值存储引擎。
图4是示出根据本公开的一些实施例的用于在键值文件***上执行写操作的方法的流程图。
在步骤402中,该方法接收并处理写操作。
在一个实施例中,写操作是指引导计算设备写文件的指令。在一个实施例中,写操作包括文件路径,开始写操作的偏移量,包含要写的字节数的缓存以及指定要写的缓存的字节数的长度。
在一个实施例中,步骤402中的方法将文件写入磁盘。在一些实施例中,该方法可以采用底层非KV文件***的***调用来将文件写入磁盘。例如,该方法可以通过诸如glibc之类的***调用库将文件写入现有的ext4底层文件***。以这种方式,该方法透明地将文件写入传统的分层文件***,同时维护底层文件***的基于KV的单独实现。
在步骤404和步骤406中,该方法检查与文件路径关联的文件路径权限,并分别确定是否允许对文件路径进行键值操作。结合图3(并且,具体地,步骤304和306)更全面地描述了检查文件路径权限以及允许或禁止键值操作的步骤,在此不重复其公开,而是通过引用将其整体合并于此。如图所示,如果不允许写操作,则该方法可以返回错误代码,该错误代码指示由于发出进程/用户的权限不足而不允许发出写操作。
在步骤408中,该方法将文件路径转换为键。
如前所述,底层键值存储引擎将文件和目录的路径作为键存储在键值存储引擎中。因此,为了访问文件路径的相应值,该方法将文件路径转换为键,如结合图2A-2B和图3(具体地,步骤308)更全面地描述的,其全部公开内容通过引用整体合并于此。
在步骤410中,该方法执行具有指令参数的PUT指令。
在一个实施例中,PUT指令可以采取由底层键值存储引擎定义的各种选项。例如,PUT指令通常需要一个键、一个值和一组选项。在一些实施例中,这些选项可以特定于键值存储引擎,并且可以定义PUT操作如何进行操作。例如,这些选项可以定义键值存储引擎的操作设置,例如压缩类型、写缓存设置、速率限制、校验和验证选项、压缩选项、日志记录选项以及用于配置底层键值存储引擎的各种其它设置。在一些实施例中,可以基于每个操作来配置选项(例如,写缓存设置),而替代地或结合地,选项可以包括全局选项(例如,日志记录选项)。
在所示的实施例中,该方法可以经由底层的键值存储引擎提供的API调用来发出PUT指令。在其它实施例中,可以通过网络将PUT指令发送到远程键值存储引擎。在该实施例中,该方法通过使用标准文件***将文件写入本地磁盘,同时在远程位置的键值存储引擎中镜像文件的副本来提供远程冗余。可替代地,可以经由网络端口将PUT指令发送到本地应用。
在步骤412中,该方法存储或更新该值。
在向键值存储引擎发出PUT请求之后,键值存储引擎将与文件路径关联的数据持久保存到键值存储引擎中。如上所述,数据包括文件的内容和关于文件的元数据。作为PUT指令的一部分,该方法可以将关于文件的各种元数据保存为与键相关联的值(如结合图2所讨论的)。此外,该方法可以索引与文件相关联的元数据以供后续使用。
如果文件不存在,则该方法可以存储该值(例如,作为新文件写入)。或者,如果文件存在,则该方法可以基于指令的参数来更新值。例如,该方法可以将数据附加到与文件路径(键)关联的值。或者,如果指令指示需要截断,则该方法可以截断该值并覆盖该值。
在步骤414中,该方法返回错误值或返回值。返回错误/返回值的过程结合图3(具体地,步骤314)进行描述。通过引用将其公开内容整体合并于此。关于写操作,该方法可以将存储在与键相关联的值中的字节数作为返回值返回,并且在遇到与写操作相关联的错误时可以返回整数的状态码。
图5是示出根据本公开的一些实施例的用于在键值文件***上执行事务性操作的方法的流程图。
在步骤502中,该方法接收并处理事务操作。
在一个实施例中,事务操作包括要执行的操作的数组、文件数组、缓存数组和原子标记。该操作数组包括文件操作的列表(例如,读取、删除、写入等)。文件数组包括与操作相对应的文件的列表。缓存数组包括用于存储相应操作的结果的空数组。原子标记包括指示是否应原子执行事务的布尔标记。例如,事务操作可以采用伪代码指令的形式:transaction([:read,:delete],[:filepathl,:filepath2],new array(2),TRUE)。
所述指令指示所述事务读取文件路径1(filepath1),然后删除文件路径2(filepath2)。原子标志指示必须以原子方式执行文件操作。在替代实施例中,操作数组可以附加地包括用于操作的选项或参数。例如,写操作可以包括要写的数据作为写操作的参数。
在接收到事务操作之后,该方法然后可以生成多个***调用以在底层分层文件***执行期望的操作。继续前面的示例,该方法可以发出read(3)***调用,然后发出remove(3)***调用(或可替代地,发出unlink(2)或rmdir(2)***调用)。
在一些实施例中,该方法可以分析操作数组和文件数组以确定命令的执行顺序。在该实施例中,该方法可以尝试对命令进行重新排序,以避免处理事务中的错误。例如,如果操作包括“读取文件1”,“删除文件2”,“读取文件2”,则该方法可以对这些操作重新排序以避免在删除文件2之后读取文件2。因此,可以将操作重新排序为“读取文件1”,“读取文件2”和“删除文件2”。在可选实施例中,如果识别出无效事务,则该方法可以简单地以错误代码退出。或者,该方法可以简单地执行指令中提供的事务,并使用每个事务的状态代码或错误代码填充结果缓存。在该实施例中,该方法利用错误处理和管理来调用应用程序。
在步骤504和步骤506中,该方法检查与每个文件路径相关联的文件路径权限,并分别确定是否允许每个文件路径进行事务操作。结合图3(并且具体地,步骤304和306)更详细地描述了检查文件路径权限以及允许或禁止键值操作的步骤,在此不重复其公开,而是通过引用将其整体合并于此。与图相反。参照图4,图5中的方法检查事务操作中包含的每个文件的文件路径权限。
在步骤508中,该方法将事务操作中的所有文件路径转换为键。
如前所述,底层键值存储引擎将文件和目录的路径作为键存储在键值存储引擎中。因此,为了访问文件路径的相应值,该方法将文件路径转换为键,如结合图2A-2B和图3更全面地描述的(具体地,步骤308),其全部公开内容通过引用整体合并于此。在所示的实施例中,该方法从文件数组提取每个文件路径,并将每个文件路径转换成键。
在步骤510中,该方法创建捆绑所有变异的事务请求。
在一个实施例中,创建事务请求包括首先根据底层键值存储引擎事务API生成事务。例如,该方法可以使用BEGIN TRANSACTION命令或等效注释来发起事务。在一些实施例中,BEGIN TRANSACTION命令可以如先前所讨论的配置有定义写入和事务的事务特征的选项。
接下来,该方法可以基于操作数组和键来生成一系列键值操作。该方法可以通过分析操作数组并将文件操作转换为键值操作来生成操作。继续前面的示例,该方法可以将read(3)和delete(3)操作转换为键值存储引擎的PUT和DELETE操作。因此,在步骤510的结尾,该方法使用BEGIN TRANSACTION命令创建事务,并生成与所请求的文件操作相对应的一系列键值操作。
在步骤512中,该方法在键值存储引擎处执行事务。
在执行BEGIN TRANSACTION操作之后,该方法继续向键值存储引擎发出每个键值操作。可以以结合图4的步骤410和图3的步骤312中所讨论的方式发出键值操作,其公开内容通过整体引用合并于此。
关于步骤512中的执行,该方法可以额外地进行附加步骤以处理指令的事务性质。在一个实施例中,该方法可以顺序地执行各个键值操作,直到遇到错误为止。在遇到错误时,该方法可以使用ROLLBACK命令回滚执行的指令,从而撤消更改。在检测到ROLLBACK条件时,该方法然后可以继续回滚底层文件***操作。
考虑先前示例中的“Delete file2”命令回滚,由于使用了底层键值存储引擎,因此file2的值被同时存储在键值存储引擎中,因此该方法能够基于键值存储引擎中存储的值在底层文件***中“恢复”file2,因此,当回滚删除指令时,该方法可以从键值存储引擎中提取已删除文件的值并发出写***调用以替换在步骤502中删除的文件。
值得注意的是,作为批处理在键值存储引擎处执行键值操作包括如上所述执行所有键值操作或不执行任何键值操作。
在步骤514中,该方法返回错误值或返回值。
结合图3(具体地,步骤314)描述返回错误/返回值的过程,通过引用将其公开内容整体合并于此。
关于事务操作,每个键值操作返回可以存储在事务操作的结果缓存内的结果。因此,所述结果缓存将为每个指令存储返回值或错误代码(前面已讨论)。
如前所述,上述方法可以被实现为来自KVFS库或内核模块的API调用。
图6是示出根据本公开的一些实施例的用于在键值文件***上执行多命令操作的方法的流程图。
在步骤602,所述方法接收多命令操作。
在一个实施例中,多命令操作包括文件数组、缓存数组和结果数组。如前所述,文件数组包括要操作的文件列表,缓存数组包括用于存储文件操作结果的空缓存。
在一个实施例中,多命令操作包括多读取操作。多读取操作是指将多个文件读取作为批处理事务的操作。在该实施例中,文件数组可以另外包括每个文件的偏移量和要从每个文件读取的字节的长度。结果数组存储错误代码或每个文件读取的返回状态(例如,每次读取的文件内容或读取的字节数)。
在另一个实施例中,多命令操作包括多写入操作。多写入操作是指将多个文件写入作为批处理事务的操作。在该实施例中,文件数组可以另外包括其中要开始写操作的偏移量,包含要写入的字节数的缓存以及指定要写入的缓存的字节数的长度。在该实施例中,结果数组可以存储针对每个文件写入所写入的字节数、错误代码和/或文件写入操作的内容。
虽然主要上下文中对读取或写入文件内容的进行描述,但是多命令操作可以另外采取目录查找(即,列出目录中的文件和目录)、文件/目录属性查找、或关于目录和文件可执行的其它操作。值得注意的是,可以为任何底层文件操作构建多命令指令。例如,可以对任何POSIX兼容的文件操作或通过API(在此讨论)支持的任何非POSIX文件操作构建多命令指令。因此,图6所示的方法可以等同地应用于删除、重命名或任何其它基于文件的操作。通常,作为多命令的一部分接收的文件数组将包含多个文件和用于底层***调用(例如,删除、重命名等)的相应参数,结果数组存储这些单独调用或错误代码期望的返回值(视情况而定)。下面的图的描述。下面在图6的描述中描述了多读取和多写入的操作,但是所述的公开并非仅限于如上所述的那些指令。
在步骤604和步骤606,该方法检查与每个文件路径相关联的文件路径权限,并分别确定是否对每个文件路径允许多命令操作。结合图3(具体是步骤304和306)更全面地描述了检查文件路径权限以及允许或禁止键值操作的步骤。此处不再赘述,但通过引用将其全文并入。类似于图。类似于图5,图6的方法检查多命令操作中包含的每个文件的文件路径权限。
在步骤608中,该方法将文件路径转换为相应的键。
如前所述,底层键值存储引擎将文件和目录的路径作为键存储在键值存储引擎中。因此,如结合图2A-2B和图3(具体地,步骤308)更全面地描述的,为了访问文件路径的相应值,该方法将文件路径转换为键,全部公开内容通过引用整体合并于此。在所示的实施例中,该方法从文件数组提取每个文件路径,并将每个文件路径转换成键。
在步骤610中,该方法创建将所有文件路径、缓存信息和返回状态数组捆绑在一起的批处理请求。
在一个实施例中,该方法可以首先识别与包括在多命令操作中的文件操作相对应的适当的键值操作(例如,用于读取操作的GET操作和用于写入操作的PUT操作)。在一个实施例中,批处理请求可以对应于键值存储引擎支持的事务。例如,该方法可以使用BEGINTRANSACTION命令生成事务,并为在步骤608中标识的每个键生成GET操作(在多次读取操作的上下文中)或PUT操作(在多次写入操作的上下文中)。最后,该方法发出COMMIT命令以执行事务。
在一些实施例中,键值存储引擎可以本地支持多个读取、写入或其它操作。在这种情况下,该方法可以简单地将本地命令发布给具有在步骤608中生成的键列表的键值存储引擎。在该实施例中,该方法发布包括键的本地命令并从键值存储引擎接收值的数组。例如,REDIS数据库包含命令MGET,该命令以键列表作为参数并返回读取值的数组,如果找不到键,则返回nil。类似地,对于多写入操作,REDIS数据库包括命令MSET,该命令以键和值的列表作为参数,并返回状态指示符(例如,“OK”)以指示写操作成功。
在步骤612中,该方法将每个命令的结果填充到对应的缓存中并更新状态数组。
如上所述,对于多次读取操作,每个GET操作都返回一个值(例如,文件的内容或目录/文件的属性,等)。在步骤612,该方法用每个文件路径的GET操作的返回值填充结果数组。因此,结果数组包括返回值(例如,文件内容、属性、目录查找等)以及不具有相应值的任何键(例如,不存在的文件/目录)的可能为空的值的数组。
类似地,对于多次写入操作,每个PUT操作都返回一个值(例如,写入的字节数或写入的值)。在步骤612,该方法用每个文件路径的PUT操作的返回值填充结果数组。因此,结果数组包括返回值(例如,写入的字节、文件内容等)以及无法写入的任何键的可能空值的数组。
在一个实施例中,该方法可以进一步基于原始命令来修改结果值。例如,如果底层命令指定的长度参数短于给定键的返回值的长度,则该方法可以截断结果值。同样地,该方法可以基于给定读取指令的偏移参数的值来移除所返回的字节的前缀。
所述方法还基于底层多命令操作的结果来更新状态数组。因此,如果针对给定的键和操作(例如,读、写等)返回了有效值,则该方法可以将返回值更新为“0”表示操作成功,或者可以将返回值设置为读取的字节数(或其它值,具体取决于特定的底层操作,例如GET操作的文件内容)。如果键值不与键相对应或发生其它错误,则该方法可以设置一个非零状态代码,以指示发生了错误。
在步骤614中,该方法返回错误值或返回值。结合图3(具体地,步骤314)描述了返回错误/返回值的过程,通过引用将其公开内容整体合并于此。关于多命令操作,该方法可以返回存储在结果数组中的字节数,该字节关联为多命令操作的返回值和错误代码。如上所述,在步骤614中返回的特定数据取决于底层***调用和键值操作。
图7是示出根据本公开的一些实施例的用于在键值文件***上执行搜索操作的方法的流程图。
在步骤702中,该方法接收并执行搜索操作。
在一个实施例中,搜索操作可以包括要查询的目录列表、要用作查询条件的文件属性列表,以及用于存储匹配文件的文件名的查询结果缓存。目录可以包括与用于搜索文件的底层文件***中的位置相对应的文件路径的列表。文件属性可以包括关于诸如文件名,大小,扩展名之类的可参数的各种元数据。在一个实施例中,文件属性的列表可以包括属性和对应的条件值。例如,文件属性可以包括文件的大小和用作该文件属性的查询条件的范围(例如,大于30MB)。
在一些实施例中,搜索操作可以进一步包括超时参数,该超时参数指定用于执行搜索所花费的时间长度(例如,以毫秒为单位)。在该实施例中,该方法可以继续搜索键值存储引擎,直到达到超时为止,并且此时可以返回当时的搜索结果(即,缩写为完全搜索)。
在步骤704和步骤706中,该方法检查与文件路径相关联的文件路径权限,并分别确定是否对每个文件路径允许键值操作。结合图3(并且具体地,步骤304和306)更充分地描述了检查文件路径权限和允许或不允许键值操作的步骤,在此不重复其公开,而是通过引用将其整体并入本文。
在步骤708中,该方法生成与在步骤702中标识的文件相关联的元数据键。
在一个实施例中,键值存储引擎存储表示文件元数据和/或访问权限的键值对。在一个实施例中,该方法可以将文件或目录的文件属性存储为值。作为该过程的一部分,该方法可以利用单独的索引来索引文件/目录的属性数据。例如,可以在键值存储引擎中为文件的文件大小建立索引,以基于给定的文件大小或文件大小范围提供更快的查找。
在步骤702中一旦该方法识别出可查询目录中的所有相关文件,该方法就利用文件属性来生成最终的元数据键。给定的元数据键因此可以包括潜在文件匹配列表和一组可条件。例如,如果用户正在目录“/dir”(包括文件“file1”和“file2”)中查找超过30MB的文件,则元数据键可能会明确这些文件名和条件“$size:{$gt:“30MB”}”,其中“$gt”是表示范围的运算符,因此,最终的元数据键可以形成为{filepath:[“/dir/filel”,“/dir/file2”],$size:{$gt:“30MB”}}。以上示例仅是示例性的,并不用于限制查询操作符的数量。可以使用的其它运算符包括任何比较运算符、设置运算符、相等运算符或其它逻辑运算符。进一步的可以根据需要组合或链接运算符,以生成任意复杂度的查询条件。需要说明的是,文件路径列表和查询条件通常是互斥的。也就是说,查询中提供的文件列表不一定都满足查询条件,而是将它们用于进一步完善查询的范围。
除了条件运算符之外,元数据键还可以包括排序运算符或聚合运算符。例如,除了“$size”键之外,前面的示例还可以使用“$sort”键,其中排序键选择要进行排序的文件属性。由于有关文件的详细信息存储在键值存储引擎中,因此可以以临时性质在任何字段(例如文件属性)上实现排序操作。
在步骤710中,该方法将元数据键查询可发送到键值存储引擎。
在一个实施例中,发送元数据键可以包括如上所述通过API调用、网络请求或本地网络请求将生成的键传输到键值存储引擎。在一些实施例中,键值存储引擎可以定义用于发出元数据查询的特定命令。例如,键值存储引擎可以定义索引搜索运算符,该索引搜索运算符允许基于存储在键值存储引擎内的值进行查询。
在步骤712中,该方法用键值存储引擎返回值填充结果缓存。
在一个实施例中,结果缓存包括固定或动态的用于存储键值存储引擎查询结果的存储器的分配。在一个实施例中,键值存储引擎的结果可包括文件路径的列表。在该实施例中,该方法用文件路径填充结果缓存。
在步骤714中,该方法返回错误值或返回值。返回错误/返回值的过程结合图3(具体地,步骤314)进行描述,通过引用将其公开内容整体并入本文。关于搜索操作,该方法可以将结果缓存作为返回值返回。
图8是示出根据本公开的一些实施例的用于提供键值文件***的硬件设备的示例的硬件图。
如图8所示,设备800包括CPU 802,所述CPU 802包括进程802D、接口802C、内核802B和驱动器802A。CPU 802可以包括专用处理器、片上***,现场可编程门阵列(FPGA)、微控制器或任何合适的处理设备。
CPU 802在任何给定时间运行多进程802D。进程802D对应于由设备800执行的用户空间进程。在所示的实施例中,进程802D对应于结合图1讨论的应用,其公开内容通过引用整体并入本文。对应于进程802D的应用可以存储在存储器804中,并且可以经由总线814由CPU 802加载。存储器804包括RAM、ROM和其它存储装置。存储器804示出了用于存储诸如计算机可读指令、数据结构、程序模块或其它数据之类的信息的计算机存储介质的另一示例。存储器804用于控制设备800的低级操作的基本输入/输出***(“BIOS”)。大容量存储器还可以存储用于控制设备800的操作的操作***(包括接口802C、内核802B和驱动程序802A)。应当理解,该组件可以包括诸如UNIX或LINUXTM版本的通用操作***,或诸如WindowsClientTM或操作***的专用客户端通信操作***。操作***可以包括或与之交互的Java虚拟机模块,通过Java应用程序能够启用对硬件组件和/或操作***操作的控制。
进程802D经由接口802C与内核802B,驱动器802A以及最终***设备806、808、810和812交互。在一个实施例中,接口802C包括如前所述的***调用接口(例如,glibc)。
进程802D通过接口802C向内核802B发出***调用(例如,文件操作),内核802B经由一个或更多个设备驱动器802A控制***设备806、808、810、812、814和816。在图示的实施例中,接口802C、内核802B和驱动器802A被配置为提供对存储在存储器806中的文件***的访问,如结合图1更详细地描述,其公开内容通过引用整体并入本文。
存储器806包括非易失性存储介质。存储器806可以存储非活动应用程序和用户数据。存储在存储器806的数据对应于由加载到内核802B中的一个或更多个文件***所利用的原始数据。在一些实施例中,存储器806可以包括基于磁盘的存储介质,闪存存储介质,或其它类型的持久性,非易失性存储介质。
设备800还包括I/0控制器808。I/0控制器808提供对诸如鼠标、键盘、触摸屏等各种输入/输出设备以及诸如USB、蓝牙、红外和类似的连接接口等的连接接口的低级访问。
设备800还包括网络控制器810。网络控制器810包括用于将设备800连接到一个或更多个网络的电路,并且被构造为与一种或多种通信协议和技术一起使用。网络控制器810有时称为收发器,收发设备或网络接口卡(NIC)。
设备800还包括显示器812。显示器812可以是液晶显示器(LCD)、气体等离子体、发光二极管(LED)或与计算设备一起使用的任何其它类型的显示器。显示器812还可以包括触敏屏,该触敏屏被设置为从诸如触笔或来自人的手的手指的对象接收输入。
应当注意,设备800的组件的列表仅仅是示例性的,并且设备800内可以存在其它组件,包括音频接口、小键盘、照明器、电源以及未明确示出的其它组件。
为了本公开的目的,模块是执行或便于本文描述的过程、特征和/或功能(有无人为互动或增强)的软件、硬件或固件(或其组合)***、过程或功能性或其组件。模块可以包括子模块。模块的软件组件可以存储在用于由处理器执行的计算机可读介质上。模块可以与一台或多台服务器集成在一起,也可以由一台或多台服务器加载并执行。一个或更多个模块可以被组合为引擎或应用程序。
本领域技术人员将认识到,本公开的方法和***可以以许多方式实现,并且因此不受前述示例性实施例和示例的限制。换句话说,由单个或多个组件,以硬件和软件或固件的各种组合以及各个功能来执行的功能元件可以分布在客户端级别或服务器级别或两者上的软件应用程序中。就这一点而言,本文描述的不同实施例的任何数量的特征可以被组合成单个或多个实施例,并且可能是具有少于或多于本文描述的所有特征的替代实施例。
功能还可以全部或部分地以现在或将来已知的方式分布在多个组件之间。因此可以用多个软件/硬件/固件组合本文所述的功能、接口和偏好。此外,本公开的范围涵盖用于执行所描述的特征、功能和接口的常规已知方式,以及由现在和以后的本领域技术人员可以对本文所述的硬件或软件或固件组件进行的可以理解的那些变形和修改。
此外,通过示例的方式提供了在本公开中呈现并描述为流程图的方法的实施例,以便提供对技术的更完整的理解。所公开的方法不限于本文提出的操作和逻辑流程。改变了各种操作的顺序,并且其中被描述为较大操作的一部分的子操作被独立地执行的替代实施例也考虑在其中。
尽管出于本公开的目的已经描述了各种实施例,但是这样的实施例不应被认为将本公开的教导限于那些实施例。可以对上述元件和操作进行各种改变和修改以获得保留在本公开中描述的***和过程的范围内的结果。
Claims (20)
1.一种使用键值存储***简化文件***操作的方法,用于实现为来自KVFS库或内核模块的API调用,包括:
从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作,其中,所述至少一文件操作包括事务操作;
基于所述文件操作生成键值操作,所述键值操作包括包含文件路径的键;
在键值存储引擎执行所述键值操作;
从所述键值存储引擎接所述收键值操作的结果;
根据所述键值操作的结果生成结果值;并将所述结果值返回所述应用程序;
其中,所述键值操作返回结果为存储在事务操作的结果缓存内的结果,所述事务操作为以下至少一种操作:要执行的操作的数组、文件数组、缓存数组和原子标记,所述操作数组包括文件操作的列表,所述文件数组包括与操作相对应的文件的列表,所述缓存数组包括用于存储相应操作的结果的空数组,所述原子标记包括指示是否应原子执行事务的布尔标记。
2.根据权利要求1所述的方法,其中,所述至少一文件操作包括写操作,所述写操作包括要写入的多个字节,
并且其中,基于所述文件操作生成键值操作还包括:使用所述文件路径作为键和字节数作为值来生成PUT请求。
3.根据权利要求1所述的方法,其中,所述事务操作包括多个子操作,
其中,基于所述文件操作生成键值操作还包括基于子操作生成包含多个键值操作的键值事务,
其中,在键值存储引擎执行键值操作包括执行所有键值操作或不执行任何键值操作。
4.根据权利要求3所述的方法,进一步包含在检测到执行所述多个子操作之一时的错误时回滚所述多个子操作。
5.根据权利要求1所述的方法,其中,所述至少一文件操作包括多命令操作,所述多命令操作包括文件路径的数组,
并且其中,基于所述文件操作生成键值操作还包括为文件路径数组中的每个文件路径生成多个键值指令,所述多个键值指令是基于所述多重命令操作的类型而生成的。
6.如权利要求5所述的方法,其特征在于,基于所述键值操作的结果生成结果值包括用所述多个键值指令中的每一个的结果填充结果缓存。
7.根据权利要求1所述的方法,其中,所述至少一文件操作包括搜索操作,所述搜索操作包括目录列表、文件属性列表以及查询结果缓存,并且其中所述方法还包括:
识别响应于目录的文件列表的多个文件路径;和
基于多个文件路径和文件属性列表来生成元数据键。
8.根据权利要求1所述的方法,其中,在基于所述文件操作生成键值操作之前,所述方法还包括:验证所述应用程序具有访问由所述文件路径标识的文件的权限。
9.如权利要求1所述的方法,其特征在于,还包括基于所述文件操作对由所述文件路径表示的文件执行文件***操作,其中,基于所述文件操作执行文件***操作包括:向底层分层文件***发出***调用。
10.一种使用键值存储***简化文件***操作的设备,包括:
处理器;和
非暂时性存储器,在其中存储有计算机可执行指令,所述指令在由处理器执行时会导致设备执行以下操作:
从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作;
基于所述文件操作生成键值操作,所述键值操作包括包含文件路径的键,其中,所述至少一文件操作包括事务操作;
在键值存储引擎执行所述键值操作;
从所述键值存储引擎接收所述键值操作的结果;
根据所述键值操作的结果生成结果值;
和
将所述结果值返回所述应用程序;
其中,所述键值操作返回结果为存储在事务操作的结果缓存内的结果,所述事务操作为以下至少一种操作:要执行的操作的数组、文件数组、缓存数组和原子标记,所述操作数组包括文件操作的列表,所述文件数组包括与操作相对应的文件的列表,所述缓存数组包括用于存储相应操作的结果的空数组,所述原子标记包括指示是否应原子执行事务的布尔标记。
11.根据权利要求10所述的设备,其中,所述至少一文件操作包括写操作,所述写操作包括要写入的多个字节,
并且其中,基于所述文件操作生成键值操作还包括:使用所述文件路径来作为键和字节数作为值来生成PUT请求。
12.根据权利要求10所述的设备,其中,所述事务操作包括多个子操作,
并且其中,基于所述文件操作生成键值操作还包括基于子操作生成包含多个键值操作的键值事务,
其中,在键值存储引擎上执行键值操作包括执行所有键值操作或不执行任何键值操作。
13.根据权利要求12所述的设备,其中,所述计算机可执行指令还包括在检测到执行所述多个子操作之一中的错误时使所述设备回滚所述多个子操作的指令。
14.根据权利要求10所述的设备,其中,所述至少一文件操作包括多命令操作,所述多命令操作包括文件路径的数组,
并且其中,基于所述文件操作生成键值操作还包括为文件路径数组中的每个文件路径生成多个键值指令,所述多个键值指令是基于所述多重命令操作的类型而生成的。
15.根据权利要求14所述的设备,其中,基于所述键值操作的结果来生成结果值包括:用所述多个键值指令中的每一个的结果来填充结果缓存。
16.根据权利要求10所述的设备,其中,所述至少一文件操作包括搜索操作,所述搜索操作包括目录列表、文件属性列表以及查询结果缓存,并且其中,所述计算机可执行指令还包括使设备执行以下操作的指令:
识别相应于目录的文件列表中的多个文件路径;和
并基于多个文件路径和文件属性列表生成元数据键。
17.根据权利要求10所述的设备,其中,在基于所述文件操作生成键值操作之前,所述计算机可执行指令还包括使所述设备验证所述应用程序具有访问由所述文件路径标识的文件的权限的指令。
18.根据权利要求10所述的设备,其中,所述指令还使所述设备基于所述文件操作来执行文件***操作,基于所述文件操作来执行文件***操作包括向底层分层文件***发出***调用。
19.一种使用键值存储***简化文件***操作的***,包括:
一个或更多个应用程序,所述一个或更多个应用程序在处理器上执行;
存储设备,所述存储设备存储多个文件;
键值存储引擎,所述键值存储***被配置为存储具有相关值的多个键,所述键对应于表示所述多个文件的文件路径;和
键值文件***模块,所述键值文件***模块被配置为:
从应用程序接收至少一文件操作,所述文件操作包括文件路径和所请求的操作,其中,所述至少一文件操作包括事务操作;
基于所述文件操作生成键值操作,所述键值操作包括包含文件路径的键;
在键值存储引擎上执行所述键值操作;
从所述键值存储引擎接收所述键值操作的结果;
根据所述键值操作的结果生成结果值;和
将所述结果值返回所述应用程序;
其中,所述键值操作返回结果为存储在事务操作的结果缓存内的结果,所述事务操作为以下至少一种操作:要执行的操作的数组、文件数组、缓存数组和原子标记,所述操作数组包括文件操作的列表,所述文件数组包括与操作相对应的文件的列表,所述缓存数组包括用于存储相应操作的结果的空数组,所述原子标记包括指示是否应原子执行事务的布尔标记。
20.根据权利要求19所述的***,其中,所述至少一文件操作包括写操作、事务操作、多命令操作或搜索操作中的一个。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/711,409 US11016932B2 (en) | 2017-09-21 | 2017-09-21 | Systems, methods, and apparatuses for simplifying filesystem operations utilizing a key-value storage system |
US15/711,409 | 2017-09-21 | ||
PCT/US2018/042337 WO2019060025A1 (en) | 2017-09-21 | 2018-07-16 | SYSTEMS, METHODS AND APPARATUS FOR SIMPLIFYING FILE SYSTEM OPERATIONS USING A KEY VALUE STORAGE SYSTEM |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111108493A CN111108493A (zh) | 2020-05-05 |
CN111108493B true CN111108493B (zh) | 2023-06-20 |
Family
ID=65720290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880061222.0A Active CN111108493B (zh) | 2017-09-21 | 2018-07-16 | 使用键值存储***简化文件***操作的***、方法和设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11016932B2 (zh) |
CN (1) | CN111108493B (zh) |
WO (1) | WO2019060025A1 (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6721832B2 (ja) * | 2016-08-24 | 2020-07-15 | 富士通株式会社 | データ変換プログラム、データ変換装置及びデータ変換方法 |
US11816043B2 (en) | 2018-06-25 | 2023-11-14 | Alibaba Group Holding Limited | System and method for managing resources of a storage device and quantifying the cost of I/O requests |
US11615142B2 (en) * | 2018-08-20 | 2023-03-28 | Salesforce, Inc. | Mapping and query service between object oriented programming objects and deep key-value data stores |
US11061735B2 (en) | 2019-01-02 | 2021-07-13 | Alibaba Group Holding Limited | System and method for offloading computation to storage nodes in distributed system |
US11194706B2 (en) * | 2019-09-05 | 2021-12-07 | Facebook Technologies, Llc | System and method for split storage stack |
US11169816B2 (en) * | 2019-09-05 | 2021-11-09 | Facebook Technologies, Llc | System and method for key value store |
US11442873B2 (en) * | 2019-09-06 | 2022-09-13 | Meta Platforms Technologies, Llc | Microkernel architecture with enhanced reliability and security |
US11617282B2 (en) | 2019-10-01 | 2023-03-28 | Alibaba Group Holding Limited | System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers |
CN111078139B (zh) * | 2019-11-14 | 2023-10-20 | 北京迈格威科技有限公司 | 一种实现s3标准对象存储接口的方法及装置 |
CN111008233B (zh) * | 2019-11-24 | 2023-02-28 | 浪潮电子信息产业股份有限公司 | 一种kv数据库的访问方法、装置及设备 |
CN111125095B (zh) * | 2019-11-26 | 2023-11-10 | 北京文渊佳科技有限公司 | 数据前缀添加的方法、装置、电子设备及介质 |
US11556277B2 (en) * | 2020-05-19 | 2023-01-17 | Alibaba Group Holding Limited | System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification |
US11507499B2 (en) | 2020-05-19 | 2022-11-22 | Alibaba Group Holding Limited | System and method for facilitating mitigation of read/write amplification in data compression |
US11500700B2 (en) | 2020-05-28 | 2022-11-15 | International Business Machines Corporation | Leasing prioritized items in namespace indices |
US11188419B1 (en) * | 2020-05-28 | 2021-11-30 | International Business Machines Corporation | Namespace indices in dispersed storage networks |
US11194660B1 (en) * | 2020-05-28 | 2021-12-07 | International Business Machines Corporation | Listing and protocol for namespace index |
US11243695B2 (en) | 2020-05-28 | 2022-02-08 | International Business Machines Corporation | Leasing unordered items in namespace indices |
CN112181916B (zh) * | 2020-09-14 | 2024-04-09 | 北京星辰天合科技股份有限公司 | 基于用户空间文件***fuse的文件预读方法及装置、电子设备 |
US11734115B2 (en) | 2020-12-28 | 2023-08-22 | Alibaba Group Holding Limited | Method and system for facilitating write latency reduction in a queue depth of one scenario |
US20220237151A1 (en) * | 2021-01-22 | 2022-07-28 | Scality, S.A. | Fast and efficient storage system implemented with multiple cloud services |
CN112925755A (zh) * | 2021-02-18 | 2021-06-08 | 安徽中科美络信息技术有限公司 | 一种文件***超长路径智能存储方法及装置 |
US11726699B2 (en) | 2021-03-30 | 2023-08-15 | Alibaba Singapore Holding Private Limited | Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification |
CN113127490B (zh) * | 2021-04-23 | 2023-02-24 | 山东英信计算机技术有限公司 | 一种键名称生成方法、装置和计算机可读存储介质 |
CN113590696B (zh) * | 2021-06-18 | 2023-12-22 | 济南浪潮数据技术有限公司 | 一种分布式应用程序协调服务的管理方法、*** |
CN115525604A (zh) * | 2021-06-24 | 2022-12-27 | 三星电子株式会社 | 键-值存储设备、主机和主机存储*** |
US20230074216A1 (en) * | 2021-09-08 | 2023-03-09 | EMC IP Holding Company LLC | System and method for preserving access control lists in storage devices |
US20230134266A1 (en) * | 2021-10-29 | 2023-05-04 | Pure Storage, Inc. | Storage Operation Routing in a Container System |
US12026382B2 (en) | 2021-10-29 | 2024-07-02 | Pure Storage, Inc. | Storage path routing in a container system |
CN114860670A (zh) * | 2022-03-25 | 2022-08-05 | 广东统信软件有限公司 | 用户空间文件***的文件操作方法及用户空间文件*** |
CN116049131B (zh) * | 2022-06-10 | 2023-10-13 | 荣耀终端有限公司 | 文件管理方法、***、电子设备及存储介质 |
CN116795296B (zh) * | 2023-08-16 | 2023-11-21 | 中移(苏州)软件技术有限公司 | 一种数据存储方法、存储设备及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567003A (zh) * | 2009-05-27 | 2009-10-28 | 清华大学 | 并行文件***中资源的管理和分配方法 |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件***元数据管理方法 |
CN103502940A (zh) * | 2011-12-21 | 2014-01-08 | 华为技术有限公司 | 一种分布式***中处理事务的方法、相关设备及*** |
CN103902632A (zh) * | 2012-12-31 | 2014-07-02 | 华为技术有限公司 | 键值存储***中构建文件***的方法、装置及电子设备 |
US8904047B1 (en) * | 2012-06-29 | 2014-12-02 | Emc Corporation | Cloud capable storage system with high perormance nosql key-value pair operating environment |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7418435B1 (en) | 1999-08-05 | 2008-08-26 | Oracle International Corporation | Multi-model access to data |
US6856993B1 (en) * | 2000-03-30 | 2005-02-15 | Microsoft Corporation | Transactional file system |
US8244712B2 (en) | 2003-03-18 | 2012-08-14 | Apple Inc. | Localized viewing of file system names |
US7836276B2 (en) | 2005-12-02 | 2010-11-16 | Nvidia Corporation | System and method for processing thread groups in a SIMD architecture |
US10558705B2 (en) * | 2010-10-20 | 2020-02-11 | Microsoft Technology Licensing, Llc | Low RAM space, high-throughput persistent key-value store using secondary memory |
US9922046B2 (en) | 2011-04-26 | 2018-03-20 | Zettaset, Inc. | Scalable distributed metadata file-system using key-value stores |
US9158632B1 (en) | 2011-06-30 | 2015-10-13 | Emc Corporation | Efficient file browsing using key value databases for virtual backups |
US8700683B2 (en) | 2011-10-24 | 2014-04-15 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
US9037556B2 (en) * | 2012-12-03 | 2015-05-19 | Vmware, Inc. | Distributed, transactional key-value store |
US9442775B2 (en) | 2014-02-27 | 2016-09-13 | International Business Machines Corporation | Salvaging hardware transactions with instructions to transfer transaction execution control |
CN104077374B (zh) * | 2014-06-24 | 2018-09-11 | 华为技术有限公司 | 一种实现ip盘文件存储的方法及装置 |
US10235404B2 (en) | 2014-06-25 | 2019-03-19 | Cohesity, Inc. | Distributed key-value store |
CN105550345B (zh) | 2015-12-25 | 2019-03-26 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
US10649658B2 (en) | 2015-12-31 | 2020-05-12 | Vmware, Inc. | File system based key value service |
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 |
-
2017
- 2017-09-21 US US15/711,409 patent/US11016932B2/en active Active
-
2018
- 2018-07-16 WO PCT/US2018/042337 patent/WO2019060025A1/en active Application Filing
- 2018-07-16 CN CN201880061222.0A patent/CN111108493B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567003A (zh) * | 2009-05-27 | 2009-10-28 | 清华大学 | 并行文件***中资源的管理和分配方法 |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件***元数据管理方法 |
CN103502940A (zh) * | 2011-12-21 | 2014-01-08 | 华为技术有限公司 | 一种分布式***中处理事务的方法、相关设备及*** |
US8904047B1 (en) * | 2012-06-29 | 2014-12-02 | Emc Corporation | Cloud capable storage system with high perormance nosql key-value pair operating environment |
CN103902632A (zh) * | 2012-12-31 | 2014-07-02 | 华为技术有限公司 | 键值存储***中构建文件***的方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
梅飞 ; 曹强 ; .SSDKV:一种SSD友好的键值对存储***.计算机工程与科学.2016,(第07期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111108493A (zh) | 2020-05-05 |
US20190087431A1 (en) | 2019-03-21 |
WO2019060025A1 (en) | 2019-03-28 |
US11016932B2 (en) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111108493B (zh) | 使用键值存储***简化文件***操作的***、方法和设备 | |
EP3446239B1 (en) | Versioned hierarchical data structures in a distributed data store | |
US8984031B1 (en) | Managing data storage for databases based on application awareness | |
US7831643B1 (en) | System, method and computer program product for multi-level file-sharing by concurrent users | |
US7739312B2 (en) | Data containerization for reducing unused space in a file system | |
US9348842B2 (en) | Virtualized data storage system optimizations | |
JP2708331B2 (ja) | ファイル装置およびデータファイルアクセス方法 | |
US8370401B2 (en) | Merging containers in a multi-container system | |
US7107385B2 (en) | Storage virtualization by layering virtual disk objects on a file system | |
US7937453B1 (en) | Scalable global namespace through referral redirection at the mapping layer | |
US8849880B2 (en) | Providing a shadow directory and virtual files to store metadata | |
JP4653106B2 (ja) | タイプ・パス索引付け | |
US20060059204A1 (en) | System and method for selectively indexing file system content | |
EP1376405A2 (en) | System and method for managing file names for file system filter drivers | |
CN110799960A (zh) | 数据库租户迁移的***和方法 | |
US20100088349A1 (en) | Virtual file system stack for data deduplication | |
US9449007B1 (en) | Controlling access to XAM metadata | |
US7899795B1 (en) | Method and system for recovering lost data volumes | |
US9921765B2 (en) | Partial snapshots in virtualized environments | |
EP3814930B1 (en) | System and method for bulk removal of records in a database | |
US10909091B1 (en) | On-demand data schema modifications | |
EP4046032A1 (en) | Supporting piecewise update of json document efficiently | |
AU2011293014B2 (en) | Method and system for extending data storage system functions | |
US20060253497A1 (en) | System and method for associating computational procedures with stored data objects | |
US20220164322A1 (en) | Techniques for using an in-memory only file system as an interface for managing computer systems and user space file systems |
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 |