CN110196841B - 文件的存储方法和装置、查询方法和装置及服务器 - Google Patents

文件的存储方法和装置、查询方法和装置及服务器 Download PDF

Info

Publication number
CN110196841B
CN110196841B CN201810645604.XA CN201810645604A CN110196841B CN 110196841 B CN110196841 B CN 110196841B CN 201810645604 A CN201810645604 A CN 201810645604A CN 110196841 B CN110196841 B CN 110196841B
Authority
CN
China
Prior art keywords
file
package
small
file package
name
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
Application number
CN201810645604.XA
Other languages
English (en)
Other versions
CN110196841A (zh
Inventor
蔡畅奇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810645604.XA priority Critical patent/CN110196841B/zh
Publication of CN110196841A publication Critical patent/CN110196841A/zh
Application granted granted Critical
Publication of CN110196841B publication Critical patent/CN110196841B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed 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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于分布式系统的文件的存储方法和装置、查询方法和装置及服务器。存储方法包括步骤:处理多个文件以形成文件包,文件包包括头部块和数据块,头部块包括多个文件的索引信息,数据块用于存储文件;和将文件包存储到分布式系统,分布式系统包括目录,目录包括文件包在分布式系统的存储路径。本发明实施方式的存储方法通过将多个文件处理形成文件包,并将文件包推送到分布式系统,在通过分布式系统对文件包进行存储的同时,避免了由于小文件的数量过多而占用过多的内存,有利于设备的稳定和效率的提升。

Description

文件的存储方法和装置、查询方法和装置及服务器
技术领域
本发明涉及计算机技术领域,具体涉及一种基于分布式系统的文件的存储方法和装置、查询方法和装置及服务器。
背景技术
相关技术中,当存储有海量的小文件时,会由于小文件的数量过多导致占用的内存太大,从而引起机器和服务的不稳定,在工程中不可取。另外,在读取小文件的过程中,由于一个操作一般只能读取一个文件,因此,读取小文件过多会导致启动的操作过多,从而消耗过多的集群资源。
发明内容
本发明的实施方式提供了一种基于分布式系统的文件的存储方法和装置、查询方法和装置及服务器。
本发明实施方式的基于分布式系统的文件的存储方法包括步骤:
处理多个文件以形成文件包,所述文件包包括头部块和数据块,所述头部块包括所述多个文件的索引信息,所述数据块用于存储所述文件;和
将所述文件包存储到所述分布式系统,所述分布式系统包括目录,所述目录包括所述文件包在所述分布式系统的存储路径。
本发明实施方式的基于分布式系统的文件的存储装置包括:
打包模块,所述打包模块用于处理多个文件以形成文件包,所述文件包包括头部块和数据块,所述头部块包括所述多个文件的索引信息,所述数据块用于存储所述文件;和
推送模块,所述推送模块用于将所述文件包存储到所述分布式系统,所述分布式系统包括目录,所述目录包括所述文件包在所述分布式系统的存储路径。
本发明实施方式的基于分布式系统的文件的存储方法和存储装置通过将多个文件处理形成文件包,并将文件包推送到分布式系统,在通过分布式系统对文件包进行存储的同时,避免了由于小文件的数量过多而占用过多的内存,有利于设备的稳定和效率的提升。
本发明实施方式的基于分布式系统的文件的查询方法用于查询文件包的多个文件中的至少一个文件,所述文件包由所述多个文件经处理形成,所述文件包存储在所述分布式系统且包括所述多个文件的索引信息,所述分布式系统包括目录,所述目录包括所述文件包在所述分布式系统的存储路径,所述查询方法包括步骤:
获取与所述至少一个文件相关的输入信息,所述输入信息包括所述文件包的文件包名称和所述文件的文件名称,或所述文件的文件名称和所述文件存储到所述分布式系统的日期;
根据所述输入信息和所述索引信息在所述目录获取所述至少一个文件的位置信息;和
根据所述位置信息读取并返回所述至少一个文件。
本发明实施方式的基于分布式系统的文件的查询装置,用于查询文件包的多个文件中的至少一个文件,所述文件包由所述多个文件经处理形成,所述文件包存储在所述分布式系统且包括所述多个文件的索引信息,所述分布式系统包括目录,所述目录包括所述文件包在所述分布式系统的存储路径,所述查询装置包括:
第一获取单元,所述第一获取单元用于获取与所述至少一个文件相关的输入信息,所述输入信息包括所述文件包的文件包名称和所述文件的文件名称,或所述文件的文件名称和所述文件存储到所述分布式系统的日期;
第二获取单元,所述第二获取单元用于根据所述输入信息和所述索引信息在所述目录获取所述至少一个文件的位置信息;和
读取单元,所述读取单元用于根据所述位置信息读取并返回所述至少一个文件。
本发明实施方式的文件的查询方法和查询装置通过输入信息和索引信息可以快速获取文件的位置信息,从而对存储在分布式系统的文件包中的多个文件进行快速读取。
本发明实施方式的服务器存储有至少一个文件包,所述至少一个文件包由处理多个文件所形成,所述文件包包括头部块和数据块,所述头部块包括所述多个文件的索引信息,所述服务器包括目录,所述目录包括所述至少一个文件包的存储路径。
本发明实施方式的服务器避免了由于小文件的数量过多而占用过多的内存,有利于设备的稳定和效率的提升。
本发明的实施方式的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实施方式的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施方式的描述中将变得明显和容易理解,其中:
图1是本发明实施方式的文件的存储方法的流程示意图;
图2是本发明实施方式的文件的存储装置的模块示意图;
图3是本发明再一实施方式的文件的存储方法的流程示意图;
图4是本发明再一实施方式的文件的存储装置的模块示意图;
图5是本发明另一实施方式的文件的存储方法的流程示意图;
图6是本发明另一实施方式的文件的存储装置的模块示意图;
图7是本发明又一实施方式的文件的存储方法的流程示意图;
图8是本发明又一实施方式的文件的存储装置的模块示意图;
图9是本发明实施方式的文件的查询方法的流程示意图;
图10是本发明实施方式的文件的查询装置的模块示意图;
图11是本发明实施方式的文件的查询方法的步骤S36的流程示意图;
图12是本发明实施方式的文件的查询装置的读取单元的模块示意图;
主要元件符号说明:
存储装置20、打包模块22、推送模块24、创建模块23、获取模块26、生成模块28、存储模块29、查询装置40、第一获取单元42、第二获取单元44、读取单元46、跳转子单元462、读取子单元464、返回子单元466。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接或可以相互通讯;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
下文的公开提供了许多不同的实施方式或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。此外,本发明提供了的各种特定的工艺和材料的例子,但是本领域普通技术人员可以意识到其他工艺的应用和/或其他材料的使用。
请参阅图1,本发明实施方式的基于分布式系统的文件的存储方法包括步骤:
S12:处理多个文件以形成文件包,文件包包括头部块和数据块,头部块包括多个文件的索引信息,数据块用于存储文件;和
S14:将文件包存储到分布式系统,分布式系统包括目录,目录包括文件包在分布式系统的存储路径。
请参阅图2,本发明实施方式的基于分布式系统的文件的存储装置20包括打包模块22和推送模块24。打包模块22用于处理多个文件以形成文件包,文件包包括头部块和数据块,头部块包括多个文件的索引信息,数据块用于存储文件。推送模块24用于将文件包存储到分布式系统,分布式系统包括目录,目录包括文件包在分布式系统的存储路径。
本发明实施方式的基于分布式系统的文件的存储方法和存储装置20通过将多个文件处理形成文件包,并将文件包推送到分布式系统,在通过分布式系统对文件包进行存储的同时,避免了由于文件的数量过多而占用过多的内存,有利于设备的稳定和效率的提升。
具体地,在一个实施方式中,分布式系统可以是海杜普(Hadoop)的分布式文件系统(Hadoop Distributed File System,HDFS)。为了方便说明,以下的分布式系统均以HDFS为例对本发明进行解释说明。另外,本发明实施方式的存储方法和存储装置20在存储的文件为小文件时的效果最为突出。
HDFS的主要设计是名字节点(Namenode)和数据节点(Datanode)。然而,HDFS系统中,每个文件无论大小都会在Namenode中占用150byte的内存大小。因此,采用HDFS来存储海量的小文件,会加大元数据信息存储,导致Namenode占用内存太大,容易出现小文件在Namenode中占用的内存比小文件本身的大小要大的现象。请注意,文件的大小小于HDFS的数据块(Block)默认的128M则称为小文件。
在一个例子中,每个小文件大小为1k,则10亿个小文件的的大小为:1k*1000000000=95G,而存储10亿个小文件Namenode要占用的内存为:100000000*150/1024/1024/1024≈140G。显然,在该例子中,小文件在Namenode中占用的内存比小文件本身的大小要大很多,这非常不利于存储资源的充分利用。
而且,由于Namenode需要运行在JVM(Java虚拟机)上,而JVM内存过大会造成机器和服务不稳定,因而,如此在工程中不可取。另外,在通过映射/规约(MapReduce)中的Map操作读取文件时,由于Map操作在执行时一般只处理一个文件,因此,读取小文件过多会造成大量的Map操作启动,从而消耗过多的集群资源。
本发明实施方式的基于分布式系统的文件的存储方法和存储装置20可将小文件预先打包成文件包,然后推送到HDFS,可以解决采用HDFS存储海量的小文件容易产生的Namenode占用内存太大的问题。另外,如此存储,在查询时可以利用文件包的头部块中的索引信息对文件包中的文件进行快速读取,不会消耗过多的集群资源。在实际的应用中,本发明实施方式的基于分布式系统的文件的存储方法和存储装置20可以实现将人脸识别的图片、视频以及其他小文件存储到Hadoop上。
请参阅图3,在某些实施方式中,在步骤S14之前,所述文件的存储方法包括步骤:S13创建分布式系统的目录。例如,创建HDFS目录。在图3的实施方式中,步骤S12在步骤S13之前。可以理解,在其它实施方式中,步骤S12可在步骤S13之后,或步骤S12和步骤S13同时进行。
请参阅图4,在某些实施方式中,存储装置20包括创建模块23,创建模块23用于创建分布式系统的目录。
在一个例子中,可以通过以下命令创建HDFS目录:Hadoop fs–mkdir–p/tcdpics/data/10.242.25.108/20160801/。其中,“10.242.25.108”是IP地址,用来记录文件包来自于哪台服务器。“20160801”是文件包推送到HDFS的日期。值得注意的是,在某些例子中,对于每台服务器而言,每天只创建一个目录。如此,可以比较简单地进行HDFS目录的创建,并且,每天的文件放在当天日期的目录下可以使得管理更加方便。
另外,“将文件包存储到分布式系统”具体是指,将本地的文件包推送到在分布式系统创建的HDFS目录下所对应的存储位置,从而使文件包存储到分布式系统。在一个例子中,将1.tar推送到/data/192.168.186.81/2018060601/这个目录,推送完成后,目录变更为:/data/192.168.186.81/2018060601/1.tar,也即是说,这个1.tar文件包已经存放在hdfs文件系统上了,而且存储路径为/data/192.168.186.81/2018060601/。此外,可以通过不定时业务系统,每天按照业务的需要,把文件打包成文件包然后推送到Hadoop的HDFS目录。具体地,不定时是指,可以每隔半小时推送一次,可以每隔一小时推送一次,也可以每天任意指定时间点推送,也就是说,可以根据需要任意调整推送的频率。表1是HDFS目录的示意表。以“1.4G/tcdpics/data/10.242.25.108/20160801/bak-0-0.tar”为例,1.4G表示该目录下的文件大小,“/tcdpics/data/10.242.25.108/20160801/”为HDFS目录,“bak-0-0.tar”为该目录下存放的文件包。
表1
在某些实施方式中,步骤S12包括:
将多个文件处理形成预设格式的文件包。
在某些实施方式中,打包模块22包括打包子模块。打包子模块用于将多个文件处理形成预设格式的文件包。
如此可以实现处理多个文件以形成文件包。
具体地,预设格式包括所述预设格式包括.tar格式。在一个例子中,可以采用tar命令将文件处理成.tar格式的文件包。
采用tar命令处理文件即可将文件打包成.tar格式的文件包。如此,在实现对文件打包的同时,有利于通过网络传输将文件包存储到分布式系统。Tar命令是Linux系统的命令,能将多个文件或者目录归档成一个以.tar结尾的文件。Tar命令的格式为:tar[主选项+辅选项]文件或目录。
更具体地,在一个例子中,采用tar命令把几个小文件f1.data~f6.data,nginx.10.20.zip打包成test.tar文件可以用以下代码实现:tar-cvf test.tar f1.dataf2.data f3.data f4.data f5.data f6.data nginx.10.20.zip。
在某些实施方式中,文件包括文件名称,文件名称包括设备号、文件批编号和时间戳中的至少一种。
如此,根据设备号、文件批编号和时间戳,可以使得每个文件拥有区别于其他文件的唯一的文件名称。其中,设备号是接收文件的服务器的编号,文件批编号是指文件包中该文件的所处的批次,时间戳是接收文件的服务器自动编号的,用于使文件名称不重复。也即是说,每个文件包中的文件是呈批次的,每个文件包中的文件名称都是不同的。在一个实施方式中,文件名称包括设备号、文件批编号和时间戳。例如,在一个文件包中,文件的名称为:3-0101528255417.jpg。其中,“3”是设备号、“010”意味着该文件是该文件包中多批文件的010批,“1528255417”是时间戳。另外,设备号可以是1-100,文件批编号可以是三位,001-999,时间戳可以为十位。在此,不对设备号、文件批编号和时间戳的位数等特征进行限制。
在某些实施方式中,文件包包括文件包名称,文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种。
如此,根据前缀、文件包批编号和文件包数量编号可以使得每个文件包拥有区别于其他文件包的唯一的名称。其中,前缀可以用bak,也可以自定义,文件包批编号是指该文件包在多批文件包中所处的批次,文件包数量编号是指该文件包在其所处批次的多个文件包中的具体序列。也即是说,文件包是呈批次的,每天有多批文件包,每批文件包有多个文件包。在一个实施方式中,文件包名称包括前缀、文件包批编号和文件包数量标号。例如,文件包名称为bak-0-1.tar的文件包中,“bak”为前缀,“0”指该文件包处于多批文件包中的0批次,“1”指该文件包在0批次文件包中的序列为1。需要指出的是,当存在文件包名称相同的两个文件包存储到同一个存储位置时,可进行文件名重复的提示,或可在其中一个文件包的文件包名称上加上区别位来作区分,例如,文件名称均为bak-0-1的两个文件包存储到同一存储位置时,将在该存储位置的其中一个文件包的文件包名称变更为bak-0-1(1)。相应的,要查找文件包名称为“bak-0-1”时,可返回两个文件bak-0-1.tar和bak-0-1(1).tar。
在某些实施方式中,文件包的层级包括日期、文件包批编号、文件包数量编号和文件。
表2是文件包内部结构示意表。其中,“20160801”指日期,98表示该文件包所处的批次,6表示该文件包在98批次的文件包中的序列号为6。“3-0107463165484.jpg”、“3-0108165065718.jpg”、“3-0108374065969.jpg”是该文件包中的3个小文件的名称。以“3-0108374065969.jpg”为例,“3”是设备号,“010”意味着该文件是该文件包中多批文件的010批,“8374065969”是时间戳。
表2
在某些实施方式中,文件包包括10000-20000个文件。
如此,可以显著地解决占用Namenode的内存过大的问题。具体地,文件的容量为8k-500k左右,文件包的容量为600M-2G左右。
请参阅图5,在某些实施方式中,存储方法包括步骤:
S16:遍历文件包的头部块以获取索引信息;和
S18:根据获取到的索引信息生成索引表。
请参阅图6,在某些实施方式中,存储装置20包括获取模块26和生成模块28。获取模块26用于遍历文件包的头部块以获取索引信息。生成模块28用于根据获取到的索引信息生成索引表。
如此,实现索引表的生成,有利于快速查询文件包中的文件。
在某些实施方式中,索引表包括文件包的文件包名称、文件的文件名称、文件内容的起始位置和文件的文件大小。
如此,可以根据文件名称、起始位置和文件大小生成索引表。
如前所述,文件包包括头部块和数据块,在一个例子中,Tar文件包的内部结构如表3所示。
表3
在该例子中,头部块中的索引信息如下所示:
除此之外,该例子中,头部块还包括以下内容:
具体地,在某些实施方式中,获取模块26可以利用Python提供的TarFile模块包含的TarFile对象,通过TarFile对象提供的接口遍历文件包的头部块,从而方便地获得Tar文件包中所有文件的文件名称(name)、偏移量(offset_data)、字节数(size),从而构建出Tar文件包中小文件的索引表。表4是构建的索引表的内容。
表4
请参阅图7,在某些实施方式中,存储方法包括步骤:
S19:将索引表存储到数据库。
请参阅图8,在某些实施方式中,存储装置20包括存储模块29。存储模块29用于将索引表存储到数据库,数据库为分布式系统提供查询索引表的接口。
如此,可以方便后续对文件包中的文件的查询。在一个例子中,可以将索引表存储到Hbase数据库;在另一个例子中,可以将索引表存储到MySQL数据库。在查询文件时,可以通过接口实现对数据库中的索引表的访问。当然,也可以不预先存储索引表,在查询时再生成索引表,不过如此会由于每次查询都需要解析文件包的头部块而使得查询速度变慢。
请参阅图9,本发明实施方式的基于分布式系统的文件的查询方法,用于查询文件包的多个文件中的至少一个文件,文件包由多个文件经处理形成,文件包存储在分布式系统且包括多个文件的索引信息,分布式系统包括目录,目录包括文件包在分布式系统的存储路径。查询方法包括步骤:
S32:获取与至少一个文件相关的输入信息;
S34:根据输入信息和索引信息在目录获取至少一个文件的位置信息;和
S36:根据位置信息读取并返回至少一个文件。
请参阅图10,本发明实施方式的基于分布式系统的文件的查询装置40,用于查询文件包的多个文件中的至少一个文件,文件包由多个文件经处理形成,文件包存储在分布式系统且包括多个文件的索引信息,分布式系统包括目录,目录包括文件包在分布式系统的存储路径。查询装置40包括第一获取单元42、第二获取单元44和读取单元46。第一获取单元42用于获取与至少一个文件相关的输入信息。第二获取单元44用于根据输入信息和索引信息在目录获取至少一个文件的位置信息(存储位置)。读取单元46用于根据位置信息读取并返回至少一个文件。
本发明实施方式的文件的查询方法和查询装置通过输入信息和索引信息可以快速获取文件的位置信息,从而对存储在分布式系统的文件包中的多个文件进行快速读取。
查询所述至少一个文件包括,查询一个文件,查询两个文件,和查询两个以上的文件。具体的文件查询数量可根据输入信息或其它输入数据来判断。
在某些实施方式中,输入信息包括文件包的文件包名称和文件的文件名称,或文件的文件名称和文件存储到分布式系统的日期。
如此,可以根据文件名称和日期实现对文件的查询。
在某些实施方式中,索引信息形成索引表,步骤S34包括:
根据输入信息查找索引表以在目录获取至少一个文件的位置信息。
在某些实施方式中,索引信息形成索引表,第二获取单元44包括查找子单元,查找子单元用于根据输入信息查找索引表以在目录获取至少一个文件的位置信息。
如此,可以实现获取文件的位置信息。可以理解,文件名称与日期在索引表中与文件包名称和HDFS目录至文件包的路径有着一一对应的关系。因此,可以通过输入文件名称和日期来获取文件的位置信息从而查询文件。当然,由于文件包名称和文件名称,文件名称和日期均为唯一主键,因此,也可以通过输入文件包名称和文件名称来实现对文件的查询。
在某些实施方式中,位置信息包括至少一个文件内容的起始位置和文件大小。
如此,可以通过位置信息中的起始位置和文件大小来读取文件。
请参阅图11,在某些实施方式中,步骤S36包括步骤:
S361:根据位置信息获取文件包;
S362:打开文件包并跳转至起始位置;
S364:从起始位置根据文件大小读取至少一个文件;和
S366:返回至少一个文件。
请参阅图12,在某些实施方式中,读取单元46包括获取子单元361、跳转子单元462、读取子单元464和返回子单元466。获取子单元361用于根据位置信息获取文件包,跳转子单元462用于打开文件包并跳转至起始位置;读取子单元464用于从起始位置根据文件大小读取至少一个文件。返回子单元466用于返回至少一个文件。
如此,可以实现根据起始位置和文件大小读取并返回文件。具体地,可以从起始位置根据文件大小一次性读取文件的全部内容。另外,可以先从先从索引表获取小文件的起始位置和文件大小,并调用Hadoop的应用程序编程接口(Application ProgrammingInterface,API),然后把获取到的参数传递给Hadoop的API,最后返回所要查询的小文件的内容。在一个例子中,可以使用org.apache.hadoop.fs(API)的FileSystem对象提供的方法打开Tar文件包,先跳到所要查询的文件的起始位置,然后使用read方法读取所要查询的文件大小的内容。请注意,为了避免并发冲突,需要对读取的方法加synchronized锁,从而保证一个文件在同一时刻只能被一个线程读取。
以下是在Hadoop上实现快速查询Tar文件包中的小文件的示例代码:
综合以上,本发明实施方式的存储方法、存储装置、查询方法和查询装置把小文件通过Linux的tar命令预先存档成文件包,然后推送到HDFS上,同时提供使用索引表的接口,实现从文件包快速查找出文件并输出。查询的API单进程支持几百qps以上,在实际生产中很好解决了海量小文件需要存储到大数据平台并使用的难题。
本发明实施方式还提供一种服务器,服务器存储有至少一个文件包,至少一个文件包由处理多个文件所形成,文件包包括头部块和数据块,头部块包括多个文件的索引信息,服务器包括目录,目录包括至少一个文件包的存储路径。本发明实施方式的服务器通过存储包括多个文件的文件包,避免了由于文件的数量过多而占用过多的内存,有利于设备的稳定和效率的提升,另外,还可以实现通过文件包的头部块中的索引信息对文件包中的文件进行快速查询。
需要说明的是,本实施方式的服务器所存储的文件包可由上述实施方式的文件的存储方法所形成。另外,在某些实施方式中,服务器可包括上述任一实施方式的存储装置和查询装置,用于执行上述任一实施方式的存储方法和查询方法。
可以理解,上述一个或多个实施方式组合而成的实施方式也属于本发明的保护范围。
在本说明书的描述中,参考术语“某些实施方式”、“一个实施方式”、“一些实施方式”、“示意性实施方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合所述实施方式或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施方式,可以理解的是,上述实施方式是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施方式进行变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (11)

1.一种基于分布式系统的文件的存储方法,其特征在于,包括:
将多个小文件打包成.tar格式的文件包,每个所述小文件,是文件的大小小于所述分布式系统的块大小的文件,所述文件包包括头部块和数据块,所述头部块包括所述多个小文件的索引信息,所述数据块用于存储所述小文件;
将本地的所述文件包推送到在所述分布式系统创建的HDFS目录下所对应的存储路径,以将所述文件包存储到所述分布式系统;所述分布式系统包括HDFS目录,所述HDFS目录包括所述文件包在所述分布式系统的存储路径,所述存储路径包括所述文件包所源自的服务器的IP地址、所述文件包被推送至所述分布式系统的当天日期和所述文件包的文件名称;
遍历所述文件包的头部块,获得所述文件包中小文件的索引信息,所述索引信息包括小文件的文件名称、起始位置和文件大小,根据所述索引信息构建出所述文件包中小文件的索引表;
将所述索引表存储到数据库,所述数据库为所述分布式系统提供查询索引表的接口,通过所述接口实现对所述数据库中索引表的访问;
在查询小文件时,获取与小文件相关的输入信息,所述输入信息包括文件包的文件包名称和所述小文件的文件名称,根据所述文件包名称访问数据库获取相应文件包的索引表,根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容;
其中,所述小文件包括文件名称,所述文件名称包括设备号、文件批编号和时间戳中的至少一种,所述设备号是接收文件包的服务器的编号,所述文件批编号是所述文件包中所述小文件所处的批次,所述时间戳是接收文件的服务器自动编号的,用于使所述小文件的文件名称不重复;所述文件包包括文件包名称,所述文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种,所述文件包的层级包括日期、文件包批编号、文件包数量编号和所述小文件,所述文件包批编号是所述文件包在多批文件包中所处的批次,所述文件包数量编号是所述文件包在所处批次的多个文件包中的具体序列。
2.如权利要求1所述的文件的存储方法,其特征在于,对于每台服务器,所述分布式系统创建的HDFS目录中,包括一个对应所述服务器的HDFS目录,源自所述服务器的文件包,存储在包括当天日期的HDFS目录所对应的存储路径下。
3.如权利要求1所述的文件的存储方法,其特征在于,通过不定时业务系统,按照预设频率,将多个小文件打包成.tar格式的文件包并推送到在所述分布式系统创建的HDFS目录下所对应的存储路径。
4.如权利要求1所述的文件的存储方法,其特征在于,所述输入信息包括小文件的文件名称和小文件存储到分布式系统的日期,所述方法还包括:
根据所述小文件的文件名称和小文件存储到分布式系统的日期,访问数据库获取相应文件包的索引表,根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容。
5.一种基于分布式系统的文件的查询方法,用于查询文件包的多个小文件中的至少一个小文件,所述文件包是所述多个小文件打包成.tar格式的文件包,每个所述小文件,是文件的大小小于所述分布式系统的块大小的文件,所述文件包包括头部块和数据块,所述头部块包括所述多个小文件的索引信息,所述数据块用于存储所述小文件;所述分布式系统包括HDFS目录,所述HDFS目录包括所述文件包在所述分布式系统的存储路径,所述存储路径包括所述文件包所源自的服务器的IP地址、所述文件包被推送至所述分布式系统的当天日期和所述文件包的文件名称,所述查询方法包括:
获取与小文件相关的输入信息,所述输入信息包括文件包的文件包名称和所述小文件的文件名称;
根据所述文件包名称访问数据库获取相应文件包的索引表;所述索引表是根据遍历所述文件包的头部块所获得的所述文件包中小文件的索引信息构建出的,所述索引信息包括小文件的文件名称、起始位置和文件大小;
根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容;
其中,所述小文件包括文件名称,所述文件名称包括设备号、文件批编号和时间戳中的至少一种,所述设备号是接收文件包的服务器的编号,所述文件批编号是所述文件包中所述小文件所处的批次,所述时间戳是接收文件的服务器自动编号的,用于使所述小文件的文件名称不重复;所述文件包包括文件包名称,所述文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种,所述文件包的层级包括日期、文件包批编号、文件包数量编号和所述小文件,所述文件包批编号是所述文件包在多批文件包中所处的批次,所述文件包数量编号是所述文件包在所处批次的多个文件包中的具体序列。
6.一种基于分布式系统的文件的存储装置,其特征在于,包括:
打包模块,用于将多个小文件打包成.tar格式的文件包,每个所述小文件,是文件的大小小于所述分布式系统的块大小的文件,所述文件包包括头部块和数据块,所述头部块包括所述多个小文件的索引信息,所述数据块用于存储所述小文件;
推送模块,用于将本地的所述文件包推送到在所述分布式系统创建的HDFS目录下所对应的存储路径,以将所述文件包存储到所述分布式系统;所述分布式系统包括HDFS目录,所述HDFS目录包括所述文件包在所述分布式系统的存储路径,所述存储路径包括所述文件包所源自的服务器的IP地址、所述文件包被推送至所述分布式系统的当天日期和所述文件包的文件名称;
获取模块,用于遍历所述文件包的头部块,获得所述文件包中小文件的索引信息,所述索引信息包括小文件的文件名称、起始位置和文件大小;
生成模块,用于根据所述索引信息构建出所述文件包中小文件的索引表;将所述索引表存储到数据库,所述数据库为所述分布式系统提供查询索引表的接口,通过所述接口实现对所述数据库中索引表的访问;
查询模块,用于在查询小文件时,获取与小文件相关的输入信息,所述输入信息包括文件包的文件包名称和所述小文件的文件名称,根据所述文件包名称访问数据库获取相应文件包的索引表,根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容;
其中,所述小文件包括文件名称,所述文件名称包括设备号、文件批编号和时间戳中的至少一种,所述设备号是接收文件包的服务器的编号,所述文件批编号是所述文件包中所述小文件所处的批次,所述时间戳是接收文件的服务器自动编号的,用于使所述小文件的文件名称不重复;所述文件包包括文件包名称,所述文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种,所述文件包的层级包括日期、文件包批编号、文件包数量编号和所述小文件,所述文件包批编号是所述文件包在多批文件包中所处的批次,所述文件包数量编号是所述文件包在所处批次的多个文件包中的具体序列。
7.如权利要求6所述的文件的存储装置,其特征在于,对于每台服务器,所述分布式系统创建的HDFS目录中,包括一个对应所述服务器的HDFS目录,源自所述服务器的文件包,存储在包括当天日期的HDFS目录所对应的存储路径下。
8.如权利要求6所述的文件的存储装置,其特征在于,所述推送模块,还用于通过不定时业务系统,按照预设频率,将多个小文件打包成.tar格式的文件包并推送到在所述分布式系统创建的HDFS目录下所对应的存储路径。
9.如权利要求6所述的文件的存储装置,其特征在于,所述输入信息包括小文件的文件名称和小文件存储到分布式系统的日期;
所述查询模块,还用于根据所述小文件的文件名称和小文件存储到分布式系统的日期,访问数据库获取相应文件包的索引表,根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容。
10.一种基于分布式系统的文件的查询装置,用于查询文件包的多个小文件中的至少一个小文件,所述文件包是所述多个小文件打包成.tar格式的文件包,每个所述小文件,是文件的大小小于所述分布式系统的块大小的文件,所述文件包包括头部块和数据块,所述头部块包括所述多个小文件的索引信息,所述数据块用于存储所述小文件;所述分布式系统包括HDFS目录,所述HDFS目录包括所述文件包在所述分布式系统的存储路径,所述存储路径包括所述文件包所源自的服务器的IP地址、所述文件包被推送至所述分布式系统的当天日期和所述文件包的文件名称,所述查询装置包括:
第一获取单元,用于获取与小文件相关的输入信息,所述输入信息包括文件包的文件包名称和所述小文件的文件名称;
第二获取单元,用于根据所述文件包名称访问数据库获取相应文件包的索引表;所述索引表是根据遍历所述文件包的头部块所获得的所述文件包中小文件的索引信息构建出的,所述索引信息包括小文件的文件名称、起始位置和文件大小;和
读取单元,用于根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容;
其中,所述小文件包括文件名称,所述文件名称包括设备号、文件批编号和时间戳中的至少一种,所述设备号是接收文件包的服务器的编号,所述文件批编号是所述文件包中所述小文件所处的批次,所述时间戳是接收文件的服务器自动编号的,用于使所述小文件的文件名称不重复;所述文件包包括文件包名称,所述文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种,所述文件包的层级包括日期、文件包批编号、文件包数量编号和所述小文件,所述文件包批编号是所述文件包在多批文件包中所处的批次,所述文件包数量编号是所述文件包在所处批次的多个文件包中的具体序列。
11.一种服务器,其特征在于,所述服务器存储有至少一个文件包,每个所述文件包是多个小文件打包成.tar格式的文件包,每个所述小文件,是文件的大小小于分布式系统的块大小的文件,所述文件包包括头部块和数据块,所述头部块包括所述多个小文件的索引信息,所述数据块用于存储所述小文件;所述服务器包括HDFS目录,所述HDFS目录包括所述文件包在所述服务器的存储路径,所述存储路径包括所述文件包所源自的服务器的IP地址、所述文件包被推送至所述服务器的当天日期和所述文件包的文件名称;其中,所述文件包存储在所述服务器创建的HDFS目录下所对应的存储路径下,所述多个小文件的索引信息用于构建所述文件包的索引表,所述索引表存储在数据库,所述数据库为所述服务器提供查询索引表的接口,通过所述接口实现对所述数据库中索引表的访问,在查询小文件时,获取与小文件相关的输入信息,所述输入信息包括文件包的文件包名称和所述小文件的文件名称,根据所述文件包名称访问数据库获取相应文件包的索引表,根据所述小文件的文件名称查找所述索引表以获取所述小文件的起始位置和文件大小,打开所述文件包并跳转至所述小文件的起始位置,从所述起始位置开始读取所述文件大小的所述小文件的内容;
其中,所述小文件包括文件名称,所述文件名称包括设备号、文件批编号和时间戳中的至少一种,所述设备号是接收文件包的服务器的编号,所述文件批编号是所述文件包中所述小文件所处的批次,所述时间戳是接收文件的服务器自动编号的,用于使所述小文件的文件名称不重复;所述文件包包括文件包名称,所述文件包名称包括前缀、文件包批编号和文件包数量标号中的至少一种,所述文件包的层级包括日期、文件包批编号、文件包数量编号和所述小文件,所述文件包批编号是所述文件包在多批文件包中所处的批次,所述文件包数量编号是所述文件包在所处批次的多个文件包中的具体序列。
CN201810645604.XA 2018-06-21 2018-06-21 文件的存储方法和装置、查询方法和装置及服务器 Active CN110196841B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810645604.XA CN110196841B (zh) 2018-06-21 2018-06-21 文件的存储方法和装置、查询方法和装置及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810645604.XA CN110196841B (zh) 2018-06-21 2018-06-21 文件的存储方法和装置、查询方法和装置及服务器

Publications (2)

Publication Number Publication Date
CN110196841A CN110196841A (zh) 2019-09-03
CN110196841B true CN110196841B (zh) 2023-12-05

Family

ID=67751287

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810645604.XA Active CN110196841B (zh) 2018-06-21 2018-06-21 文件的存储方法和装置、查询方法和装置及服务器

Country Status (1)

Country Link
CN (1) CN110196841B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113947349A (zh) * 2021-09-28 2022-01-18 安徽云星空信息科技有限公司 一种物料数据处理方法及系统
CN114048185B (zh) * 2021-11-18 2022-09-02 北京聚存科技有限公司 一种分布式文件系统中海量小文件透明打包存储与访问的方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN103856567A (zh) * 2014-03-26 2014-06-11 西安电子科技大学 基于Hadoop分布式文件系统的小文件存储方法
CN104572670A (zh) * 2013-10-15 2015-04-29 方正国际软件(北京)有限公司 一种小文件的存储、查询及删除方法和系统
CN104820717A (zh) * 2015-05-22 2015-08-05 国网智能电网研究院 一种海量小文件存储及管理方法和系统
CN105069048A (zh) * 2015-07-23 2015-11-18 东方网力科技股份有限公司 一种小文件存储方法、查询方法和装置
CN105183839A (zh) * 2015-09-02 2015-12-23 华中科技大学 一种基于Hadoop的小文件分级索引的存储优化方法
US9460147B1 (en) * 2015-06-12 2016-10-04 International Business Machines Corporation Partition-based index management in hadoop-like data stores
CN107045422A (zh) * 2016-02-06 2017-08-15 华为技术有限公司 分布式存储方法和设备
CN107562915A (zh) * 2017-09-12 2018-01-09 郑州云海信息技术有限公司 读取小文件的方法、装置和设备及计算机可读存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN104572670A (zh) * 2013-10-15 2015-04-29 方正国际软件(北京)有限公司 一种小文件的存储、查询及删除方法和系统
CN103856567A (zh) * 2014-03-26 2014-06-11 西安电子科技大学 基于Hadoop分布式文件系统的小文件存储方法
CN104820717A (zh) * 2015-05-22 2015-08-05 国网智能电网研究院 一种海量小文件存储及管理方法和系统
US9460147B1 (en) * 2015-06-12 2016-10-04 International Business Machines Corporation Partition-based index management in hadoop-like data stores
CN105069048A (zh) * 2015-07-23 2015-11-18 东方网力科技股份有限公司 一种小文件存储方法、查询方法和装置
CN105183839A (zh) * 2015-09-02 2015-12-23 华中科技大学 一种基于Hadoop的小文件分级索引的存储优化方法
CN107045422A (zh) * 2016-02-06 2017-08-15 华为技术有限公司 分布式存储方法和设备
CN107562915A (zh) * 2017-09-12 2018-01-09 郑州云海信息技术有限公司 读取小文件的方法、装置和设备及计算机可读存储介质

Also Published As

Publication number Publication date
CN110196841A (zh) 2019-09-03

Similar Documents

Publication Publication Date Title
CN104951474B (zh) 一种用于获取MySQL binlog增量日志的方法和装置
US8099421B2 (en) File system, and method for storing and searching for file by the same
CN104794123B (zh) 一种为半结构化数据构建NoSQL数据库索引的方法及装置
CN106326292B (zh) 数据结构和文件聚合、读取方法及装置
CN108491549B (zh) 一种分布式存储系统中文件目录的创建方法及装置
CN103282899B (zh) 文件系统中数据的存储方法、访问方法及装置
CN102332030A (zh) 用于分布式键-值存储系统的数据存储、管理和查询方法及系统
US20150199433A1 (en) Method and system for search engine indexing and searching using the index
CN110196841B (zh) 文件的存储方法和装置、查询方法和装置及服务器
CN108614837B (zh) 文件存储和检索的方法及装置
CN105912675B (zh) 一种针对小文件合并的批量删除/查询方法与装置
CN102739622A (zh) 一种可扩展的数据存储系统
CN109885577B (zh) 数据处理方法、装置、终端及存储介质
CN109284273B (zh) 一种采用后缀数组索引的海量小文件查询方法及系统
CN113986873A (zh) 一种海量物联网数据模型化的处理、存储与共享方法
CN107704475B (zh) 多层分布式非结构化数据存储方法、查询方法及装置
CN111459945A (zh) 一种基于HBase的分层式索引查询方法
CN117271531B (zh) 一种数据存储方法、系统、设备及介质
CN114372064A (zh) 数据处理装置、方法、计算机可读介质及处理器
CN116756253B (zh) 关系型数据库的数据存储、查询方法、装置、设备和介质
WO2021128893A1 (zh) 一种垃圾数据的识别方法、系统、电子设备及存储介质
CN107180119B (zh) 数字产品生成方法和数字产品生成装置
CN115454353B (zh) 一种面向空间应用数据的高速写入及查询方法
CN112579633A (zh) 一种数据检索方法、装置、设备及存储介质
US6480864B1 (en) RAM based directory layer for a flash file system

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