图片存储方法、查询方法、装置及存取系统
技术领域
本发明涉及数据存储技术领域,尤其涉及一种图片存储方法、查询方法、装置及存取系统。
背景技术
随着视频监控、互联网应用以及存储技术的普及,图片存储系统的数据量越来越大,已经增长到PB(=250字节)级数据量。在视频监控领域的图片存储系统中,通常保存的是各种摄像头、视频处理设备上传的图片,图片大小从几十KB(=210字节)到几MB(=220字节)不等,每秒能写入几万张的图片。这些图片能供第三方系统需要时根据图片产生源ID和生成时间的范围进行查询。
目前的存储技术有三种类型:块存储、文件存储以及对象存储,其中的对象存储技术相比于其它两种存储技术具有数据容量大、存取速度快、简化应用对数据的访问,从而成为主流的存储技术获得广泛的应用。
在使用对象存储技术的图片存储系统中,元数据服务器和存储介质都是多台设备的集群,以存储来自视频监控装置的海量图片。为了提高读写速度,通常会把一个图片文件散列到多个磁盘I/O(Input/Output,输入/输出)或者RAID(Redundant Arrays ofIndependent Drives,磁盘阵列)组,甚至多台服务器上存储,这样能够使得并发后的磁盘访问带宽大大增加。但是,由于图片文件通常为几百KB到几MB的小文件,这种把小文件再次散列存储的效果非常有限,比如一个300KB的图片文件散列到4个RAID组,每个RAID组一次IO的有效数据只有不到100KB,而一个RAID组条带大小通常是256KB或512KB,磁盘带宽利用率只有不到50%。
发明内容
本发明提供一种图片存储方法、查询方法、装置及存取系统,用以克服上述现有技术中存在的技术问题,以提高图片存取过程中磁盘带宽的利用率。
本发明提供的一种图片存储方法,包括:(1)接收图片数据、所述图片数据的图片源ID和图片生成时间;(2)将所述图片源ID和所述图片生成时间进行哈希变换生成KEY值;(3)将所述图片数据、所述图片源ID和所述图片生成时间存入编号为所述KEY值的缓存队列;(4)判断定时器计时周期是否结束,如果是,则执行步骤(5),如果否,则执行步骤(1),所述计时周期和参与所述哈希变换的所述图片生成时间均为指定时间精度的时间;(5)将所述缓存队列以落盘文件的形式存入编号为所述KEY值的存储设备组中;(6)生成索引文件,所述索引文件用于记录所述计时周期的缓存起始时间和缓存结束时间、所述KEY值、所述图片源ID和所述图片生成时间及所述图片数据在所述落盘文件的存储位置以供查询。
进一步地,所述步骤(2)中进行哈希变换生成KEY值具体为:KEY值=(图片源ID%m+第一时间%m)%m,所述m为所述存储设备组的个数,所述第一时间为所述图片生成时间按所述指定时间精度换算后的时间。
可选地,所述索引文件包括索引头部、索引偏移表和索引数据表;所述索引头部包括所述落盘文件的文件名、所述缓存起始时间、所述缓存结束时间和所述KEY值;所述索引偏移表包括所述图片源ID和对应所述图片源ID的索引数据在所述索引文件中的第一偏移;所述索引数据表包括至少一个索引数据块,所述索引数据块包括所述图片源ID、对应所述图片源ID的所述图片数据的个数和所述索引数据,所述索引数据包括对应所述图片源ID的每个所述图片数据的所述图片生成时间及所述图片数据在所述落盘文件中第二偏移。
可选地,队列头部和队列数据表;所述队列头部包括所述图片数据的所述图片源ID和所述图片生成时间以及所述图片数据在所述落盘文件中的第二偏移;所述队列数据表包括所述图片数据。
进一步地,所述步骤(3)具体为:将所述图片数据按照同一个所述图片源ID集中放置,并依所述图片生成时间顺序存入编号为所述KEY值的缓存队列。
进一步地,该图片存储方法还包括将所述索引文件存储于固态硬盘中。
本发明提供的一种图片查询方法,包括:获取图片查询请求,所述图片查询请求中包括查询源ID和查询时间范围;查找索引文件,所述索引文件用于记录缓存起始时间、缓存结束时间、KEY值、图片源ID、图片生成时间及图片数据在落盘文件的存储位置以供查询,将缓存起始时间和/或缓存结束时间在所述查询时间范围内的索引文件指定为第一文件,所述落盘文件由存入编号为所述KEY值的存储设备组的缓存队列形成,所述缓存队列包含从所述缓存起始时间至所述缓存结束时间的多个所述图片数据;所述查询时间范围、所述缓存起始时间及所述缓存结束时间的时间精度相同;查找所述第一文件,将所述图片源ID等于所述查询源ID的所述第一文件指定为第二文件;从所述第二文件中获取在所述查询时间范围内所述图片源ID等于所述查询源ID的图片数据在落盘文件中的存储位置;根据所述存储位置,所述第二文件中的KEY值和所述落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
可选地,所述索引文件包括索引头部、索引偏移表和索引数据表;所述索引头部包括所述落盘文件的文件名、所述缓存起始时间、所述缓存结束时间和所述KEY值;所述索引偏移表包括所述图片源ID和对应所述图片源ID的索引数据在所述索引文件中的第一偏移;所述索引数据表包括至少一个索引数据块,所述索引数据块包括所述图片源ID、对应所述图片源ID的所述图片数据的个数和所述索引数据,所述索引数据包括对应所述图片源ID的每个所述图片数据的所述图片生成时间及所述图片数据在所述落盘文件中第二偏移。
可选地,所述落盘文件包括:队列头部和队列数据表;所述队列头部包括所述图片数据的所述图片源ID和所述图片生成时间以及所述图片数据在所述落盘文件中的第二偏移;所述队列数据表包括所述图片数据。
进一步地,在所述获取图片查询请求前,该图片查询方法还包括:将所述索引文件加载至内存并长期驻留。
本发明提供的一种图片存储装置,包括:接收模块,用于接收图片数据、所述图片数据的图片源ID和图片生成时间;哈希变换模块,用于将所述图片源ID和所述图片生成时间进行哈希变换生成KEY值;缓存模块,用于将所述图片数据、所述图片源ID和所述图片生成时间存入编号为所述KEY值的缓存队列;判断模块,用于判断定时器计时周期是否结束,如果是,则写入模块启动,如果否,则所述接收模块启动,所述计时周期和参与所述哈希变换的所述图片生成时间均为指定时间精度的时间;写入模块,用于将所述缓存队列以落盘文件的形式存入编号为所述KEY值的存储设备组中;
索引生成模块,用于生成索引文件,所述索引文件用于记录所述计时周期的缓存起始时间和缓存结束时间、所述KEY值、所述图片源ID和所述图片生成时间及所述图片数据在所述落盘文件的存储位置以供查询。
进一步地,所述缓存模块具体用于将所述图片数据按照同一个所述图片源ID集中放置,并依所述图片生成时间顺序存入编号为所述KEY值的缓存队列。
进一步地,该图片存储装置还包括固态硬盘,用于存储所述索引文件。
本发明提供的一种图片查询装置,包括:获取模块,用于获取图片查询请求,所述图片查询请求中包括查询源ID和查询时间范围;第一查找模块,用于查找索引文件,所述索引文件用于记录缓存起始时间、缓存结束时间、KEY值、图片源ID、图片生成时间及图片数据在落盘文件的存储位置以供查询,将缓存起始时间和/或缓存结束时间在所述查询时间范围内的索引文件指定为第一文件,所述落盘文件由存入编号为所述KEY值的存储设备组的缓存队列形成,所述缓存队列包含从所述缓存起始时间至所述缓存结束时间的多个所述图片数据;所述查询时间范围、所述缓存起始时间及所述缓存结束时间的时间精度相同;第二查找模块,用于查找所述第一文件,将所述图片源ID等于所述查询源ID的所述第一文件指定为第二文件;寻址模块,从所述第二文件中获取在所述查询时间范围内所述图片源ID等于所述查询源ID的图片数据在落盘文件中的存储位置;读数据模块,用于根据所述存储位置,所述第二文件中的KEY值和所述落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
进一步地,该图片查询装置还包括加载模块,用于在所述获取模块获取图片查询请求前,将所述索引文件加载至内存并长期驻留。
本发明提供了一种图片存取系统,包括:多个存储设备组,用于存储图片数据;定时器,用于根据计时周期进行计时操作;图片存储装置,用于在所述计时周期内接收多个所述图片数据,并将每个所述图片数据根据哈希变换结果散列到对应一个所述存储设备组的缓存队列中,以在所述定时器计时周期结束时将所述缓存队列存入所述对应的存储设备组中;图片查询装置,用于根据图片查询请求中的查询源ID和查询时间范围,查找图片源ID等于所述查询源ID且缓存起始时间和/或缓存结束时间在所述查询时间范围内的索引文件,并获取图片源ID等于所述查询源ID且图片生成时间在所述查询时间范围内的图片数据的落盘文件存储位置,以根据存储位置从所述索引文件对应的存储设备组中读取图片数据。
本发明图片存储方法中采用了哈希变换的方法,根据图片的空间信息(图片源ID)、图片的时间信息(图片生成时间)生成KEY值,该图片的图片数据整体存入对应该KEY值的缓存队列;在定时器计时周期内获取的其它图片的图片数据也会根据该方法生成相同或不同的KEY值,每一个图片数据整体存入KEY值相对应的缓存队列,使得每一个缓存队列中包含不同图片源ID和不同图片生成时间的多个图片数据,随后该缓存队列以落盘文件的形式写入编号为KEY值的存储设备组中,并生成便于查询图片的索引文件。
由于通过哈希变换散列图片数据时,不是将一个图片数据散列成多个更小的文件,而是将多个图片数据中每一个图片数据作为一个整体按照空间和时间的信息散列至不同的缓存队列,在同一个缓存队列中,不同时间和空间的多个图片数据组合成一个大文件,再存入相应的存储设备组中时就会充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
另外,在图片查询方法中,先根据查询请求中的查询时间范围在索引文件中进行查找,索引文件为缓存队列存入存储设备组后生成,包括缓存起始时间,从该时间开始,缓存队列缓存第一个图片数据,索引文件还包括缓存结束时间,索引文件的缓存起始时间和缓存结束时间中至少一个只要在查询时间范围内,则这个索引文件中就可能包含待查询的图片数据,将符合要求的索引文件指定为第一文件;接着将第一文件中图片源ID等于查询源ID的文件确定为第二文件,随后从第二文件中获取在查询时间范围内、图片源ID等于查询源ID的图片数据在落盘文件的存储位置,最后根据存储位置,第二文件中的KEY值和落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
由于落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,且该缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据,这里的图片数据是指一张图片所包含的所有数据,所以在从编号为KEY值的存储设备组读取图片时,不是读取一个图片数据被散列后的小文件,而是读取由多个完整的图片数据组成的大文件,因此能在读取图片过程中充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种图片存储方法的流程图;
图2为本发明实施例提供的一种图片存储方法的数据流示意图;
图3为本发明实施例提供的一种索引文件的结构示意图;
图4为本发明实施例提供的一种落盘文件的结构示意图;
图5为本发明实施例提供的一种图片查询方法的流程图;
图6为本发明实施例提供的一种图片查询方法的数据流示意图;
图7为本发明实施例提供的一种图片存储装置的方框图;
图8为本发明实施例提供的一种图片查询装置的方框图;
图9为本发明实施例提供的一种图片存取系统的方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的技术方案更加清楚,以下结合附图对本发明的实施例进行详细说明。
图1为本发明实施例提供的一种图片存储方法的流程图,图2为本发明实施例提供的一种图片存储方法的数据流示意图,如图1和图2所示,本实施例中的图片存储方法,包括如下步骤。
101、接收图片数据、该图片数据的图片源ID和图片生成时间。
具体地,该图片存储方法的执行主体是图片存储装置,具体可以是互联网中一个负责管理图片存取的服务器。视频监控装置会将实时采集的监控图片数据源源不断地发给图片存储装置,图片数据包含了一张图片的信息,具体的数据格式与视频监控装置有关,可以是jpg、gif等。与图片数据同时发送给图片存储装置的还有该图片数据的图片源ID和图片生成时间,图片源ID就是采集该图片数据的视频监控装置(即摄像头)的编号。通常在一个应用场景中,比如超市、仓储库房或城市道路等的视频监控系统中,会有多个视频监控装置,且每一个视频监控装置具有唯一的编号,也就是说图片源ID能将每一台视频监控装置区别开。图片生成时间是视频监控装置在采集一个图片数据时记录的采集时间。
102、将图片源ID和图片生成时间进行哈希变换生成KEY值。
具体地,哈希(Hash)变换是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,此处的KEY值就是散列值,通过哈希变换可以把具有不同图片源ID和/或图片生成时间的多个图片数据映射到一个相同的KEY值,或者映射到不同的KEY值,以达到把来自不同摄像头的不同时间的多个图片数据散列开,分成多个图片数据组,每组里有多个图片数据,一个组内的图片数据映射到一个相同的KEY值。
103、将图片数据、图片源ID和图片生成时间存入编号为KEY值的缓存队列。
具体地,哈希变换得到的KEY值作为存储设备组的组编号,图片数据在存入存储设备组之前,先整体存入编号为KEY值的缓存队列,该缓存队列与相同编号的存储设备组对应,缓存队列的内容最终会存入对应的存储设备组。
目前,用于保存海量图片的存储器通常都是多台设备的集群,如由多个存储设备组构成的存储器,每个存储设备组中又可包含多个磁盘。本实施例的存储设备组优选RAID(Redundant Arrays of Independent Drives,独立磁盘构成的具有冗余能力的阵列)组,它通过在多个磁盘上同时存储和读取数据来大幅提高存储器的数据吞吐量。
104、判断定时器计时周期是否结束,如果是,则执行步骤105,如果否,则执行步骤101,计时周期和参与哈希变换的所述图片生成时间均为指定时间精度的时间。
具体地,图片存储装置中设置有定时器,计时周期可根据实际需要设置,定时器启动时间作为缓存起始时间也可以根据需要设置,定时器的一个计时周期时间到时,定时器计时结束,这个时间作为缓存结束时间。
此处需要说明的是:计时周期和参与哈希变换的图片生成时间均需要具有指定时间精度,哈希变换的时间精度是在散列图片数据时用来控制缓存队列的偏移周期,计时周期的时间精度与哈希变换的时间精度保持一致,目的是保证图片数据的存储位置能够按照时间的推移在存储设备组中不断偏移,均匀散列。
指定时间精度的选择依据为:评估当前所有摄像头产生图片数据的平均速率(图片张数*图片大小*摄像头数量/秒,假设为30MB/秒,其中摄像头数量不需要太精确),设定即将写入一个存储设备组中单个文件大小(假设为100GB),则哈希变换的时间精度为100GB/30MB约为1小时。选择的原则是为了保证在此时间精度内生成的单个文件的大小合适且相对固定。
单个文件,即落盘文件大小的选择:落盘文件过大会导致缓存写满落盘的周期变长,占用系统内存过大。落盘文件过小,会导致系统内文件数量太多,在当前的文件系统下,系统每打开一个文件通常就要耗费三次磁盘操作,在图片读取的时候一定时间范围内需要打开多个文件,造成磁盘IO的浪费。选择依据是当前总的磁盘容量和内存大小。根据测试经验,一般单个文件大小能够保证所有存储设备组组成的存储系统中保存5000-6000个文件最好。
在定时器计时周期没有结束时,执行步骤101,也就是说,图片存储装置继续接收下一个图片数据,并按照步骤102和步骤103的方法把这个图片数据按照生成的KEY值存入对应的缓存队列。通过使用定时器,可以使在一个计时周期内接收的多个图片数据依据不同的KEY值散列到各个存储设备组对应的缓存队列里,每一个缓存队列里可以有多个不同图片源ID的图片数据,相同图片源ID、但图片生成时间不同的图片数据也可以有多个,图片数据的多少与计时周期的长短有关。
在定时器计时周期结束时,执行步骤105。
105、将缓存队列以落盘文件的形式存入编号为KEY值的存储设备组中。
具体地,在定时器计时结束时,这个计时周期里获取的所有图片数据都被散列并存入各个缓存队列,通过将缓存队列以文件的形式存入与缓存队列对应的编号为KEY值的存储设备组,这个文件称为落盘文件,使得缓存队列被清空,可以用于接收下一个计时周期内散列的图片数据。
106、生成索引文件,索引文件用于记录计时周期的缓存起始时间和缓存结束时间、KEY值、图片源ID和图片生成时间及图片数据在落盘文件的存储位置以供查询。
具体地,图片存储装置将落盘文件存入存储设备组后,生成索引文件,其中记录有图片源ID、计时周期中缓存起始时间和缓存结束时间,便于根据查询源ID、查询时间范围定位索引文件,其中还保存有KEY值及图片数据在落盘文件存储位置,因此,便于根据图片源ID及图片生成时间最终确定图片数据在落盘文件的存储位置,从而能够从该存储位置读取所需的图片数据。
本发明实施例提供的图片存储方法中,采用了哈希变换的方法,根据图片的空间信息(图片源ID)、时间信息(图片生成时间)生成了KEY值,该图片的图片数据整体存入对应该KEY值的缓存队列;在定时器计时周期内接收的其它图片的图片数据也会根据该方法生成相同或不同的KEY值,每一个图片数据整体存入KEY值相对应的缓存队列,使得每一个缓存队列中包含不同图片源ID和不同图片生成时间的多个图片数据,随后该缓存队列以落盘文件的形式写入编号为KEY值的存储设备组中,并生成便于查询图片的索引文件。
由于通过哈希变换散列图片数据时,不是将一个图片数据散列成多个更小的文件,而是将多个图片数据中每一个图片数据作为一个整体按照空间和时间散列至不同的缓存队列,在同一个缓存队列中,不同时间和空间的多个图片数据组合成一个大文件,再存入相应的存储设备组中时就会充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
上述实施例提供的图片存储方法的步骤102中,进行哈希变换生成KEY值具体为:KEY值=(图片源ID%m+第一时间%m)%m,其中,m为存储设备组的个数,第一时间为图片生成时间按指定时间精度换算后的时间。
如上所述,哈希变换的时间精度与计时周期的时间精度保持一致,目的是保证图片数据的存储位置能够按照时间的推移在存储设备组中不断偏移,均匀散列。
需要说明的是:图片生成时间只有在哈希变换公式计算时需要换算时间精度,在存入缓存队列以及存储设备组中时,仍以其原始时间精度,以保证存储图片数据的准确和完整。
图片生成时间按指定时间精度换算后成为第一时间,将第一时间、图片源ID和存储设备组的个数m代入哈希变换公式计算后可得到一个KEY值。
根据上述的哈希变换的方法用在视频监控领域图片存储与查询具有较好的散列效果,根据不同的数据特征和应用场景,还可以采用本领域技术人员所知的其它哈希变换方法。
图3为本发明实施例提供的一种索引文件的结构示意图,如图3所示,索引文件具体可包括索引头部、索引偏移表和索引数据表。其中,索引头部包括落盘文件的文件名、缓存起始时间、缓存结束时间和KEY值。落盘文件是缓存队列存入存储设备组时形成的,由图片存储装置为落盘文件命名,根据落盘文件形成的索引文件的文件名可以与该落盘文件的文件名相同,以在查询过程中根据索引文件名可直接找到对应的同名落盘文件,不需要额外建立索引文件名与落盘文件名对应关系的索引表,不仅可以节省内存资源,还可以简化查询过程。
如图3所示,索引文件的文件名为1,以下为了描述方便,采用s1代表文件名为1的索引文件,索引头部从左至右依次包括1(落盘文件的文件名)、T1(缓存起始时间)、T5(缓存结束时间)、K1(KEY值)。索引头部各组成部分的顺序不限于图3所示。以下为了描述方便,采用f1代表文件名为1的落盘文件。
索引偏移表包括图片源ID和对应图片源ID的索引数据在该索引文件中的第一偏移。
索引数据包含了图片数据在落盘文件中的存储位置,由上述实施例可知,通过哈希变换,同一个图片源ID的多个不同图片生成时间的图片数据可能存入同一个落盘文件中,这些图片数据在落盘文件中的存储位置会保存在索引文件的索引数据中,以便于查找所需的图片数据。索引数据在索引文件中的存储位置以第一偏移的形式存储在索引偏移表中,“偏移”具体是指索引数据第一个字节相对于索引文件第一个字节偏移的字节数,“第一”与后面实施例所述的“第二”没有前后顺序关系,仅为了区分两种不同的偏移。
如图3所示,该索引偏移表从左至右依次为:ID1(图片源ID为1)、sf1(ID1的第一偏移)、ID2(图片源ID为2)、sf2(ID2的第一偏移)、……(其它图片源ID及其第一偏移)。
索引数据表包括至少一个索引数据块,该索引数据块包括图片源ID、对应图片源ID的图片数据的个数和索引数据,索引数据则包括对应图片源ID的每个图片数据的图片生成时间及图片数据在落盘文件中第二偏移。
如图3所示,该索引数据表从左至右依次为:ID1(图片源ID为1)、n1(图片数据个数)、T1(ID1第一个图片数据的图片生成时间)、off1(ID1第一个图片数据的第二偏移)、T3(ID1第二个图片数据的图片生成时间)、off3(ID1第二个图片数据的第二偏移)、T5(ID1第三个图片数据的图片生成时间)、off5(ID1第三个图片数据的第二偏移)、ID2(图片源ID为2)、n2(图片数据个数)、T3(ID2第一个图片数据的图片生成时间)、off3(ID2第一个图片数据的第二偏移)、……(其它图片源ID的索引数据块),图3的索引数据表中,一个虚线框围起来的部分是一个索引数据块,图3中粗虚线箭头起始位置是ID1的第一偏移,终止位置是该偏移对应的索引数据块的第一个字节。
图4为本发明实施例提供的一种落盘文件的结构示意图,如图4所示,落盘文件可包括队列头部和队列数据表,f1代表文件名为1的落盘文件,队列头部包括图片数据的图片源ID和图片生成时间以及图片数据在落盘文件中的第二偏移,这个“第二偏移”与索引文件中索引数据表的“第二偏移”是一样的。
具体地,如图4所示,队列头部从左至右依次为:ID1(图片源ID为1)、T1(ID1第一个图片数据的图片生成时间)、off1(ID1第一个图片数据的第二偏移)、ID1(图片源ID为1)、T3(ID1第二个图片数据的图片生成时间)、off3(ID1第二个图片数据的第二偏移)、ID1(图片源ID为1)、T5(ID1第三个图片数据的图片生成时间)、off5(ID1第三个图片数据的第二偏移)、ID2(图片源ID为2)、T3(ID2第一个图片数据的图片生成时间)、off3(ID2第一个图片数据的落盘文件偏移)、……(其它图片源ID的图片生成时间及第二偏移)。
队列数据表包括图片数据,每个图片数据按照队列头部里的第二偏移指定的位置存储。
如图4所示,队列数据表从左至右为:D1(ID1的第一个图片数据)、D2(ID1的第二个图片数据)、D3(ID1的第三个图片数据)、D4(ID2的第一个图片数据)、……(其它图片数据)。图4中,粗虚线箭头起始位置是ID2第一个图片数据的第二偏移,终止位置是该偏移对应的图片数据的第一个字节。
上述实施例中,步骤103具体可以为:将图片数据按照同一个图片源ID集中放置,并依图片生成时间顺序存入编号为KEY值的缓存队列。
也就是说,在将计算完存储设备组编号的图片数据存入对应该编号的缓存队列时,可以将该图片数据与缓存队列中已有的图片数据进行排序,排序规则为:相同图片源ID的图片数据集中放置,并且放在缓存队列中已有的图片数据后面,从而实现按图片生成时间的顺序依序存入。当这个缓存队列以落盘文件的形式写入存储设备组时,如图4所示,其中包含的图片数据有来自ID1的图片生成时间分别为T1、T3和T5的三个图片数据,图片生成时间为T1的图片数据是ID1的第一个图片数据D1,图片生成时间为T3的图片数据是ID1的第二个图片数据D2,图片生成时间为T5的图片数据是ID1的第三个图片数据D2,以及来自ID2的图片生成时间为T3的一个图片数据(ID2的第一个图片数据D4),它们已经按照相同图片源ID的图片数据集中以时序放置的排序规则排好顺序,来自ID1的T5之后收到的图片数据,会插入到D3与D4之间。
由于缓存队列在随后的步骤中会以落盘文件的形式存入存储设备组,落盘文件中来自各个视频采集装置的图片数据不仅会按图片源ID集中存储,而且来自同一个视频采集装置的图片数据还会按图片生成时间的先后顺序存储,这样在读取图片数据的时候,某一个图片源ID中一定时间范围内的图片数据因为是顺序存储的,就可以顺序读取,大大提升了读取图片的速度,最大限度的避免磁盘的随机读取,在提高读取速度的同时提高磁盘寿命。
另外,上述实施例提供的图片存储方法中,还可以包括将索引文件存储于固态硬盘中,因为索引文件是从存储设备组中读取图片数据的关键文件,访问索引文件的速度对于快速读取图片数据至关重要,又由于固态硬盘相比于普通硬盘读写速度快得多,因此可以保证快速访问索引文件,避免了对读取图片数据速度的不良影响。
图5为本发明实施例提供的一种图片查询方法的流程图,图6为本发明实施例提供的一种图片查询方法的数据流示意图,如图5和图6所示,该方法包括如下步骤。
501、获取图片查询请求,该图片查询请求中包括查询源ID和查询时间范围。
具体地,该图片查询方法的执行主体是图片查询装置,具体可以是互联网中一个负责管理图片存取的服务器。通过上述实施例提供的图片存储方法,多个视频监控装置(即摄像头)采集的图片数据存入了存储设备组中,每一个图片数据都对应有图片源ID和图片生成时间,图片源ID是采集该图片数据的视频监控装置的编号,图片生成时间是视频监控装置在采集该图片数据时记录的采集时间。当需要对已经存入存储设备组的图片数据进行读取时,查询者,如客户端,就会向图片查询装置发送查询请求,查询请求中包括查询ID,这个参数表示查询者想要查询的图片数据是来自哪个视频监控装置,查询请求中还包括查询时间范围,这个参数表示查询者想要查询的图片数据的图片生成时间是在这个查询时间范围内的。
502、查找索引文件,将缓存起始时间和/或缓存结束时间在查询时间范围内的索引文件指定为第一文件,其中,查询时间范围、缓存起始时间及缓存结束时间的时间精度相同。
所述索引文件用于记录缓存起始时间、缓存结束时间、KEY值、图片源ID和图片生成时间及图片数据在落盘文件的存储位置以供查询,其中,落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,该缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据。
具体地,根据上述图片存储方法的描述,图片存储装置将缓存队列以落盘文件的形式存入存储设备组后,生成索引文件,其中保存有图片源ID、缓存起始时间和缓存结束时间,便于根据查询源ID、查询时间范围定位索引文件,其中还保存有KEY值、图片生成时间与图片数据在落盘文件存储位置,因此,便于根据图片源ID、KEY值以及图片生成时间最终确定图片数据在落盘文件的存储位置,从而能够从该存储位置查询到并读取所需的图片数据。
首先查询索引文件中的缓存起始时间和缓存结束时间,缓存起始时间、缓存结束时间两者任何一个,或者两者都落在查询时间范围内的索引文件指定为第一文件(第一文件可能会有多个),说明这个索引文件中包含的图片数据的图片生成时间属于查询时间范围内,但第一文件中是否包含图片源ID等于查询源ID的图片数据,还需要进一步筛选。
这里的落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,该缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据,其中,图片数据是指一张图片所包含的所有数据,所以在从编号为KEY值的存储设备组读取图片时,不是读取一个图片数据被散列后的小文件,而是读取由多个完整的图片数据组成的大文件。
根据上述实施例的描述,图片存储装置中设置有定时器,从缓存起始时间到缓存结束时间是一个计时周期,这两个时间的时间精度可以根据需要选择,可以是小时,也可以是分钟。查询时间范围需要和缓存起始时间、缓存结束时间的时间精度保持一致,以保证准确的查询操作。
503、查找第一文件,将图片源ID等于查询源ID的第一文件指定为第二文件。
具体地,第一文件中保存有与查询源ID相同的图片源ID时,说明该第一文件就是查询者需要查询的图片数据对应的索引文件,把这些满足图片源ID等于查询源ID的第一文件指定为第二文件。
504、从第二文件中获取在查询时间范围内图片源ID等于查询源ID的图片数据在落盘文件中的存储位置。
具体地,索引文件里保存有图片数据的图片源ID、图片生成时间以及图片数据在落盘文件的存储位置,因此,先找到等于查询源ID的图片源ID,再将图片生成时间落在查询时间范围内的图片数据作为待读取数据,从第二文件中获取它在落盘文件的存储位置。
实际实现时,如果缓存队列中的图片数据以相同图片源ID集中按时序放置的规则存储,则图片数据在落盘文件中存储位置也是按这样的规则顺序排列的。这样可以具体依照以下的方法在第二文件中查询待读取数据在落盘文件的存储位置,而不需要每个图片都比较时间,可以提高查询效率。
如果查询时间范围的查询起始时间处于缓存起始时间和缓存结束时间之间,查询时间范围的查询结束时间晚于缓存结束时间,则只需要正序查找,找到第二文件中图片源ID等于查询源ID且图片生成时间最接近查询起始时间的第一个满足条件的图片数据,获取这个图片源ID下之后的所有图片数据的存储位置,可以将这些图片数据从落盘文件中全部读取。
如果查询起始时间早于缓存起始时间,查询结束时间处于缓存起始时间和缓存结束时间之间,则可以逆序查找,找到第二文件中图片源ID等于查询源ID且图片生成时间最接近查询结束时间的最后一个满足条件的图片数据,获取这个图片源ID下之前的所有图片数据的存储位置,可以将这些图片数据从落盘文件中全部读取。
如果查询起始时间早于缓存起始时间,查询结束时间晚于缓存结束时间,则可以找到第二文件中图片源ID等于查询源ID的所有图片数据,获取这些图片数据的存储位置,然后从落盘文件内这些位置把图片数据全部读取。
如果查询起始时间和查询结束时间均处于缓存起始时间缓存结束时间之间,则先正序查找,找到第二文件中图片源ID等于查询源ID且图片生成时间最接近查询起始时间的第一个满足条件的图片数据,再逆序查找,找到第二文件中图片源ID等于查询源ID且图片生成时间最接近查询结束时间的最好一个满足条件的图片数据,获取包含两个图片数据及其之间的所有图片数据的存储位置,然后从落盘文件内这些位置把图片数据全部读取。
举个简单的例子来说,查询源ID为1,查询时间范围为T1~T6。查询索引文件,找到的第一文件包括:索引文件s1(缓存起始时间为T1,缓存结束时间为T5),索引文件s2(缓存起始时间为T2,缓存结束时间为T6),索引文件s3(缓存起始时间为T3,缓存结束时间为T7)。把s1、s2和s3作为第一文件。
随后,在三个第一文件中分别查找是否有图片源ID等于查询源ID,索引文件若采用图3所示的结构,则需要在索引偏移表中查询图片源ID,如果有等于查询源ID的图片源ID,说明这个第一文件是包含待读取图片数据的文件,把它指定为第二文件。本例中,s1和s2中均包含ID1,因此指定s1和s2为第二文件。
然后,在两个第二文件中,找到对应ID1的图片生成时间属于查询时间范围的图片数据在落盘文件中的存储位置。索引文件若采用图3所示的结构,则通过索引偏移表中对应ID1的第一偏移,可以先找到索引数据表中对应ID1的索引数据的第一个字节,在索引数据中根据图片生成时间查找到属于查询时间范围的图片数据,可以获取该图片数据在落盘文件中的第二偏移,即该图片数据在落盘文件中的存储位置。
本例中,s1里包含对应ID1的三个图片数据,图片生成时间分别为:T1、T3、T5,落盘文件位置分别为:pf1、pf3、pf5。
s2里包含对应ID1的三个图片数据,图片生成时间分别为:T2、T4、T6,落盘文件位置分别为:pf2、pf4、pf6。
505、根据存储位置、第二文件中的KEY值和落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
具体地,第二文件中还保存有KEY值和落盘文件的文件名,这个落盘文件就位于编号为KEY值的存储设备组中,图片查询装置先找到编号为KEY值的存储设备组,再在其中找到该文件名的落盘文件,最后再落盘文件中对应的存储位置找到图片数据,然后读取该图片数据到内存。
本例中,s1对应的存储设备组编号为1,用r1表示该存储设备组,其上的落盘文件的文件名为1,用f1表示该落盘文件,从pf1、pf3、pf5分别读取三个图片数据,如果三个图片数据顺序存储,则可以在查找到第一个图片数据后顺序读取剩余的两个图片数据。
s2对应的存储设备组编号为2,用r2表示该存储设备组,其上的落盘文件的文件名为2,用f2表示该落盘文件,从pf3、pf4、pf6分别读取三个图片数据,如果三个图片数据顺序存储,则可以在查找到最后一个图片数据后逆序读取剩余的两个图片数据。由于r1和r2为两个不同的存储设备组,它们上面的图片数据可以并发读取,以达到高速读取图片数据的目的。
本发明实施例提供的图片查询方法中,先根据查询请求中的查询时间范围在索引文件中进行查找,索引文件为缓存队列存入存储设备组后生成,包括缓存起始时间,从该时间开始,缓存队列缓存第一个图片数据,索引文件还包括缓存结束时间,索引文件的缓存起始时间和缓存结束时间中至少一个只要在查询时间范围内,则这个索引文件中就可能包含待查询的图片数据,将符合要求的索引文件指定为第一文件;接着将第一文件中图片源ID等于查询源ID的文件确定为第二文件,随后从第二文件中获取在查询时间范围内、图片源ID等于查询源ID的图片数据在落盘文件的存储位置,最后根据存储位置,第二文件中的KEY值和落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
由于落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,且该缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据,这里的图片数据是指一张图片所包含的所有数据,所以在从编号为KEY值的存储设备组读取图片时,不是读取一个图片数据被散列后的小文件,而是读取由多个完整的图片数据组成的大文件,因此能在读取图片过程中充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
上述实施例提供的图片查询方法中,索引文件可以如图3所示,包括索引头部、索引偏移表和索引数据表。其中,索引头部包括落盘文件的文件名、缓存起始时间、缓存结束时间和KEY值。索引偏移表包括图片源ID和对应图片源ID的索引数据在索引文件中的第一偏移。索引数据表包括至少一个索引数据块,该索引数据块包括图片源ID、对应图片源ID的图片数据的个数和索引数据,索引数据则包括对应图片源ID的每个图片数据的图片生成时间及图片数据在落盘文件中第二偏移。
该索引文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片查询方法中,落盘文件可以如图4所示,包括队列头部和队列数据表,队列头部包括图片数据的图片源ID和图片生成时间以及图片数据在落盘文件中的第二偏移;队列数据表包括图片数据。
该落盘文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片查询方法,在步骤501获取图片查询请求前,还可以包括:将索引文件加载至内存并长期驻留。在图片查询装置未接收到查询请求前,可以将存储在磁盘里的索引文件加载至内存并长期驻留,以便于图片查询装置更快地访问索引文件。如上述实施例所述,由图片存储装置生成的索引文件可以存储到固态硬盘里,进一步提高了索引文件的访问速度。
图7为本发明实施例提供的一种图片存储装置的方框图,如图7所示,该图片存储装置包括接收模块71,用于接收图片数据、该图片数据的图片源ID和图片生成时间;哈希变换模块72,用于将图片源ID和图片生成时间进行哈希变换生成KEY值;缓存模块73,用于将图片数据、图片源ID和图片生成时间存入编号为KEY值的缓存队列;判断模块74,用于判断定时器计时周期是否结束,如果是,则写入模块75启动,如果否,则接收模块71启动,其中,计时周期和参与哈希变换的图片生成时间均为指定时间精度的时间;写入模块75,用于将缓存队列以落盘文件的形式存入编号为KEY值的存储设备组中;索引生成模块76,用于生成索引文件,该索引文件用于记录计时周期的缓存起始时间、缓存结束时间、KEY值、图片源ID和图片生成时间及图片数据在落盘文件的存储位置以供查询。
需要说明的是:写入模块启动是指写入模块执行其功能:将缓存队列以落盘文件的形式存入编号为KEY值的存储设备组中;接收模块启动是指执行其功能:接收图片数据、该图片数据的图片源ID和图片生成时间。
各模块之间通过连接关系依照上述实施例描述的图片存储方法进行图片存储操作,每个模块所执行的方法具体参见图片存储方法的描述,在此不再赘述。
本发明实施例提供的图片存储装置中,采用了哈希变换模块,根据图片的空间位置(图片源ID)、图片的时间(图片生成时间)生成KEY值,由缓存模块将该图片的图片数据整体存入对应该KEY值的缓存队列;在定时器计时周期内由接收模块接收的其它图片的图片数据也会根据由哈希变换模块生成相同或不同的KEY值,缓存模块将每一个图片数据整体存入KEY值相对应的缓存队列,使得每一个缓存队列中包含不同图片源ID和不同图片生成时间的多个图片数据,随后写入模块将该缓存队列以落盘文件的形式写入编号为KEY值的存储设备组中,并由索引生成模块生成便于查询图片的索引文件,判断模块可以在定时器计时周期结束时使写入模块写入落盘文件并使索引生成模块生成索引文件。
由于通过哈希变换模块及缓存模块散列图片数据时,不是将一个图片数据散列成多个更小的文件,而是将多个图片数据中每一个图片数据作为一个整体按照空间和时间的信息散列至不同的缓存队列,在同一个缓存队列中,不同时间和空间的多个图片数据组合成一个大文件,再由写入模块存入相应的存储设备组中时就会充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
上述实施例中,哈希变换模块72中进行哈希变换生成KEY值具体为:KEY值=(图片源ID%m+第一时间%m)%m,所述m为存储设备组的个数,第一时间为图片生成时间按指定时间精度换算后的时间。
该变换方法具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片存储装置中,索引文件可以如图3所示,包括索引头部、索引偏移表和索引数据表。其中,索引头部包括落盘文件的文件名、缓存起始时间、缓存结束时间和KEY值。索引偏移表包括图片源ID和对应图片源ID的索引数据在索引文件中的第一偏移。索引数据表包括至少一个索引数据块,该索引数据块包括图片源ID、对应图片源ID的图片数据的个数和索引数据,索引数据则包括对应图片源ID的每个图片数据的图片生成时间及图片数据在落盘文件中第二偏移。
该索引文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片存储装置中,落盘文件可以如图4所示,包括队列头部和队列数据表,队列头部包括图片数据的图片源ID和图片生成时间以及图片数据在落盘文件中的第二偏移;队列数据表包括图片数据。
该落盘文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片存储装置中,缓存模块73具体用于将图片数据按照同一个图片源ID集中放置,并依图片生成时间顺序存入编号为KEY值的缓存队列,以便于读取图片数据的时候可以按顺序读取,提高读取速度。该缓存模块执行的方法在上述的图片存储方法中已做了详细说明在此不再赘述。
上述实施例中,图片存储装置还可以包括固态硬盘77,用于存储索引文件,因为索引文件是从存储设备组中查询图片数据的关键文件,访问索引文件的速度对于快速读取图片数据至关重要,又由于固态硬盘相比于普通硬盘读写速度快得多,因此可以保证快速访问索引文件,避免了对读取图片数据速度的不良影响。
图8为本发明实施例提供的一种图片查询装置的方框图,如图8所示,该装置包括:获取模块81,用于获取图片查询请求,该图片查询请求中包括查询源ID和查询时间范围;第一查找模块82,用于查找索引文件,该索引文件用于记录缓存起始时间、缓存结束时间、KEY值、图片源ID、图片生成时间及图片数据在落盘文件的存储位置以供查询,将缓存起始时间和/或缓存结束时间在查询时间范围内的索引文件指定为第一文件,其中,落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,且缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据;查询时间范围、缓存起始时间及缓存结束时间的时间精度相同。第二查找模块83,用于查找所述第一文件,将图片源ID等于查询源ID的第一文件指定为第二文件;寻址模块84,从第二文件中获取在查询时间范围内图片源ID等于查询源ID的图片数据在落盘文件中的存储位置;读数据模块85,用于根据存储位置,第二文件中的KEY值和落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
本发明实施例提供的图片查询装置中,第一查找模块先根据获取模块获取的查询请求中的查询时间范围在索引文件中进行查找,索引文件为缓存队列存入存储设备组后生成,包括缓存起始时间,从该时间开始,缓存队列缓存第一个图片数据,索引文件还包括缓存结束时间,索引文件的缓存起始时间和缓存结束时间中至少一个只要在查询时间范围内,则这个索引文件中就可能包含待查询的图片数据,第一查找模块将符合要求的索引文件指定为第一文件;接着由第二查找模块将第一文件中图片源ID等于查询源ID的文件确定为第二文件,随后寻址模块从第二文件中获取在查询时间范围内、图片源ID等于查询源ID的图片数据在落盘文件的存储位置,最后读数据模块根据存储位置,第二文件中的KEY值和落盘文件的文件名在对应的存储设备组相应的落盘文件中读取图片数据。
由于落盘文件由存入编号为KEY值的存储设备组的缓存队列形成,且该缓存队列包含从缓存起始时间至缓存结束时间的多个图片数据,这里的图片数据是指一张图片所包含的所有数据,所以在读数据模块从编号为KEY值的存储设备组读取图片时,不是读取一个图片数据被散列后的小文件,而是读取由一个图片完整的图片数据形成的大文件,或者是读取由多个图片的多个完整的图片数据组成的更大文件,因此能在读取图片过程中充分利用存储设备组的带宽,避免了带宽利用率不足的问题。
本发明实施例提供的图片查询装置中,索引文件可以如图3所示,包括索引头部、索引偏移表和索引数据表。其中,索引头部包括落盘文件的文件名、缓存起始时间、缓存结束时间和KEY值。索引偏移表包括图片源ID和对应图片源ID的索引数据在索引文件中的第一偏移。索引数据表包括至少一个索引数据块,该索引数据块包括图片源ID、对应图片源ID的图片数据的个数和索引数据,索引数据则包括对应图片源ID的每个图片数据的图片生成时间及图片数据在落盘文件中第二偏移。
该索引文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片查询装置中,落盘文件可以如图4所示,包括队列头部和队列数据表,队列头部包括图片数据的图片源ID和图片生成时间以及图片数据在落盘文件中的第二偏移;队列数据表包括图片数据。
该落盘文件各部分结构具体介绍已在图片存储方法实施例中进行了详细说明,在此不再赘述。
上述实施例提供的图片查询装置中,还可以包括加载模块86,用于在获取模块获取图片查询请求前,将索引文件加载至内存并长期驻留。在获取模块81未接收到查询请求前,加载模块86可以将存储在磁盘里的索引文件加载至内存并长期驻留,以便于第一查找模块和第二查找模块更快地访问索引文件。如上述实施例所述,由图片存储装置的索引生成模块76生成的索引文件可以存储到固态硬盘77里,进一步提高了索引文件的访问速度。
图9为本发明实施例提供的一种图片存取系统的方框图,如图9所示,该系统包括:多个存储设备组91,用于存储图片数据;定时器92,用于根据计时周期进行计时操作;图片存储装置93,用于在计时周期内接收多个图片数据,并将每个图片数据根据哈希变换结果散列到对应一个存储设备组的缓存队列中,以在定时器计时周期结束时将缓存队列存入对应的存储设备组中;图片查询装置94,用于根据图片查询请求中的查询源ID和查询时间范围,查找图片源ID等于查询源ID且缓存起始时间和/或缓存结束时间在查询时间范围内的索引文件,并获取图片源ID等于查询源ID且图片生成时间在查询时间范围内的图片数据的落盘文件存储位置,以根据存储位置从索引文件对应的存储设备组中读取图片数据。
其中的图片存储装置所执行的图片存储方法已在上述实施例中进行了详细描述,图片查询装置所执行的图片查询方法也已在上述实施例中进行了详细描述,在此均不再赘述。
本发明实施例提供的图片存取系统中,由于采用了上述实施例描述的图片存储装置和图片查询装置,每一个图片数据整体存入KEY值相对应的存储设备组,或者从该存储设备组中整体读出,也可以是多个图片数据组合后整体存入KEY值相对应的存储设备组,或者从该存储设备组中一次性读出多个图片数据,充分利用存储设备组的带宽,避免了带宽利用率不足的问题。而且在一个定时器计时周期内,多个图片数据分别散列在不同的缓存队列中,使得每个缓存队列中内存有多个图片数据,计时周期结束时缓存队列写入其对应的存储设备组,每个写入操作并发进行,具有较高的数据写入效率。另外,在一个较宽的查询时间范围内,需要读取的图片数据会散列在不同的存储设备组中,每个存储设备组的读取操作可以并发进行,从而具有较高的数据读取效率。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。