固态驱动器、分布式数据存储系统和利用键值存储的方法与流程

文档序号:18414339发布日期:2019-08-13 19:09阅读:203来源:国知局
本申请主张在2018年2月6日提出申请的序列号为62/626,839的美国临时专利申请的权利及优先权,所述美国临时专利申请的公开内容全文并入本申请供参考。本公开大体来说涉及键-值存储装置,更具体来说涉及一种在分布式文件系统中利用键-值存储来高效地存储数据及元数据的系统及方法。
背景技术
::在传统的数据存储节点中,通常使用位于数据存储节点上的现有的文件系统来存储键-值映射(例如,块识别符(identifier,id)对数据内容的映射)。之所以这样,是因为基础的存储装置并不在本机支持数据存储节点所需的键-值接口。因此,需要附加软件层(通常为文件系统)来提供键-值接口。添加文件系统会引入存储器开销及处理器开销。驻留在数据存储节点与实际的数据存储装置之间的文件系统迫使数据存储装置引起额外的效率低下(例如,超额配置(overprovisioning)及较高的写入放大)并且在资源有限的装置环境中需要更多中央处理器(centralprocessingunit,cpu)循环来执行例如垃圾收集等任务。技术实现要素:根据一个实施例,一种固态驱动器(solid-statedrive,ssd)包括:多个数据块;用于存取所述多个数据块的多个闪存信道及多个通路;以及固态驱动器控制器,对所述多个数据块的块大小进行配置。数据文件与一个或多个键-值对一起存储在所述固态驱动器中,且每一个键-值对具有块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。根据另一个实施例,一种分布式数据存储系统包括:客户机;名称节点,包括第一键-值(key-value,kv)固态驱动器(ssd);以及数据节点,包括第二键-值固态驱动器,其中所述第二键-值固态驱动器包括多个数据块、用于存取所述多个数据块的多个闪存信道及多个通路、以及用于配置所述多个数据块的块大小的固态驱动器控制器。所述客户机向所述名称节点发送包括用于存储数据文件的文件识别符的创建文件请求,并向所述名称节点发送分配命令以分配所述多个数据块中与所述数据文件相关联的一个或多个数据块。所述名称节点向所述客户机返回所述一个或多个数据块的块识别符以及被指派存储所述一个或多个数据块的所述数据节点的数据节点识别符。所述客户机向所述数据节点发送块存储命令以存储所述一个或多个数据块。所述第二键-值固态驱动器存储所述一个或多个数据块作为键-值对,且所述键-值对中的至少一个键-值对具有所述块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。根据又一实施例,一种利用键值存储的方法包括:从客户机向名称节点发送创建文件请求,其中所述创建文件请求包括用于存储数据文件的文件识别符;将所述文件识别符作为键-值对存储在所述名称节点的第一键-值(kv)固态驱动器(ssd)中,其中所述文件识别符作为键被存储在所述键-值中,且与所述键相关联的值是空的;从所述客户机向所述名称节点发送分配命令,以分配与所述数据文件相关联的一个或多个数据块;在所述名称节点处将块识别符指派给所述一个或多个数据块中的至少一者并指派数据节点来存储所述一个或多个数据块;从所述名称节点向所述客户机返回所述块识别符及所述数据节点的数据节点识别符;从所述客户机向所述数据节点发送写入块请求,其中所述写入块请求包括所述块识别符及内容;以及将所述一个或多个数据块作为键-值对保存在所述数据节点的第二键-值固态驱动器中。所述数据节点的所述第二键-值固态驱动器包括具有块大小的一个或多个数据块。所述键-值对中的至少一个键-值对具有块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。现将参照附图更具体地阐述包括实施方式的各种新颖细节及事件组合在内的以上及其他优选特征,且以上及其他优选特征在权利要求书中指出。应理解,本文所述具体系统及方法仅作为例示示出且不作为限制。如所属领域中的技术人员应理解,本文所述原理及特征可用于各种各样的实施例中,而此并不背离本公开的范围。附图说明作为本说明书的一部分而包括在内的各个附图示出当前优选的实施例,且与以上所给出的大体说明及以下所给出的对优选实施例的详细说明一起用于解释及教示本文所述原理。图1a示出现有技术分布式数据存储系统的方块图。图1b示出根据一个实施例的包括键-值存储装置的示例性分布式数据存储系统的方块图。图2a示出示例性ssd的系统配置。图2b示出根据一个实施例的键-值ssd的示例性系统配置。图3示出根据一个实施例的实现信道级并行性(channel-levelparallelism)的示例性ssd信道及管芯架构。图4示出根据一个实施例的实现通路级并行性(way-levelparallelism)的示例性ssd信道及管芯架构。图5示出根据一个实施例的实现管芯/芯片级并行性(die/chip-levelparallelism)的示例性ssd信道及管芯架构。图6a示出示例性ssd的示例性映射方案。图6b示出根据一个实施例的kvssd的示例性映射方案。图7示出根据一个实施例的在分布式文件系统的kvssd中创建并存储文件的示例性过程。图8示出根据一个实施例的读取存储在分布式文件系统的kvssd中的文件的示例性过程。图9示出根据一个实施例的删除分布式文件系统的kvssd中的文件的示例性过程。各个图未必是按比例绘制,且出于说明目的,在所有图中具有相似结构或功能的元件一般是由相同的参考编号表示。各个图仅旨在方便说明本文所述各种实施例。各个图并不阐述本文所公开教示内容的每一方面且并不限制权利要求书的范围。[符号的说明]100a、100b:分布式数据存储系统;101:客户机应用/客户机;105:文件;111、720:名称节点;115:块映射;121、221、740:数据节点;140:ssd;150:键-值ssd/kvssd;710:客户机;730:kvssd(kv1)/kvssd;750:kvssd(kv2)/kvssd;761:请求;762、768:键-值存储命令;763、764、769、770、773、774、965:完成消息;765:分配命令;766:响应;767:块写入请求;771:提交写入命令;772:附加命令;861:读取文件请求;862:检索命令;863、864、963:映射信息;865:块读取命令;866:块检索命令;867:内容;868:块内容;961:文件删除命令;962:键-值检索命令;964:键-值删除命令;966、967:块删除命令;968、969:返回;970:异步消息。具体实施方式本文所公开的特征及教示内容中的每一者可单独使用或结合其他特征及教示内容来使用以提供在分布式文件系统中利用键-值存储来高效地存储数据及元数据的系统及方法。参照附图更详细地阐述代表性实例,这些代表性实例单独地使用及组合地使用这些附加特征及教示内容中的许多特征及教示内容。此详细说明仅旨在向所属领域中的技术人员教示用于实践本教示内容的各个方面的进一步细节,而并非旨在限制权利要求书的范围。因此,在本详细说明中以上所公开特征的组合可能未必是在最广泛意义上实践本教示内容所必需的,而是相反,仅是为了具体阐述本教示内容的代表性的实例而教示。在以下说明中,仅出于解释目的来阐述特定术语以提供对本公开的透彻理解。然而,对于所属领域中的技术人员而言将显而易见,这些特定细节并非是实践本公开的教示内容所必需的。本文的详细说明的一些部分是以算法及对计算机存储器内的数据位进行的操作的符号表示法来呈现。这些算法描述及表示法被数据处理领域中的技术人员用于向所属领域中的其他技术人员有效地传达其工作的实质。算法在此处且一般而言均被视为能得到所期望结果的步骤的自洽序列(self-consistentsequence)。所述步骤需要对物理量进行实体操纵。通常(尽管未必一定如此),这些量会呈能够被存储、传输、组合、比较及以其他方式被操纵的电信号或磁信号的形式。已证明,主要出于通用的原因,将这些信号称为位、值、元件、符号、字符、项、数字等有时是便利的。然而,应记住,这些用语中的所有用语及所有相似用语均与适宜的物理量相关联且仅作为应用于这些量的便利标记。除非通过阅读以下论述显而易见地另有具体说明,否则应理解,在本说明通篇中,使用例如“处理(processing)”、“计算(computing)”、“运算(calculating)”、“判断(determining)”、“显示(displaying)”等用语进行的论述是指计算机系统或相似电子计算装置的动作及进程,所述计算机系统或相似电子计算装置操纵在计算机系统的寄存器及存储器内被表示为物理(电子)量的数据并将所述数据转换成在计算机系统存储器或寄存器或者其他这种信息存储装置、信息传输装置或信息显示装置内被相似地表示为物理量的其他数据。另外,代表性实例及附属权利要求的各个特征可以并未具体地及明确地枚举的方式加以组合以提供本教示内容的附加的有用实施例。还应明确注意,出于原始公开内容的目的以及出于限制所主张主题的目的,所有值范围或对实体的群组的指示均用于公开每个可能的中间值或中间实体。还应明确注意,图中所示各组件的尺寸及形状被设计成有助于理解如何实践本教示内容,而并非旨在限制实例中所示尺寸及形状。本公开阐述一种解决由分布式文件系统(例如,海杜普分布式文件系统(hadoopdistributedfilesystem,hdfs))引起的效率低下问题的系统及方法。本系统及方法通过将数据直接存储在数据存储装置中来消除对使用文件名称作为块识别符且使用文件的数据内容(或文件的数据内容的一部分)作为值的键-值文件系统的需要。可将数据直接存储在键-值对中的这种数据存储装置在本文中指代为键-值(kv)固态驱动器(ssd),简称kvssd。kvssd支持其中将块识别符作为键且将数据作为值的键-值存储。本系统及方法可提供高效的及简化的键-值数据存储系统,所述键-值数据存储系统包括可将数据作为键/值对直接存储在一个或多个kvssd中的kvssd。因此,本键-值数据存储系统可在提供更快、更简单且可扩展的数据存储解决方案的同时消耗更少的能量及资源。根据一个实施例,kvssd可与数据存储节点相结合地实施将数据存储在键-值对中的文件系统。通过使用可直接存储键-值数据的一个或多个kvssd,本键-值数据存储系统可不再需要数据存储节点中的文件系统。数据存储节点可将关于数据存储节点的行为的信息向下传递到kvssd以对kvssd的内部数据结构及资源进行优化,从而适应由数据存储节点规定的工作负载。另外,可将存储器内(in-memory)映射表卸载到kvssd以使用数据存储节点与kvssd之间的键-值接口提供永久数据。根据一个实施例,本键-值数据存储系统可支持现有的文件系统(例如,hdfs)。具体来说,被优化用于大的数据块的文件系统可受益于本键-值数据存储系统。举例来说,kvssd的元数据(或哈希表(hashtable))以大的块大小(例如,10兆字节(mb)到100mb)进行分摊。分布式文件系统(例如,hdfs)具有不可变数据块(immutabledatablock),所述不可变数据块由于键的值不会改变而无需来回移动,由此使存储在kvssd中的数据及元数据的内部写入放大因数(writeamplificationfactor,waf)最小化。另外,本键-值数据存储系统可减小与更新哈希表值相关联的cpu开销。本键-值数据存储系统在改善性能及资源利用的同时具有简化的闪存转换层(flashtranslationlayer,ftl)。当kvssd与不可变分布式存储系统(例如,hdfs)一起使用时,可减小元数据开销。这是由于在这种分布式文件系统中,键的内容无法改变,因此存储键/值对的kvssd不再需要将值标记为旧的并将键指向kvssd中的闪存介质上的新的值内容。换句话说,kvssd不需要支持重写(overwrite)。另外,对于分布式文件系统(例如,hdfs),块具有固定大小,因此kvssd不需要处置动态大小的值,从而使得值位置的管理更简单。举例来说,当所有块具有固定大小时,可使用基于直接索引的数据结构。利用分布式文件系统中的这些简化,可简化键/值元组(key/valuetuple)的ftl管理。分布式文件系统可能将元数据保持在单个数据存储节点的存储器中,由此限制元数据的可扩展性。本键-值数据存储系统可消除在管理其他分布式文件系统可能需要的元数据方面的存储器限制。本键-值数据存储系统可实现不是面向延迟(latency-oriented)的高的吞吐量。由于hdfs具有这样大的块大小,再加上可能超过存储器容量的数据集,因此页面高速缓存可能无法大幅改善数据存储及管理性能。因此,即使kv-ssd不支持页面高速缓存,kvssd也不会使具有kv能力的数据节点的性能劣化。hdfs的集中式高速缓存管理特征提供一种明确地告知数据节点在堆外(off-heap)高速缓存某些块的机制。通过允许具有kv能力的数据节点仍从基于存储器的高速缓存获益而无需制定策略决策来确定要进行高速缓存的块,可将这种特征实施在kv启用的数据节点中。本键-值数据存储系统在读取操作及写入操作中能够实现高的并行性。由于每一个数据块的延迟不那么重要,且hdfs通过读取/写入大数目的数据块表现出高度的并行性,因此不需要将命令(例如,读取命令、写入命令)分条并将所述命令发送到kvssd上的许多信道。每一个数据块均可被直接写入及读取到kvssd的一个信道或一个芯片/管芯以通过利用固有并行性的好处来提供吞吐量。这还可简化kvssd的ftl以及查找过程的复杂度。所述并行性还可根据kvssd的擦除块的上下文被应用于多个信道或芯片/管芯。继而,此可通过将ssd块/页面大小匹配到分布式文件系统(例如,hdfs)的块大小来最小化或消除ssd超额配置。因此,本键-值数据存储系统可利用被发到kvssd且被对齐到固定块大小的装置擦除块来增大吞吐量,这是由于对齐的擦除块及数据大小在闪存信道之间将需要较少的同步。通过将元数据映射卸载到kvssd,元数据节点中的存储器不再是分布式存储系统中的瓶颈。图1a示出现有技术分布式数据存储系统的方块图。客户机应用101要将文件105存储在分布式数据存储系统100a中的数据节点121中。文件105包括两个数据块(即,ω及σ)。在将文件105写入到数据节点121之后,客户机101将与文件105相关联的元数据存储在名称节点(或元数据节点)111的块映射115中。在hdfs的上下文中,名称节点111被称为主装置(master),且数据节点121被称为从装置(slave)。主装置可以hdfs目录结构存储整个hdfs的文件的元数据。尽管以下所述实例中的一些实例提到hdfs,然而应理解,还可使用被优化用于大量数据的其他文件系统,而此并不背离本公开的范围。名称节点111维持块映射115,块映射115包含包括块识别符的文件105与存储文件105中所包括的块的数据节点121之间的映射信息。在本实例中,块ω及块σ分别具有块识别符“11”及块识别符“99”。当客户机101需要对文件105(或数据块ω及σ)进行存取时,客户机101与名称节点111进行通信以基于存储在块映射115中的关联信息来识别与文件105相关联的块及要存取文件105(或数据块)的数据节点121(dn1)。数据节点121包括具有目录结构的本地文件系统(例如,linux的ext4文件系统),以将每一个块作为文件存储在目录中。文件名称可为与文件105的相应块对应的唯一块识别符(“11”或“99”),且文件的内容是块数据。由于块需要被存储为文件,因此数据节点121需要附加软件层(例如,本地ext4文件系统)、附加存储器(例如,linux的目录项高速缓存(dentrycache))及将键-值按块转换到文件系统的cpu处理(例如,便携式操作系统接口(portableoperatingsysteminterface,posix)及文件系统专用命令处理(filesystem-specificcommandprocessing),且文件系统开销包括元数据管理。ssd140的控制器逻辑需要执行附加处理以维持块映射115的一致性。hdfs块大小可不与内部ssd页面/块映射对齐。这可增大ssd的内部waf以及超额配置的空间,从而导致垃圾收集更频繁且总拥有成本(totalcostofownership,tco)增大。图1b示出根据一个实施例的包括键-值存储装置的示例性分布式数据存储系统的方块图。客户机应用101将文件105存储在分布式数据存储系统100b中的数据节点221中。举例来说,分布式数据存储系统100b是hdfs。包括键-值ssd150的数据节点221可直接存储数据块ω及σ。与包括传统ssd140的数据节点121相反,数据节点221不需要本地文件系统(例如,ext4),这是由于文件105的数据块被作为键-值对直接存储在kvssd150中。kvssd150为数据节点221提供与客户机应用101进行通信的接口,所述接口能够实现数据块作为键-值对的直接存储。因此,数据节点221不需要本地文件系统层,因此可能不会引起图1a所示传统数据节点121的存储器开销及cpu开销。根据一个实施例,分布式数据存储系统100b使客户机应用101与数据节点221之间能够交换信息。这一过程被称为登记过程或配置过程。在登记过程期间,数据节点221可告知客户机应用101:数据节点221具有可将数据块作为键-值对进行存储的一个或多个kvssd。在完成登记过程之后,客户机应用101知晓其可向数据节点221中所包括的kvssd150发出kvssd专用输入/输出(input/output,i/o)装置命令(例如,/dev/kvssd1,其中kvssd1是数据节点221的id)。这会简化客户机应用101与数据节点221之间的输入/输出路径。数据节点221可发出“置入(put)”命令来将每一个数据块存储为键-值对,而并非依赖本地文件系统来创建数据块及将数据块写入到文件。读取kvssd150中的所存储键-值对的过程是相似的;数据节点221可向kvssd150直接发出“获取(get)”命令以检索与键相关联的数据块而非通过文件系统接口来检索数据块。在相似的过程之后可进行删除过程。在登记过程期间,可向kvssd150提供关于分布式数据存储系统100b的行为的信息。可基于分布式数据存储系统100b的行为、针对分布式数据存储系统100b来专门对kvssd150的闪存转换层(ftl)进行优化。kvssd150的ssd控制器可在不同的存储器芯片(例如,与非芯片)之间以条的形式来写入及读取数据以加速写入操作及读取操作。分布式数据存储系统100b(例如,hdfs)可并行地发送许多输入/输出请求,且可容忍长的延迟,只要吞吐量高即可。这种并行性可通过向ssd控制器添加复杂性来减小延迟。根据一个实施例,kvssd150的ftl可被优化成基于分布式数据存储系统100b的信息来对单个信道读取及写入大的块。在这种情形中,kvssd150的ftl不会使数据通过多个信道在多个芯片之间分条(striping),而是可并行地执行同时进行的读取操作与写入操作以实现高的吞吐量。可针对频繁读取所存储的数据的以数据为中心且数据密集型的应用来对分布式文件系统(例如,hdfs)进行优化。在这种情形中,数据读取操作比数据写入操作频繁得多。这些分布式文件系统中的一些分布式文件系统提供一次写入语义(write-oncesemantics)且使用大的块大小。相比之下,kvssd150可支持动态的块大小以及对数据块的频繁更新。根据另一个实施例,kvssd150可被优化成不会引起对于采用内部文件系统(例如,图1a所示ssd140)的情况而言可能原本需要的垃圾收集。垃圾收集是如下过程:从包括过时页面的块移动有效页面,因此可将所述块擦除及改写。垃圾收集是可造成写入放大、输入/输出不确定性(i/oindeterminism)及驱动器的磨损均衡(wearleveling)的代价高昂的过程。一旦被优化,kvssd150的ftl便可对写入操作与擦除操作使用相同的粒度(granularity)。当一个块被删除时,所述块可立即被标记以进行擦除,由此不再需要进行垃圾收集。kvssd150的经优化的ftl可改善性能及耐用性,同时消除垃圾收集并简化ftl。根据一个实施例,kvssd150支持动态页面及块大小。举例而言,kvssd150可基于hdfs配置来调整其中将要存储的块的块大小。举例来说,在所述配置期间,分布式数据存储系统100b可告知kvssd150只有经对齐的固定大小的写入操作将被发出到kvssd150,且kvssd150相应地对其块大小进行配置。作为另外一种选择,kvssd150可透露其擦除块大小(或可能的擦除块大小)且需要分布式数据存储系统100b来相应地对kvssd150的块大小进行配置。在任意一种情形中,kvssd150及分布式数据存储系统100b中的块大小可相对于彼此进行配置。根据一个实施例,分布式数据存储系统100b可对kvssd150进行配置以允许或不允许进行块更新。举例来说,分布式数据存储系统100b可将附加参数(在本文中称为更新旗标)传递到kvssd150。通过使用更新旗标,kvssd150的ssd控制器可将自身配置成提供附加闪存块及线程以处置与从客户机应用101接收的块更新请求相关联的垃圾收集。通过不允许进行块更新(例如,更新为旗标=错误),分布式数据存储系统100b可因不同的闪存信道或管芯之间的并行性而实现吞吐量的大规模增大。当将每一次新的写入与新的键一起使用时,kvssd150无需在各个信道或管芯之间执行同步以验证所写入的块是重写。在这种情形中,数据节点221可将块更新旗标设定为错误。图2a示出示例性ssd的系统配置。参照图1a,分布式数据存储系统100a通过将其本地文件系统(例如,linux的ext4)安装为“/mnt/fs”来配置ssd140。存储在ssd140中的文件可由ssd140的所安装的文件系统进行存取。图2b示出根据一个实施例的键-值ssd的示例性系统配置。参照图1b,分布式数据存储系统100b基于在登记过程期间接收的kvssd150的信息来配置kvssd150。举例来说,分布式数据存储系统100b可将kvssd150的存储类型配置为键-值ssd(kvssd)并将kvssd150的输入/输出路径设定为“dev/kvssd”。kvssd150还可被配置成将块更新旗标设定为错误、将块大小设定为64mb且将对齐旗标设定为真。当kvssd150被配置成通过将kvssd150的擦除块大小与分布式数据存储系统100b的数据大小设定成相等的及对齐的来禁用交叉信道输入/输出操作时,分布式数据存储系统100b在kvssd150中的所有的信道或管芯之间实现无锁定输入/输出操作(lock-lessi/ooperation)。举例来说,kvssd150使用简单的哈希函数(例如,地址模10(addressmod10))在所有可能的信道中确定输入/输出应被路由到的信道。在这种情形中,针对给定地址的所有输入/输出操作将一致地路由到相同的闪存信道。在其中信道由串行处理单元执行的情形中,被路由到这一信道的所有输入/输出操作被排序而无需任何跨信道锁定。因此,分布式数据存储系统100b可在输入/输出线程之间实现完全并行性而无需进行同步。本kvssd可根据kvssd如何将擦除块作为垃圾收集单位进行处置来实现并行性。图3示出根据一个实施例的实现信道级并行性的示例性ssd信道及管芯架构。kvssd可利用信道级并行性来改善kvssd的输入/输出性能。在本实例中,kvssd具有n个信道及m个通路,其中n及m是等于或大于1的整数。分布式文件系统(例如,hdfs)的数据大小被设定成等于kvssd的块大小或块大小的倍数。kvssd的块大小是由芯片(或管芯)中擦除单位的大小与kvssd内部通路数目的乘积来确定,即,块大小=擦除单位的大小*通路的数目。所述数据可在同一信道中在各个芯片之间分条。举例来说,kvssd具有6mb的擦除单位大小及8个通路,且分布式文件系统的数据大小被设定成48mb以适配在kvssd的数据群组中。在信道级并行性中不会发生垃圾收集,这是因为删除48mb数据会导致在同一信道中重新设定8个完整的擦除块。然而,信道级并行性并未充分利用所述多个信道可提供的潜在并行性。图4示出根据一个实施例的实现通路级并行性(way-levelparallelism)的示例性ssd信道及管芯架构。kvssd可利用通路级并行性来改善kvssd的输入/输出性能。在这种情形中,分布式文件系统(例如,hdfs)的数据大小被设定成等于kvssd的块大小或块大小的倍数。kvssd的块大小是由擦除单位的大小与信道的数目的乘积来确定,即,块大小=擦除单位的大小*信道的数目。垃圾收集单位及数据大小是块大小的乘法运算。所述数据可在同一通路中在各个芯片之间分条。数据分条可在所有信道之间进行,从而能够充分利用信道并行性。图5示出根据一个实施例的实现管芯/芯片级并行性的示例性ssd信道及管芯架构。在本实例中,ssd信道的数目是n,且管芯的数目是比n大的m。管芯/芯片级并行性在kvssd中的各个信道及芯片之间提供最高并行性。在这种情形中,块大小等于擦除单位,且垃圾收集是以擦除单位进行。数据大小与擦除单位的倍数对齐。管芯/芯片级并行性类似于具有虚拟节点的一致性哈希(consistenthashing)。在这种情形中,每一个虚拟节点对应于擦除块单元,且实体节点对应于信道。分布式文件系统(例如,hdfs)维持元数据以管理数据的位置。举例来说,每一个文件均维持有构成所述文件的所有块的清单。重复的分布式存储系统维持有单独的映射,所述单独的映射列出存储给定块(或文件)的所有节点的位置。在一些分布式数据存储系统中,这些映射表被保持在单个节点的存储器中,这会限制分布式数据存储系统的可扩展性。举例来说,当存储这些映射表的元数据节点不具有足以存储附加映射数据的存储器时,可不添加块或文件。可在数据存储装置顶上使用文件系统以存储这些映射,但文件系统会引入额外开销。本kvssd可通过持久地保持文件对块清单的映射以及块对节点清单的映射来将数据直接存储在键-值对中而无需本地文件系统。因此,负责存储元数据的节点不受其存储器容量的限制且不会引起由于具有附加文件系统带来的开销。由于这些映射信息是直接存储在kvssd上,因此这些映射信息可采用由文件进行索引的方式存储在单个映射表中。这使得kvssd中的单次查找便能够检索所有的数据块。单个映射表使元数据更加可扩展(仅一个映射表)且更高效(一次查找)。读取存储在kvssd中的文件的过程类似于使用常规哈希映射或相似的数据结构的过程。数据结构可为直接链接到kvssd的库。举例来说,客户机应用发出文件检索操作以使用文件id读取文件。元数据节点以二进制大对象(binarylargeobject,blob)形式返回文件的块清单,且元数据节点可映射成块清单最初被写入成的格式。块清单还含有节点清单,在所述节点清单中存储有块清单中的每一个块。元数据节点可接着将块的清单及相关联的节点传递回客户机应用以发出对块的读取。在这种方案中,元数据节点仍需要将映射表存储在其存储器中以用于每一次查找,以将清单传递回客户机应用;然而,元数据节点不需要将所有映射信息保持在其存储器中。举例来说,最近读取的文件的高速缓存可在可扩展性与效率之间提供折衷。图6a示出示例性ssd(例如,图1a及图2a所示ssd140)的示例性映射方案。编辑日志(editlog)是指对文件及映射表(fileandmappingtable)执行的所有元数据操作的日志。这些编辑日志被持久地保存到磁盘。这是必需的,因为文件及块映射表只位于存储器中;如果名称节点崩溃,则名称节点会通过从存储器中读取编辑日志来在存储器中重建文件及块映射表。图6b示出根据一个实施例的kvssd(例如,图1b及图2b所示kvssd150)的示例性映射方案。ssd140将文件映射表及块映射表存储在其存储器中。使用这些映射信息,客户机应用可检索与文件相关联的数据块。同时,kvssd150存储包含块列表及节点列表的单次映射的文件映射表。图7、图8及图9示出在分布式文件系统(例如,hdfs)中创建及写入文件、读取文件及删除文件的示例性输入/输出过程的图。在对每一个图的说明中,将论述与现有技术过程相比而言的差异及优点。图7示出根据一个实施例的在分布式文件系统的kvssd中创建并存储文件的示例性过程。分布式文件系统包括客户机710、包括kvssd(kv1)730的名称节点(或元数据节点)720以及包括kvssd(kv2)750的数据节点740。为创建新的文件,客户机710向名称节点720发送带有文件id(fileid)的请求761(createfile(fileid))。名称节点720通过发送键-值存储命令762(kv.store(fileid,“”))而在内部登记文件id并将文件id作为键-值对的无值键(value-lesskey)存储在kvssd730中。kvssd730通过将完成消息763发送回名称节点720来作出响应,且接着,名称节点720以完成消息764来回应客户机710。在名称节点720回应客户机710后,客户机710发出为文件分配块的分配命令765(allocateblock(fileid))。作为响应,名称节点720指派块id(blockid)及数据节点(例如,数据节点740)来存储块并向客户机710发送回响应766。名称节点720可指派单调递增的id作为块id。客户机710使用块id向数据节点740发送带有所述块的数据内容的块写入请求767(writeblock(blockid,content))。响应于块写入请求767,数据节点740向kvssd750发出带有传入参数(块id及内容)的键-值存储命令768(kv.store(blockid,content))。在具有常规ssd的传统数据节点中,对数据节点进行的写入操作将请求对文件系统进行写入且接着对ssd的基础数据存储介质进行写入。在存储所述块后,kvssd750以完成消息769对数据节点740作出响应,且数据节点740以完成消息770对客户机710作出响应。客户机710接着向名称节点720发送提交写入命令771(commit(write(fileid,blockid))以将块id与数据节点元组提交到相关联的文件。名称节点720向kvssd730发送附加命令772(kv.append(fileid,blockid+datanode))。在附加过程中,附加命令772是对kvssd730进行的单个直接操作,而不是如在传统的分布式存储系统中一样是对两个单独的映射(即,文件-块映射及块-数据节点映射)的存储操作。图8示出根据一个实施例的读取存储在分布式文件系统的kvssd中的文件的示例性过程。为读取存储在数据节点740中的文件,客户机710向名称节点720发送带有文件id(fileid)的读取文件请求861(openfile(fileid))。通过利用文件id,名称节点720向kvssd730发送检索命令862(kv.retrieve(fileid)),且kvssd730返回映射信息863,映射信息863将块映射到与文件id相关联的数据节点。名称节点720将映射信息864转发到客户机710。通过利用块-数据节点映射信息中所包含的块id,客户机710向数据节点740发送块读取命令865(readblock(blockid))。数据节点740向kvssd750发送块检索命令866(kv.retrieve(blockid))以检索块内容。kvssd750将所请求块的内容867发送回数据节点740,且数据节点740将所检索的块内容868转发回客户机710。此与传统的读取操作之间的基本差异在于,名称节点720发出单个直接kvssd读取操作以检索块-数据节点映射,而非在存储器内哈希表中搜索文件对块清单以及块对数据节点清单。另外,数据节点740直接向kvssd发送要检索数据的请求,从而绕过任何存储软件中间件(例如文件系统)。图9示出根据一个实施例的删除分布式文件系统的kvssd中的文件的示例性过程。客户机710向名称节点720发送带有文件id的文件删除命令961(deletefile(fileid))。名称节点720向kvssd730发送键-值检索命令962(kv.retrieve(fileid))以检索文件的映射信息,且kvssd730返回映射信息963,映射信息963将块映射到与文件id相关联的数据节点。名称节点720可临时地高速缓存用于相关联的块的后续异步删除过程的块id映射。名称节点720向kvssd730发送键-值删除命令964(kv.delete(fileid)),且kvssd730在删除文件id及相关联的映射后向名称节点720发送完成消息965。当检索与文件id相关联的映射信息时,名称节点720检索块-数据节点元组来找到将从kvssd730删除的文件。这一过程不同于将涉及到查找多个存储器内哈希表的传统的分布式存储系统。而是,名称节点720从含有块-数据节点映射的kvssd730删除这一基于文件的键。名称节点720将控制返回到客户机710,且名称节点720异步地向数据节点740发送块删除命令966(delete(blocklist)以从kvssd750删除对应的块。应注意,图9所示文件删除过程是基于分布式文件系统的块大小等于或可被划分成kvssd750的擦除块大小这一假设。此可使从存储器内操作移动到基于kvssd的操作的开销最小化。根据一个实施例,一种固态驱动器(ssd)包括:多个数据块;用于存取所述多个数据块的多个闪存信道及多个通路;以及ssd控制器,对所述多个数据块的块大小进行配置。数据文件与一个或多个键-值对一起存储在所述ssd中,且每一个键-值对具有块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。所述ssd可用于包括海杜普分布式文件系统(hdfs)的分布式文件系统中。所述ssd控制器还可配置成基于块更新旗标来启用或禁用块更新。所述ssd控制器还可配置成基于对齐旗标来将所述数据文件与所述多个数据块对齐。所述块大小可基于所述ssd的擦除单位乘以闪存信道的数目来确定。所述块大小可基于所述ssd的擦除单位乘以通路的数目来确定。所述块大小可等于所述ssd的擦除单位。所述ssd可存储文件映射表,所述文件映射表包括所述数据文件向所述多个数据块中与所述数据文件相关联的一个或多个数据块的第一映射以及所述一个或多个数据块中的至少一者向包括所述ssd的数据节点的第二映射。根据另一个实施例,一种分布式数据存储系统包括:客户机;名称节点,包括第一键-值(kv)固态驱动器(ssd);以及数据节点,包括第二kvssd,其中所述第二kvssd包括多个数据块、用于存取所述多个数据块的多个闪存信道及多个通路、以及用于配置所述多个数据块的块大小的ssd控制器。所述客户机向所述名称节点发送包括用于存储数据文件的文件识别符的创建文件请求,并向所述名称节点发送分配命令以分配所述多个数据块中与所述数据文件相关联的一个或多个数据块。所述名称节点向所述客户机返回所述一个或多个数据块的块识别符以及被指派存储所述一个或多个数据块的所述数据节点的数据节点识别符。所述客户机向所述数据节点发送块存储命令,以存储所述一个或多个数据块。所述第二kvssd存储所述一个或多个数据块作为键-值对,且至少一个键-值对具有所述块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。所述分布式数据存储系统可采用海杜普分布式文件系统(hdfs)。所述第二kvssd可存储文件映射表,所述文件映射表包括所述数据文件向与所述数据文件相关联的一个或多个数据块的第一映射以及所述一个或多个数据块中的至少一者向数据节点的第二映射。根据又一实施例,一种方法包括:从客户机向名称节点发送创建文件请求,其中所述创建文件请求包括用于存储数据文件的文件识别符;将所述文件识别符作为键-值对存储在所述名称节点的第一键-值(kv)固态驱动器(ssd)中,其中所述文件识别符作为键被存储在所述键-值对中,且与所述键相关联的值是空的;从所述客户机向所述名称节点发送分配命令,以分配与所述数据文件相关联的一个或多个数据块;在所述名称节点处将块识别符指派给所述一个或多个数据块中的至少一者并指派数据节点来存储所述一个或多个数据块;从所述名称节点向所述客户机返回所述块识别符及所述数据节点的数据节点识别符;从所述客户机向所述数据节点发送写入块请求,其中所述写入块请求包括所述块识别符及内容;以及将所述一个或多个数据块作为键-值对保存在所述数据节点的第二kvssd中。所述数据节点的所述第二kvssd包括具有块大小的一个或多个数据块。至少一个键-值对具有块识别符作为键且具有块数据作为值。所述数据文件的大小等于所述块大小或所述块大小的倍数。所述客户机、所述名称节点及所述数据节点可为海杜普分布式文件系统(hdfs)中的节点。所述方法还可包括:设定块更新旗标来启用或禁用块更新。所述方法还可包括:设定对齐旗标来将所述数据文件与所述数据节点的所述第二kvssd的所述多个数据块对齐。所述方法还可包括:从所述客户机向所述名称节点发送写入提交命令,所述写入提交命令包括所述文件识别符及所述块识别符;以及附加单一直接操作,以将所述文件识别符、所述块识别符及所述数据节点附加在所述名称节点中。所述方法还可包括:从所述客户机向所述名称节点发送要读取所述数据文件的读取文件请求;向所述客户机返回所述一个或多个数据块中与所述数据文件相关联的至少一个数据块的所述块识别符及所述数据节点识别符;从所述客户机向所述数据节点发送块读取命令,以检索存储在所述数据节点的所述第二kvssd中的所述一个或多个数据块;以及从所述数据节点向所述客户机返回由所述块识别符标识的所述块数据。所述方法还可包括:从所述客户机向所述名称节点发送文件删除命令,所述文件删除命令包括所述文件识别符;向所述客户机返回所述一个或多个数据块中与所述数据文件相关联的至少一个数据块的所述块识别符及所述数据节点识别符;从所述名称节点向所述名称节点的所述第一kvssd发送键-值删除命令,所述键-值删除命令包括所述数据文件的所述文件识别符;从所述名称节点向所述数据节点发送块删除命令,所述块删除命令包括所述一个或多个数据块的清单;以及删除被存储在所述数据节点的所述第二kvssd中的所述一个或多个数据块。所述第二kvssd可存储文件映射表,所述文件映射表包括所述数据文件向与所述数据文件相关联的一个或多个数据块的第一映射以及所述一个或多个数据块中的至少一者向所述数据节点的第二映射。上文已阐述了以上示例性实施例来示出实施用于提供在分布式文件系统中利用键-值存储来高效地存储数据及元数据的系统及方法的系统及方法的各种实施例。所属领域中的一般技术人员将会联想到对所公开示例性实施例的各种修改及相对于所公开示例性实施例的不同之处。在以上权利要求中阐述了旨在落于本公开范围内的主题。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1