一种图片存储方法、图片查询方法及装置与流程

文档序号:19570980发布日期:2019-12-31 18:55阅读:384来源:国知局
一种图片存储方法、图片查询方法及装置与流程
本申请涉及数据存储
技术领域
,尤其涉及一种图片存储方法、图片查询方法及装置。
背景技术
:分布式文件系统(hadoopdistributedfilesystem,hdfs)提供了基础的存储服务,分布式文件系统是分布式系统基础架构项目的核心子项目,是专为解决大数据存储而产生的。但是,分布式文件系统是专为文本类大文件开发的,如果按照同样的存储方式对海量图片进行存储,就会存在浪费存储单元的存储空间的问题,因为根据存储规则每张图片都需要存储在一个存储单元中,而单张图片的所占的存储空间的大小通常是远小于分布式文件系统的存储单元的存储空间的,这样,就会造成存储单元利用率低,存储资源得不到合理利用的问题。为了解决上述问题,现有技术中,利用分布式文件系统自带三种文件合并方案以期解决上述问题。第一种方式是通过打包方式将多个文件合并成一个.har为后缀的文件,但是该方案适用于手动打包和定时打包,对har包的大小无法准确控制,存储单元的利用率较低,且不适合图片文件的问题;第二种方式是基于序列文件是将文本文件进行合并成一个大文件,同时对这些文本文件的位置信息构建索引,但是序列文件不支持追加本地文件的内容操作;第三种方式是基于分布式系统基础架构内置了一个组合输入格式根据一定的规则,将分布式文件系统上多个小文件合并到一个分片中,然后会启用一个分块任务来处理这里面的文件,但是方案多用于分布式运算程序的编程框架程序中,主要目的是处理文本文件,对于图数据无法处理,使用范围上存在一定的局限性。因此,如何找到一种可以将海量图片存储至分布式文件系统,且可以有效利用分布式文件系统中的存储单元的存储空间的存储方法是目前亟待解决的问题。技术实现要素:有鉴于此,本申请实施例的目的在于提供一种图片存储方法、图片查询方法及装置,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。主要包括以下几个方面:第一方面,本申请实施例提供一种图片存储方法,所述图片存储方法包括:从分布式文件系统中读取至少一个图片文件;将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统;通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件;将所述至少一个第一存储文件写入所述分布式文件系统,并删除所述分布式文件系统中的所述至少一个图片文件。在一种可能的实施方式中,所述通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件,包括:将所述至少一个图片文件中每个图片文件依次写入所述分布式存储系统的缓存内存;当检测到所述缓存内存的存储量等于预设存储值时,将所述缓存内存中的图片文件写入第二存储文件,并在写入后清空所述缓存内存中的图片文件;所述预设存储值小于所述缓存内存所能存储的最大存储量;当检测到存储有图片文件的所述第二存储文件的数量等于预设数量时,将所述预设数量的所述第二存储文件,压缩合并为一个所述第一存储文件。在一种可能的实施方式中,所述预设数量是根据所述第二存储文件的最大存储量、所述第一存储文件的最大存储量以及压缩率确定的。在一种可能的实施方式中,在所述从分布式文件系统中读取至少一个图片文件之前,所述图片存储方法还包括:创建分布式存储系统表;在所述将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统之后,所述图片存储方法还包括:针对所述至少一个图片文件中每个图片文件,根据每个图片文件的图片描述信息,生成与每个图片文件对应的索引信息;将每个图片文件的所述索引信息与所述图片描述信息一一对应写入所述分布式存储系统表。在一种可能的实施方式中,所述图片存储方法,还包括:当接收到在线传输的图片文件时,直接将该图片文件发送给所述分布式存储系统。第二方面,本申请实施例还提供一种图片查询方法,应用于使用第一方面所述的图片存储方法的分布式文件系统和分布式存储系统中,所述图片查询方法包括:根据待查询图片文件的图片描述信息,生成与所述待查询图片文件对应的索引信息;根据所述待查询图片文件对应的索引信息,从所述分布式存储系统的分布式存储系统表中,检索出所述待查询图片文件在所述分布式文件系统中的路径信息;根据所述路径信息,从所述分布式文件系统中获取所述待查询图片文件。在一种可能的实施方式中,所述图片描述信息包括以下信息中的至少一种:图片名称、图片大小、图片类型、图片创建时间。第三方面,本申请实施例还提供一种图片存储装置,所述图片存储装置包括:读取模块,用于从分布式文件系统中读取至少一个图片文件;发送模块,用于将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统;合并模块,用于通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件;第一写入模块,用于将所述至少一个第一存储文件写入所述分布式文件系统,并删除所述分布式文件系统中的所述至少一个图片文件。在一种可能的实施方式中,所述合并模块用于根据以下步骤合并成至少一个第一存储文件:将所述至少一个图片文件中每个图片文件依次写入所述分布式存储系统的缓存内存;当检测到所述缓存内存的存储量等于预设存储值时,将所述缓存内存中的图片文件写入第二存储文件,并在写入后清空所述缓存内存中的图片文件;所述预设存储值小于所述缓存内存所能存储的最大存储量;当检测到存储有图片文件的所述第二存储文件的数量等于预设数量时,将所述预设数量的所述第二存储文件,压缩合并为一个所述第一存储文件。在一种可能的实施方式中,所述预设数量是根据所述第二存储文件的最大存储量、所述第一存储文件的最大存储量以及压缩率确定的。在一种可能的实施方式中,所述图片存储装置还包括:创建模块,用于创建分布式存储系统表;生成模块,用于针对所述至少一个图片文件中每个图片文件,根据每个图片文件的图片描述信息,生成与每个图片文件对应的索引信息;第二写入模块,用于将每个图片文件的所述索引信息与所述图片描述信息一一对应写入所述分布式存储系统表。在一种可能的实施方式中,所述发送模块,还用于:当接收到在线传输的图片文件时,直接将该图片文件发送给所述分布式存储系统。第四方面,本申请实施例还提供了一种图片查询装置,所述图片查询装置包括:生成模块,用于根据待查询图片文件的图片描述信息,生成与所述待查询图片文件对应的索引信息;检索模块,用于根据所述待查询图片文件对应的索引信息,从所述分布式存储系统的分布式存储系统表中,检索出所述待查询图片文件在所述分布式文件系统中的路径信息;获取模块,用于根据所述路径信息,从所述分布式文件系统中获取所述待查询图片文件。在一种可能的实施方式中,所述图片描述信息包括以下信息中的至少一种:图片名称、图片大小、图片类型、图片创建时间。第五方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的图片存储方法的步骤,和/或执行上述第二方面或第二方面中任一种可能的实施方式中所述的图片查询方法的步骤。第六方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的图片存储方法的步骤,和/或执行上述第二方面或第二方面中任一种可能的实施方式中所述的图片查询方法的步骤。本申请实施例通过从分布式文件系统中读取至少一个图片文件,将读取到的至少一个图片文件中的每个图片文件依次发送给分布式存储系统,通过分布式存储系统,将至少一个图片文件合并成至少一个第一存储文件,将至少一个第一存储文件写入分布式文件系统,并删除分布式文件系统中的至少一个图片文件。这样,通过分布式存储系统将从分布式文件系统中读取的大量图片文件进行合并得到多个第一存储文件,并将多个存储文件重新写入分布式文件系统中的各个存储单元中,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。进一步地,本申请实施例,针对现有技术中分布式文件系统存储的每个图片都会在产生一条元数据信息,并将该元数据信息放在管理节点内存中,致使在将大量的图片进行存储时,会造成管理节点的管理压力过大,出现溢出、宕机等问题,提出了一种可以不通过管理节点来管理分布式文件系统中存储的图片文件,而是通过将待存储的图片文件的元数据信息写入至分布式存储系统表中,进而通过分布式存储表来管理图片文件的元数据信息,不仅可以节省分布式文件系统中管理节点的存储空间,也减轻了管理节点对图片文件的元数据进行管理的压力,可以规避因图片文件过多引发的集群宕机的问题,同时减轻管理节点的内存使用率,提高集群稳定性,使得分布式文件系统的存储资源充分利用。为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1示出了本申请实施例所提供的一种图片存储方法的流程图;图2示出了本申请实施例所提供的一种图片查询方法的流程图;图3示出了本申请实施例所提供的一种图片存储装置的结构示意图之一;图4示出了本申请实施例所提供的一种图片存储装置的结构示意图之二;图5示出了本申请实施例所提供的一种图片查询装置的结构示意图;图6示出了本申请实施例所提供的一种电子设备的结构示意图。具体实施方式为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中的附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应当理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的全部其他实施例,都属于本申请保护的范围。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。根据存储规则每张图片都需要存储在一个存储单元中,而单张图片的所占的存储空间的大小通常是远小于分布式文件系统的存储单元的存储空间的,这样,就会造成存储单元利用率低,存储资源得不到合理利用的问题。为了解决上述问题,现有技术中,利用分布式文件系统自带三种文件合并方案以期解决上述问题。第一种方式是通过打包方式将多个文件合并成一个.har为后缀的文件,但是该方案适用于手动打包和定时打包,对har包的大小无法准确控制,存储单元的利用率较低,且不适合图片文件的问题;第二种方式是基于序列文件是将文本文件进行合并成一个大文件,同时对这些文本文件的位置信息构建索引,但是序列文件不支持追加本地文件的内容操作;第三种方式是基于分布式系统基础架构内置了一个组合输入格式根据一定的规则,将分布式文件系统上多个小文件合并到一个分片中,然后会启用一个分块任务来处理这里面的文件,但是方案多用于分布式运算程序的编程框架程序中,主要目的是处理文本文件,对于图数据无法处理,使用范围上存在一定的局限性。需要说明的是,对于分布式文件系统,根据存储规则每张图片都需要存储在一个存储单元中,而单张图片的所占的存储空间的大小通常是远小于分布式文件系统的存储单元的存储空间的,这样,就会造成存储单元利用率低,存储资源得不到合理利用的问题。现有技术中,利用分布式文件系统自带三种文件合并方案以期解决上述问题。第一种方式是通过打包方式将多个文件合并成一个.har为后缀的文件,但是该方案适用于手动打包和定时打包,对har包的大小无法准确控制,存储单元的利用率较低,且不适合图片文件的问题;第二种方式是基于序列文件是将文本文件进行合并成一个大文件,同时对这些文本文件的位置信息构建索引,但是序列文件不支持追加本地文件的内容操作;第三种方式是基于分布式系统基础架构内置了一个组合输入格式根据一定的规则,将分布式文件系统上多个小文件合并到一个分片中,然后会启用一个分块任务来处理这里面的文件,但是方案多用于分布式运算程序的编程框架程序中,主要目的是处理文本文件,对于图数据无法处理,使用范围上存在一定的局限性。针对上述问题,本申请提供了一种图片存储方法、图片查询方法及装置,从分布式文件系统中读取至少一个图片文件,将读取到的至少一个图片文件中的每个图片文件依次发送给分布式存储系统(hadoopdatabase,hbase),通过分布式存储系统,将至少一个图片文件合并成至少一个第一存储文件,将至少一个第一存储文件写入分布式文件系统,并删除分布式文件系统中的至少一个图片文件。这样,通过分布式存储系统将从分布式文件系统中读取的大量图片文件进行合并得到多个第一存储文件,并将多个存储文件重新写入分布式文件系统中的各个存储单元中,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。为便于对本申请进行理解,下面结合具体实施例对本申请提供的技术方案进行详细说明。图1为本申请实施例所提供的一种图片存储方法的流程图,所述图片存储方法包括以下步骤:s101:从分布式文件系统中读取至少一个图片文件。该步骤中,由于分布式文件系统的存储规则是一个图片文件就需要占用分布式文件系统中的一个存储单元进行存储,对于海量图片存储至分布式文件系统的情况,会占用分布式文件系统中的大量存储单元,而每个图片文件所占内存空间的大小远远小于存储单元的最大存储量,会浪费存储单元的存储空间,降低存储单元的利用率,故本申请先将存储在分布式文件系统中的图片文件读取出来,再进行合并成大的第一存储文件后,再将第一存储文件重新写入分布式文件系统中的存储单元,这样,一个存储单元可以存储一个大的第一存储文件,即一个存储单元实现了对多张图片进行存储,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。一示例中,假设一个图片所占内存大小为1m,分布式文件系统中的存储单元的最大存储量为128m,一个图片只能占用一个存储单元中,所以在128m的存储单元存储1m的图片之后,便不能继续存储其他的图片,其他的图片是能存储在其他的存储单元中,这样一个1m的图片占用128m的内存,存储单元中便有127m的内存空间便浪费了,当有海量图片需要存储的时候,会浪费更多的内存空间。这里,分布式文件系统的存储单元最大存储量默认大小是64m,也可以设置默认大小为128m,需说明的是,随着计算机技术的发展,分布式文件系统的存储单元默认大小可能会发生变化,因此具体数值是本领域技术人员根据实际情况可以确定出的,这里64m或128m并不用于限定本发明的保护范围,这里不再赘述。s102:将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统。该步骤中,将从分布式文件系统中的各个存储单元中读取出的海量图片依次发送给分布式存储系统并将海量图片写入分布式存储系统中,通过将海量图片写入分式存储系统,可以释放分布式文件系统存储单元的内存空间。这里,分布式存储系统为分布式系统基础架构数据库,分布式存储系统是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它基于行键、列键和时间戳建立索引,是一个可随机访问的存储和检索数据平台提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它仅能通过主键来检索数据,主要用来存储非结构化和半结构化的松散数据。s103:通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件。该步骤中,将从分布式文件系统中读取出的图片,依次的存储至分布式存储系统中,当图片文件达到一定数量时,合并这些图片文件成一个存储文件大文件。s104:将所述至少一个第一存储文件写入所述分布式文件系统,并删除所述分布式文件系统中的所述至少一个图片文件。该步骤中,将合并完的每一个第一存储文件写入至分布式文件系统中的存储单元中,若第一存储文件所占内存小于或等于分布式文件系统存储单元的最大存储量,则可以直接将第一存储文件写入分布式文件系统的存储单元;若第一存储文件所占内存大于分布式文件系统中的存储单元的最大存储量,会有一个切分的过程,将分布式文件系统的存储单元填满以后剩下的部分存放至下一个分布式文件系统中的存储单元,在第一存储文件写入至分布式文件系统中的存储单元后,将分布式文件系统中的存储单元中原来的存储的图片删除。这样,将原来分布式文件系统的存储单元中只能存放一个图片通过把多个图片写入至分布式存储系统形成一个第一存储文件再写入分布式文件系统的存储单元中,并且删除分布式文件系统的存储单元原来的图片,可以提高分布式文件系统的存储单元内存的利用率,充分利用存储单元的内存空间。需要说明的是,在合并成一个第一存储文件之后,也可将存储文件到文件写入到反向代理服务器(nginx)中,nginx是一款自由的、开源的、高性能的超文本传输协议(http)服务器和反向代理服务器。将从分布式文件系统中读取的海量图片,经过在分布式存储系统中合并成的一个第一存储文件写入nginx,而不用分布式文件系统存储该第一存储文件,可以更彻底的释放分布式文件系统的存储单元的内存空间,提高海量图片在存储过程中的存储空间效率。在本申请实施例中,从分布式文件系统中读取至少一个图片文件,将读取到的至少一个图片文件中的每个图片文件依次发送给分布式存储系统,通过分布式存储系统,将至少一个图片文件合并成至少一个第一存储文件,将至少一个第一存储文件写入分布式文件系统,并删除分布式文件系统中的至少一个图片文件。本申请实施例中,通过分布式存储系统将从分布式文件系统中读取的大量图片文件进行合并得到多个第一存储文件,并将多个存储文件重新写入分布式文件系统中的各个存储单元中,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。在一种可能的实施方式中,在s103中通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件,包括以下步骤:步骤(1):将所述至少一个图片文件中每个图片文件依次写入所述分布式存储系统的缓存内存。该步骤中,将分布式文件系统的存储单元获取到的海量图片依次地写入分布式存储系统中的缓存文件中进行缓存,该缓存文件具有将图片文件缓存在该缓存文件中,且在达到一定阈值的时候会触发一个指令将缓存文件的图片文件写入其他文件,并清空缓存文件中的图片文件的功能。步骤(2):当检测到所述缓存内存的存储量等于预设存储值时,将所述缓存内存中的图片文件写入第二存储文件,并在写入后清空所述缓存内存中的图片文件;所述预设存储值小于所述缓存内存所能存储的最大存储量。该步骤中,当分布式存储系统中的缓存文件存储量达到一定预设存储值时,缓存文件会触发一个指令,该指令将缓存文件中缓存的图片文件写入第二存储文件中,并清空缓存文件中的图片文件,以备继续进行从分布式文件系统的存储单元中写入海量图片的步骤。其中,预设存储值小于缓存文件可以存储的最大存储量,优选地,一般默认为缓存文件最大存储量的80%。需要注意的是,从分布式文件系统中读取图片和将图片写入分布式存储系统是一个持续进行的过程,先将读取到的图片写入分布式存储系统的缓存文件中,当缓存的图片文件的存储量达到预设存储值时,将图片文件写入第二存储文件时,并清空缓存文件,这样,可以使读取到的图片持续不间断地写入缓存文件中。步骤(3):当检测到存储有图片文件的所述第二存储文件的数量等于预设数量时,将所述预设数量的所述第二存储文件,压缩合并为一个所述第一存储文件。该步骤中,缓存文件中的图片不断被写入第二存储文件中,当第二存储文件的数量达到预设数量的时候,会触发压缩合并指令,将预设数量的文件进行合并,并压缩成一个第一存储文件。在上述实施例中,所述预设数量是根据所述第二存储文件的最大存储量、所述第一存储文件的最大存储量以及压缩率确定的。该步骤中,当第二存储文件的数量达到预设数量的时候,会触发压缩合并指令,将预设数量的第二存储文件进行压缩合并,生成一个第一存储文件。这里,预设数量的第二存储文件进行压缩合并后所占的存储空间,需要小于第一存储文件的最大存储量,故预设数量需要根据第二存储文件的最大存储量、第一存储文件的最大存储量以及压缩率确定。其中,缓存文件的最大存储量的设置可以通过计算机指令配置,也可以默认大小为128mb。在一种可能的实施方式中,在s101中在所述从分布式文件系统中读取至少一个图片文件之前,所述图片存储方法还包括:创建分布式存储系统表。该步骤中,为了将海量图片存储到分布式存储系统中,先建立分布式存储系统表,分布式存储系统以表的形式存储数据,表由行和列组成,列由主键和其他列簇组成。其中,主键是根据图片文件信息基于预设规则生成的具有唯一性的键值,根据图片文件的多少,键值可以有几千、几万甚至几亿个,每一个键值对应着唯一的图片信息;其他列簇为图片文件的信息,可以根据实际业务的需要存储图片的什么信息来设置,可以有图片文件的名称、图片文件的大小、图片文件的内容、图片文件的类型和图片文件的路径等。在所述将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统之后,所述图片存储方法还包括:步骤a:针对所述至少一个图片文件中每个图片文件,根据每个图片文件的图片描述信息,生成与每个图片文件对应的索引信息。该步骤中,每个图片都有自己的描述信息,如图片大小、图片名称、图片存储时间等,根据图片的描述信息按照预设规则生成与每个图片文件对应的索引信息。一示例中,假设一个命名为“工作环境”的图片文件,基于预设规则根据图片名称生成一个主键,比如键值为6,则在分布式存储系统表中,键值为6的那一行即为命名为“工作环境”这一图片文件的所有信息。需要注意的是,分布式存储系统中的行是按照主键的顺序排序的,在生成主键过程中,生成的键值是临近的,但是临近的键值会存储在同一计算机集群节点中,这样就造成了有的集群节点存储量过大,有的集群节点存储量几乎为零的状况,集群节点的存储量过大就造成了用户频繁访问存储量大的集群节点,大量访问会使热点区域所在的单个机器超出自身承受能力,引起性能下降甚至是集群节点不可用,所以为了避免这种问题,可以图片文件名倒置再生成主键或使用哈希方法,使负载分散到整个集群,提高数据离散度。进一步地,为了确保每条数据唯一性,在设计主键时,需要考虑避免主键的重复,因为主键一旦重复,后入数据将覆盖前面写入的数据,造成了文件的丢失,所以为了避免主键重复的情况,优选地,可以通过路径+文件名+文件后缀的方式生成主键。在现实的开发中,应根据实际的场景,围绕着唯一性和离散型原则设计主键。一示例中,假设一个图片路径为:e:\图片\工作\工作环境.jpg,名称为“工作环境”,后缀为:jpg,可以通过将这三种图片描述信息结合到一起生成主键,这样生成的键值具有唯一性和离散型。步骤b:将每个图片文件的所述索引信息与所述图片描述信息一一对应写入所述分布式存储系统表。该步骤中,将每个图片的主键所在一个行与其对应的描述信息所在的列对应的写入到分布式存储系统表中,即将每个图片文件的索引信息与图片描述信息一一对应存储。具体地,在图片文件生成主键写入分布式存储系统表中成为一列,再将根据实际业务需要的图片描述信息写入分布式存储系统表中的第一行,这样分布式存储系统表中的每一个单元格都对应着每个图片文件特定的描述信息,在存储图片文件是可以一一对应存储,这样,就可以通过键值就可以查询到对应的图片文件信息。其中,图片描述信息可以根据现实开发中的应用来设计,需要存储图片文件的什么信息,可以设计什么样的列簇。分布式存储系统表的设计应该简单明了,不需要设计得太多内容,也不需要太复杂。需要注意的是,图片文件存储在分布式存储系统表中是以二进制流的形式存储的,为了得到完整的图片信息,列簇内容中必须涵盖图片内容这一项,使得图片信息可以完整。一示例中,假设根据实际业务需要,需要存储图片内容,图片大小,图片创建时间和图片路径,可以如下设计分布式存储系统表,参见表1所示。表1:分布式存储系统表rowkey图片内容图片大小图片创建时间图片路径key1key2……需要说明的是,现有技术中,图片文件的元数据信息存储在分布式文件系统中的管理节点(namenode,nn)中,元数据信息包含图片文件的存储路径、大小、命名等信息。在海量图片文件进行存储时,每个图片文件就会占用分布式文件系统的一个存储单元,而且每个图片文件还会对应产生一条元数据信息,并将元数据信息存储在分布式文件系统的管理节点上,这样,不仅会浪费大量存储单元的存储空间,还会将存储过程中生成的大量的元数据信息存储在管理节点中,而管理节点的存储大小是有限的,若将海量图片文件的元数据信息都存储在管理节点中,会造成管理节点压力过大,甚至崩溃,最终造成由于图片文件的元数据信息没有写入到磁盘中,导致图片文件数据丢失的情况发生。一示例中,假设一条元数据信息占用内存500b,在海量图片数据下(如10亿个图片),将至少消耗掉465gb的内存,目前主流的服务器,管理节点最大内存在128-256gb之间,所以,当图片文件的元数据量过大时,会因管理节点的节点内存不足导致宕机的情况发生。这里,本申请针对现有技术中分布式文件系统存储的每个图片都会在产生一条元数据信息,并将该元数据信息放在管理节点内存中,致使在将大量的图片进行存储时,会造成管理节点的管理压力过大,出现溢出、宕机等问题,提出了一种可以不通过管理节点来管理分布式文件系统中存储的图片文件,而是通过将待存储的图片文件的元数据信息写入至布式存储系统表中,进而通过分布式存储表来管理图片文件的元数据信息,不仅可以节省分布式文件系统中管理节点的存储空间,也减轻了管理节点对图片文件的元数据进行管理的压力,可以规避因图片文件过多引发的集群宕机的问题,同时减轻管理节点的内存使用率,提高集群稳定性,使得分布式文件系统的存储资源充分利用。在一种可能的实施方式中,所述图片存储方法,还包括:当接收到在线传输的图片文件时,直接将该图片文件发送给所述分布式存储系统。该步骤中,当图片为在线实时的图片,可以不用将图片文件先存入分布式文件系统的存储单元中,而是直接把在线图片缓存到分布式存储系统的缓存文件中,当缓存文件达到预设存储值时,将缓存文件中的图片文件流出至存储文件,并清空缓存文件,当存储文件达到预设数值时,再压缩合并出一个第一存储文件,最后写入到分布式文件系统的存储单元中,这样,通过先在分布式存储系统中存储生成一个第一存储文件,写入到分布式文件系统的存储单元中,避免了一个存储单元中只能放一个图片文件的情况下,节省了存储空间,增加了分布式文件系统的存储单元利用率。图2为本申请实施例所提供的一种图片查询方法的流程图。如图2所示,图片查询方法,包括以下步骤:s201:根据待查询图片文件的图片描述信息,生成与所述待查询图片文件对应的索引信息。该步骤中,基于待查询图片的描述信息,可以是图片名称,图片类型等,用于图片存储方法一致的预设规则生成与带查询图片相对应的索引信息,这里,索引信息为主键。需要注意的是,在图片存储时,为了将待存储的图片文件存入到分布式存储系统表中,将待存储图片文件通过预设规则生成主键,这个主键值是唯一的,所以在要查询图片的时候,基于带查询图片的描述信息,用同一预设规则生成主键,就可以找到该图片文件在分布式存储系统表所在的位置。s202:根据所述待查询图片文件对应的索引信息,从所述分布式存储系统的分布式存储系统表中,检索出所述待查询图片文件在所述分布式文件系统中的路径信息。该步骤中,根据待查询图片的主键,在分布式存储系统的分布式存储系统表中找到该键值,在这个键值对应的这一行,即为待查询图片的信息,从中找到图片文件存储在分布式文件系统中存储单元的路径信息。一示例中,假设基于待查询图片文件生成的键值为10,则可以找到键值为10这一行,这一行中找到图片路径这一列,图片路径这列与键值为10这行的交叉的那个单元格,即为该待查询图片的路径信息。s203:根据所述路径信息,从所述分布式文件系统中获取所述待查询图片文件。该步骤中,基于查询到的待查询图片文件存储在分布式文件系统中存储单元的路径信息,从图片文件所存储的分布式文件系统的存储单元中获取待查询的图片。需要说明的是,通常,在图片文件的存储中,将每一个图片文件存储在分布式文件系统的一个存储单元的同时,还要将每个图片对应的元数据信息存储在分布式文件系统的管理节点上,而且每存储一个图片就要产生一条元数据信息,这样,不仅会浪费大量存储单元的存储空间,还会由于将生成的大量的元数据信息存储在管理节点,从而造成分布式文件系统的管理节点压力过大,甚至崩溃,严重地,还可能出现由于图片文件的元数据信息没有成功写入到磁盘中,造成数据丢失的情况。而本申请将大量图片文件经过处理后得到多个第一存储文件存储在分布式文件系统中,充分利用了分布式文件系统中存储单元的存储空间,提高了存储单元的利用率,并且将图片的元数据信息存储在分布式存储系统的表中,即不通过分布式文件系统的管理节点来管理图片,而是通过分布式存储系统表来管理图片,这样,可以直接通过待查询图片的索引信息就可以在分布式系统表中查询到图片在分布式文件系统中的存储位置,进而获取该图片文件,不但可以节省分布式文件系统中管理节点的存储空间,还可以减小管理节点压力,使得分布式文件系统的存储资源充分利用。在上述实施例中,所述图片描述信息包括以下信息中的至少一种:图片名称、图片大小、图片类型、图片创建时间。进一步地,基于待查询图片,首先知道待查询图片的名称、大小、类型或者创建时间,通过这些描述信息,根据预设规则生成主键,通过生成的主键寻找待查询图片文件信息。一示例中,在图片存储过程中,将命名为“除夕夜团圆饭”的图片根据预设规则生成的主键值为8,在列簇图片名称这一栏写入“除夕夜团圆饭”对应的二进制流信息,还有其他列簇都写入该图片对应的各个信息,在查询图片名称为“除夕夜团圆饭”时,根据“除夕夜团圆饭”图片名称和同一预设规则生成的主键值8,找到分布式存储系统表中的键值为8这一行,对应的这一行就是待查询图片的所有信息,找到图片路径这一列,就可以找到该待查询图片在分布式文件系统中存储位置,进而找到该待查询图片。基于同一申请构思,本申请实施例中还提供了与上述实施例提供的图片存储方法对应的图片存储装置,由于本申请实施例中的装置解决问题的原理与本申请上述实施例的图片存储方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。参见图3所示,为本申请实施例提供的一种图片存储装置300的结构示意图之一,参见图4所示,为本申请实施例提供的一种图片存储装置300的结构示意图之二,其中,如图3和图4所示,本申请实施例提供的图片存储装置300,包括:读取模块310,用于从分布式文件系统中读取至少一个图片文件;发送模块320,用于将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统;合并模块330,用于通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件;第一写入模块340,用于将所述至少一个第一存储文件写入所述分布式文件系统,并删除所述分布式文件系统中的所述至少一个图片文件。本申请实施例中,通过读取模块310从分布式文件系统中读取至少一个图片文件,再通过发送模块320将读取到的至少一个图片文件中的每个图片文件依次发送给分布式存储系统,通过合并模块330,将至少一个图片文件合并成至少一个第一存储文件,再通过第一写入模块340将至少一个第一存储文件写入分布式文件系统,并删除分布式文件系统中的至少一个图片文件。这样可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。在一种可能的实施方式中,如图3和图4所示,所述合并模块330用于根据以下步骤合并成至少一个第一存储文件:将所述至少一个图片文件中每个图片文件依次写入所述分布式存储系统的缓存内存;当检测到所述缓存内存的存储量等于预设存储值时,将所述缓存内存中的图片文件写入第二存储文件,并在写入后清空所述缓存内存中的图片文件;所述预设存储值小于所述缓存内存所能存储的最大存储量;当检测到存储有图片文件的所述第二存储文件的数量等于预设数量时,将所述预设数量的所述第二存储文件,压缩合并为一个所述第一存储文件。在上述实施例中,所述预设数量是根据所述第二存储文件的最大存储量、所述第一存储文件的最大存储量以及压缩率确定的。在一种可能的实施方式中,如图4所示,所述图片存储装置300还包括:创建模块350,用于创建分布式存储系统表;生成模块360,用于针对所述至少一个图片文件中每个图片文件,根据每个图片文件的图片描述信息,生成与每个图片文件对应的索引信息;第二写入模块370,用于将每个图片文件的所述索引信息与所述图片描述信息一一对应写入所述分布式存储系统表。在一种可能的实施方式中,所述发送模块320,还用于:当接收到在线传输的图片文件时,直接将该图片文件发送给所述分布式存储系统。基于同一申请构思,本申请实施例中还提供了与上述实施例提供的图片查询方法对应的图片查询装置,由于本申请实施例中的装置解决问题的原理与本申请上述实施例的图片查询方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。图5为本申请实施例提供的一种图片查询装置500的结构示意图,如图5所示,所述图片查询装置500包括:生成模块510,用于根据待查询图片文件的图片描述信息,生成与所述待查询图片文件对应的索引信息;检索模块520,用于根据所述待查询图片文件对应的索引信息,从所述分布式存储系统的分布式存储系统表中,检索出所述待查询图片文件在所述分布式文件系统中的路径信息;获取模块530,用于根据所述路径信息,从所述分布式文件系统中获取所述待查询图片文件。本申请实施例中,将大量图片文件经过处理后得到多个第一存储文件存储在分布式文件系统中,充分利用了分布式文件系统中存储单元的存储空间,提高了存储单元的利用率,并且将图片的元数据信息存储在分布式存储系统的表中,即不通过分布式文件系统的管理节点来管理图片,而是通过分布式存储系统表来管理图片,这样,可以直接通过待查询图片的索引信息就可以在分布式系统表中查询到图片在分布式文件系统中的存储位置,进而获取该图片文件,不但可以节省分布式文件系统中管理节点的存储空间,还可以减小管理节点压力,使得分布式文件系统的存储资源充分利用。在上述实施例中,所述图片描述信息包括以下信息中的至少一种:图片名称、图片大小、图片类型、图片创建时间。基于同一申请构思,参见图6所示,为本申请实施例提供的一种电子设备600的结构示意图,包括:处理器610、存储器620和总线630,所述存储器620存储有所述处理器610可执行的机器可读指令,当电子设备600运行时,所述处理器610与所述存储器620之间通过所述总线630进行通信,所述机器可读指令被所述处理器610运行时执行如上述实施例中任一所述的图片存储方法和/或图片查询方法的步骤。具体地,所述机器可读指令被所述处理器610执行时可以执行如下处理:从分布式文件系统中读取至少一个图片文件;将读取到的所述至少一个图片文件中的每个图片文件依次发送给分布式存储系统;通过所述分布式存储系统,将所述至少一个图片文件合并成至少一个第一存储文件;将所述至少一个第一存储文件写入所述分布式文件系统,并删除所述分布式文件系统中的所述至少一个图片文件。在本申请实施例中,通过从分布式文件系统中读取至少一个图片文件,将读取到的至少一个图片文件中的每个图片文件依次发送给分布式存储系统,通过分布式存储系统,将至少一个图片文件合并成至少一个第一存储文件,将至少一个第一存储文件写入分布式文件系统,并删除分布式文件系统中的至少一个图片文件。本申请实施例中,通过分布式存储系统将从分布式文件系统中读取的大量图片文件进行合并得到多个第一存储文件,并将多个存储文件重新写入分布式文件系统中的各个存储单元中,可以提高分布式文件系统的存储单元空间的利用率,减少分布式文件系统的存储单元的占用率。具体地,所述机器可读指令被所述处理器610执行时还可以执行如下处理:根据待查询图片文件的图片描述信息,生成与所述待查询图片文件对应的索引信息;根据所述待查询图片文件对应的索引信息,从所述分布式存储系统的分布式存储系统表中,检索出所述待查询图片文件在所述分布式文件系统中的路径信息;根据所述路径信息,从所述分布式文件系统中获取所述待查询图片文件。在本申请实施例中,将大量图片文件经过处理后得到多个第一存储文件存储在分布式文件系统中,充分利用了分布式文件系统中存储单元的存储空间,提高了存储单元的利用率,并且将图片的元数据信息存储在分布式存储系统的表中,即不通过分布式文件系统的管理节点来管理图片,而是通过分布式存储系统表来管理图片,这样,可以直接通过待查询图片的索引信息就可以在分布式系统表中查询到图片在分布式文件系统中的存储位置,进而获取该图片文件,不但可以节省分布式文件系统中管理节点的存储空间,还可以减小管理节点压力,使得分布式文件系统的存储资源充分利用。基于同一申请构思,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述实施例中任一所述的图片存储方法和/或图片查询方法的步骤,具体可参见上述方法实施例,在此不再赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应所述理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者所述技术方案的部分可以以软件产品的形式体现出来,所述计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1