掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及计算机技术领域,尤其涉及一种文件存储方法及系统。

背景技术

互联网时代文件、视频、图片的数量以爆炸式的速度增长,对于如何存储数量骤增的文件是亟需解决的问题。目前,常用开源的分布式文件存储方案对文件进行存储,比如Min i o、Ceph等,但这些开源分布式文件存储方案均存在不易扩容,运维成本高,灵活性低的问题。

发明内容

有鉴于此,本发明实施例提供一种文件存储方法及系统,可实现海量文件高性能存储,且易扩容,运维成本低,灵活性高。

在第一方面,本发明实施例提供一种文件存储方法,该方法应用于文件存储系统,所述文件存储系统包括:文件存储服务节点、数据节点、索引节点,所述方法包括:

所述文件存储服务节点接收目标文件,并根据所述目标文件的文件名确定所述目标文件是否已存储;

若所述文件存储服务节点确定所述目标文件是未存储的文件,则将所述目标文件发送至所述数据节点;

所述数据节点为所述目标文件生成文件编号;

所述数据节点将所述目标文件的文件名和所述文件编号存储至本地第一索引库,将所述文件编号和所述文件存储至本地数据库;

所述数据节点向所述文件存储服务节点发送存储成功信息,所述存储成功信息中包括:所述目标文件的文件名及所述数据节点的编号;

所述文件存储服务节点记录目标文件的文件名,并向所述索引节点发送所述目标文件的文件名及所述数据节点的编号;

所述索引节点将所述目标文件的文件名及所述数据节点的编号存储至本地第二索引库。

优选的,所述数据节点为所述目标文件生成文件编号,具体包括:所述数据节点通过自增数字的方式为所述目标文件生成文件编号。

优选的,所述数据节点将所述目标文件的文件名和所述文件编号存储至本地第一索引库,将所述文件编号和所述文件存储至本地数据库,具体包括:所述数据节点将所述目标文件的文件名和所述文件编号以key-value方式存储至本地第一索引Leveldb库,将所述文件编号和所述目标文件以key-value方式存储至本地数据Leveldb库。

优选的,所述索引节点将所述目标文件的文件名及所述数据节点的编号存储至本地第二索引库,具体包括:所述索引节点将所述目标文件的文件名及所述数据节点的编号以key-value方式存储至本地第二索引Leveldb库。

优选的,所述索引节点将所述目标文件的文件名及所述数据节点的编号以key-value方式存储至本地第二索引Leveldb库,具体包括:所述索引节点确定所述目标文件的文件名及所述数据节点的编号对应的key-value,根据所述第二索引Leveldb库的数量对key做哈希运算取模,将所述key-value分散存储至对应数量的第二索引Leveldb库。

优选的,所述索引节点为索引主节点,所述文件存储系统还包括索引从节点,所述在所述索引节点将所述目标文件的文件名及所述数据节点的编号存储至本地第二索引库之后,所述方法还包括:所述索引主节点将所述目标文件的文件名及所述数据节点的编号通过异步方式发送至索引从节点。

优选的,所述方法还包括:所述文件存储服务节点接收客户端发送的文件下载请求,所述文件下载请求中携带所述目标文件的文件名;所述文件存储服务节点从所述索引节点获取所述目标文件的文件名对应的数据节点编号;所述文件存储服务节点将所述文件下载请求发送至所述数据节点编号对应的数据节点;所述数据节点从所述第一索引库中查找所述目标文件的文件名对应的文件编号;所述数据节点从所述数据库中查找所述文件编号对应的目标文件;所述数据节点将所述目标文件发送至所述文件存储服务节点;所述文件存储服务节点将所述目标文件发送至所述客户端。

在第二方面,本发明实施例提供一种文件存储系统,该文件存储系统包括:文件存储服务节点、数据节点、索引节点;

所述文件存储服务节点,用于接收目标文件,并根据所述目标文件的文件名确定所述目标文件是否已存储,若确定所述目标文件是未存储的文件,则将所述目标文件发送至所述数据节点;

所述数据节点,用于为所述目标文件生成文件编号;

所述数据节点,还用于将所述目标文件的文件名和所述文件编号存储至本地第一索引库,将所述文件编号和所述文件存储至本地数据库;

所述数据节点,还用于向所述文件存储服务节点发送存储成功信息,所述存储成功信息中包括:所述目标文件的文件名及所述数据节点的编号;

所述文件存储服务节点,还用于记录目标文件的文件名,并向所述索引节点发送所述目标文件的文件名及所述数据节点的编号;

所述索引节点,用于将所述目标文件的文件名及所述数据节点的编号存储至本地第二索引库。

优选的,所述索引节点为索引主节点,所述文件存储系统还包括索引从节点,所述索引节点还用于:将所述目标文件的文件名及所述数据节点的编号通过异步方式发送至索引从节点。

优选的,所述文件存储服务节点,还用于接收客户端发送的文件下载请求,所述文件下载请求中携带所述目标文件的文件名;所述文件存储服务节点,还用于从所述索引节点获取所述目标文件的文件名对应的数据节点编号;所述文件存储服务节点,还用于将所述文件下载请求发送至所述数据节点编号对应的数据节点;所述数据节点,还用于从所述第一索引库中查找所述目标文件的文件名对应的文件编号;所述数据节点,还用于从所述数据库中查找所述文件编号对应的目标文件;所述数据节点,还用于将所述目标文件发送至所述文件存储服务节点;所述文件存储服务节点,还用于将所述目标文件发送至所述客户端。

本发明实施例提供的一种文件存储方法及系统,该文件存储系统包括:文件存储服务节点、数据节点、索引节点。基于该文件存储系统,文件存储服务节点接收目标文件,并根据目标文件的文件名确定目标文件是否已存储;若文件存储服务节点确定目标文件是未存储的文件,则将目标文件发送至数据节点;数据节点为目标文件生成文件编号,并将目标文件的文件名和文件编号存储至本地第一索引库,将文件编号和文件存储至本地数据库;并且,数据节点还向文件存储服务节点发送存储成功信息,文件存储服务节点记录目标文件的文件名,并向索引节点发送目标文件的文件名及该数据节点的编号,之后索引节点将目标文件的文件名及数据节点的编号存储至本地第二索引库。基于此,不仅可以实现海量文件高性能存储,且该文件存储系统易扩容,运维成本低,灵活性高。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明的实施例提供的一种基于Leveldb的分布式存储系统的结构示意图;

图2为本发明的实施例提供的一种文件存储方法的流程示意图;

图3为本发明的实施例提供的一种文件存储方法的流程示意图;

图4为本发明的实施例提供的另一种文件存储系统的结构示意图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明实施例提供的一种文件存储方法可以应用于文件存储系统,该文件存储系统包括:文件存储服务节点、数据节点、索引节点。

在一个例子中,该文件存储系统可以是基于Leveldb的分布式存储系统,其中Leveldb是能够处理十亿级别规模Key-Value型数据持久性存储库。如图1所示,该文件存储系统可以包括:文件存储服务集群、数据集群、索引服务集群。其中,文件存储服务集群包括:负载均衡器和多个文件存储服务节点;数据集群包括:多个数据节点,每个数据节点包括:多个索引库和多个数据库;索引服务集群包括:索引主节点和多个索引从节点,每个索引节点还包括:多个索引库。该文件存储系统可根据不同需求随时增减各个节点,或增减各个节点中的索引库及数据库,因此易扩容,运维成本低,灵活性高。

基于该文件存储系统,如图2所示,本实施例的文件存储方法可以包括:

步骤201,文件存储服务节点接收目标文件,并根据目标文件的文件名确定目标文件是否已存储。

具体的,在步骤201之前,负载均衡器接收客户端发送的待存储的目标文件,负载均衡器根据预设的负载分配规则,确定接收该目标文件的文件存储服务节点,并将目标文件发送至确定的文件存储服务节点。

步骤202,若文件存储服务节点确定目标文件是未存储的文件,则将目标文件发送至数据节点。

具体的,文件存储服务节点会记录已存储文件的文件名,因此,文件存储服务节点接收到该目标文件后,可根据目标文件的文件名确定目标文件是否已存储,如已存储,则向客户端发送该目标文件已存储的信息,如未存储,则根据预设规则从数据集群中选择一数据节点,并将目标文件发送至该数据节点。

步骤203,数据节点为目标文件生成文件编号。

具体的,数据节点在接收到目标文件后,通过自增数字的方式为目标文件生成文件编号。

可以理解的是,对于生成文件编号的方式本发明实施例不做任何限制,本发明实施例包括任何一种可生成唯一文件编号的方式。

步骤204,数据节点将目标文件的文件名和文件编号存储至本地第一索引库,将文件编号和文件存储至本地数据库。

具体的,数据节点将目标文件的文件名和文件编号以key-value方式存储至本地第一索引Leveldb库,将文件编号和目标文件以key-value方式存储至本地数据Leveldb库。基于此,可有效避免Leveldb库在存储大value时的写放大,可提高存储性能。

步骤205,数据节点向文件存储服务节点发送存储成功信息。

其中,该存储成功信息中包括:该目标文件的文件名及该数据节点的编号。

步骤206,文件存储服务节点记录目标文件的文件名,并向索引节点发送目标文件的文件名及数据节点的编号。

具体的,文件存储服务节点接收到存储成功信息后,记录目标文件的文件名,以便在接收到文件时判断接收到的文件是否已存储,避免重复操作。

优选的,文件存储服务节点在接收到存储成功信息后,还可以向客户端返回目标文件已存储的信息。

步骤207,索引节点将目标文件的文件名及数据节点的编号存储至本地第二索引库。

优选的,索引节点将目标文件的文件名及数据节点的编号以key-value方式存储至本地第二索引Leveldb库。

具体的,索引节点确定目标文件的文件名及数据节点的编号对应的key-value,根据第二索引Leveldb库的数量对key做哈希运算取模,将key-value分散存储至对应数量的第二索引Leveldb库。

在一个具体的例子中,假设第二索引Leveldb库有16个,在存储key-value数据时,按key做哈希运算对16取模,这样可以将不同的key-value数据分散存储到16个Leveldb库中,从而提高存储性能。

优选的,该索引节点为索引主节点,在步骤206之后,本发明实施例提供的文件存储方法还包括:

索引主节点将目标文件的文件名及数据节点的编号通过异步方式发送至索引从节点,以进行备份,提高存储灵活性。

优选的,在文件存储后,还需要对文件进行读取下载,基于此,如图3所示,本发明实施例提供的文件存储方法还包括:

步骤301,文件存储服务节点接收客户端发送的文件下载请求。

其中,该文件下载请求中携带目标文件的文件名。

步骤302,文件存储服务节点从索引节点获取目标文件的文件名对应的数据节点编号。

步骤303,文件存储服务节点将文件下载请求发送至该数据节点编号对应的数据节点。

步骤304,该数据节点从第一索引库中查找目标文件的文件名对应的文件编号。

步骤305,该数据节点从数据库中查找文件编号对应的目标文件。

步骤306,该数据节点将目标文件发送至文件存储服务节点。

步骤307,文件存储服务节点将所目标文件发送至客户端。

本发明实施例提供的一种文件存储方法应用于包括文件存储服务节点、数据节点、索引节点的文件存储系统。基于该文件存储系统,本发明实施例提供的文件存储方法,通过文件存储服务节点接收目标文件,并根据目标文件的文件名确定目标文件是否已存储;若文件存储服务节点确定目标文件是未存储的文件,则将目标文件发送至数据节点;数据节点为目标文件生成文件编号,并将目标文件的文件名和文件编号存储至本地第一索引库,将文件编号和文件存储至本地数据库;并且,数据节点还向文件存储服务节点发送存储成功信息,文件存储服务节点记录目标文件的文件名,并向索引节点发送目标文件的文件名及该数据节点的编号,之后索引节点将目标文件的文件名及数据节点的编号存储至本地第二索引库。基于此,不仅可以实现海量文件高性能存储,且易扩容,运维成本低,灵活性高。

图4为本发明实施例提供的一种文件存储系统的结构示意图。如图4所示,该文件存储系统包括:文件存储服务节点401、数据节点402、索引节点403。

所述文件存储服务节点401,用于接收目标文件,并根据所述目标文件的文件名确定所述目标文件是否已存储,若确定所述目标文件是未存储的文件,则将所述目标文件发送至所述数据节点402;

所述数据节点402,用于为所述目标文件生成文件编号;

所述数据节点402,还用于将所述目标文件的文件名和所述文件编号存储至本地第一索引库,将所述文件编号和所述文件存储至本地数据库;

所述数据节点402,还用于向所述文件存储服务节点401发送存储成功信息,所述存储成功信息中包括:所述目标文件的文件名及所述数据节点的编号;

所述文件存储服务节点401,还用于记录所述目标文件的文件名,并向所述索引节点403发送所述目标文件的文件名及所述数据节点的编号;

所述索引节点403,用于将所述目标文件的文件名及所述数据节点的编号存储至本地第二索引库。

优选的,所述数据节点402具体用于:通过自增数字的方式为所述目标文件生成文件编号。

优选的,所述数据节点402具体用于:将所述目标文件的文件名和所述文件编号以key-value方式存储至本地第一索引Leveldb库,将所述文件编号和所述目标文件以key-value方式存储至本地数据Leveldb库。

优选的,所述索引节点403具体用于:将所述目标文件的文件名及所述数据节点的编号以key-value方式存储至本地第二索引Leveldb库。

优选的,所述索引节点403具体用于:确定所述目标文件的文件名及所述数据节点的编号对应的key-value,根据所述第二索引Leveldb库的数量对key做哈希运算取模,将所述key-value分散存储至对应数量的第二索引Leveldb库。

优选的,所述索引节点403为索引主节点,所述文件存储系统还包括索引从节点,所述索引节点403还用于:将所述目标文件的文件名及所述数据节点的编号通过异步方式发送至索引从节点。

优选的,所述文件存储服务节点401,还用于接收客户端发送的文件下载请求,所述文件下载请求中携带所述目标文件的文件名;

所述文件存储服务节点401,还用于从所述索引节点403获取所述目标文件的文件名对应的数据节点编号;

所述文件存储服务节点401,还用于将所述文件下载请求发送至所述数据节点编号对应的数据节点402;

所述数据节点402,还用于从所述第一索引库中查找所述目标文件的文件名对应的文件编号;

所述数据节点402,还用于从所述数据库中查找所述文件编号对应的目标文件;

所述数据节点402,还用于将所述目标文件发送至所述文件存储服务节点401;

所述文件存储服务节点401,还用于将所述目标文件发送至所述客户端。

本发明实施例提供的一种文件存储系统,该文件存储系统包括:文件存储服务节点、数据节点、索引节点。基于该文件存储系统,文件存储服务节点接收目标文件,并根据目标文件的文件名确定目标文件是否已存储;若文件存储服务节点确定目标文件是未存储的文件,则将目标文件发送至数据节点;数据节点为目标文件生成文件编号,并将目标文件的文件名和文件编号存储至本地第一索引库,将文件编号和文件存储至本地数据库;并且,数据节点还向文件存储服务节点发送存储成功信息,文件存储服务节点记录目标文件的文件名,并向索引节点发送目标文件的文件名及该数据节点的编号,之后索引节点将目标文件的文件名及数据节点的编号存储至本地第二索引库。基于此,可不仅可以实现海量文件高性能存储,且该文件存储系统易扩容,运维成本低,灵活性高。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

相关技术
  • 一种分布式文件存储系统的保护存档数据方法及系统
  • 一种分布式文件存储系统的权限控制方法和系统
  • 一种关联区块链主链的文件存储服务地址变更方法及系统
  • 一种分布式文件存储系统的性能测试方法
  • 细胞阵列文件存储系统及其文件存储设备与文件存储方法
  • 细胞阵列文件存储系统及其文件存储设备与文件存储方法
技术分类

06120115631989