公安卡口海量车辆数据存储与检索方法及装置、电子设备与流程

文档序号:11251001阅读:915来源:国知局
公安卡口海量车辆数据存储与检索方法及装置、电子设备与流程

本发明涉及数据处理技术领域,具体而言,涉及一种公安卡口海量车辆数据存储与检索方法及装置、电子设备。



背景技术:

公安卡口中车辆数据具有如下的典型特点:

1、车辆数据中包含结构化数据与图像数据两个部分。

2、数据检索维度多,要求在3秒内响应查询结果。

3、数据写入时间段比较集中。数据写入的吞吐时间段主要集中在早、中、晚高峰时段。

4、车辆原始图像存储需要支持快速的随机读取操作。需要在查询得到结构化数据时,同时显示出图像数据。

5、不同类型数据的存储时长不同。一般地,结构化数据要求长期保持;而图像数据要求保存1-3个月,并希望能够支持自动回滚。

6、数据量大。

通常地,地级市每天的数据量大约为200-800万左右;二线城市每天的数据量大约为1000-1500万左右;一线城市每天的数据量通常在3000万以上。

目前在公安卡口车辆数据存储的建设中常用的技术主要是通过ftp/集中存储+关系数据库或者通过hadoop+hbase等nosql(notonlysql,非关系型数据库)方案来进行存储。虽然通过集中存储的方案车辆数据写入的能力能够满足,但无法满足对图像数据的随机读取的需要。而hadoop存储小文件本身是一个缺陷。

因此需要一种新的公安卡口海量车辆数据存储与检索方法及装置、电子设备。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。



技术实现要素:

本发明的目的在于提供一种公安卡口海量车辆数据存储与检索方法及装置、电子设备,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。

本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。

根据本公开的一个方面,提供一种公安卡口海量车辆数据存储与检索方法,包括:接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务;分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中;当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中;利用hbase和elasticsearch实现所述车辆数据的检索。

在本公开的一种示例性实施例中,接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务包括:采集终端采集的所述车辆数据通过kafka的接口进行数据写入时,利用kafka的partition的分区,将所述车辆数据分发到不同的kafka节点;使用kafka的consumerapi分批次从kafka中读取数据;解析读取到的kafka数据生成数据的key、索引信息、结构化数据和图像数据,并对所述车辆数据中的车牌进行重新编码。

在本公开的一种示例性实施例中,对所述车辆数据中的车牌进行重新编码包括:将所述车牌的前两位从0-65535中进行编码;将所述车牌的中间4位中的字母采用一字节的负数表示;将所述车牌最后一位中的字母与汉字采用一字节的负数表示。

在本公开的一种示例性实施例中,分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中包括:对当前批次中解析完成的所述索引信息、结构化数据和图像数据分别调用对应的elasticsearch、hbase和图像存储服务对应的rpc接口对数据进行写入;以及记录下当前最后一条处理成功的数据的偏移量。

在本公开的一种示例性实施例中,当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中包括:当所述图像存储服务接收到图像数据添加的rpc请求时,把所述图像数据写入到日志文件中;在日志文件写入成功后,把所述图像数据添加到双队列的主内存块中;当所述主内存块中存储的数据达到所述预设阈值且双队列的备用内存块已经完成flush动作时,对所述主内存块和所述备用内存块进行切换;当达到所述备用内存块的内存限制大小时,生成flush磁盘的线程用于读取所述备用内存块中的图像数据并生成hfile文件,把hfile文件写入到磁盘。

在本公开的一种示例性实施例中,所述方法还包括:把hfile文件写入到磁盘时,将所述磁盘中的目录分为两个层级,第一级为当前内存块的分区值,第二级为日期目录。

在本公开的一种示例性实施例中,利用所述hbase和elasticsearch实现所述车辆数据的检索包括:当接收到数据检索请求时,开启数据检索服务用于监听http/rpc请求;当接收到http/rpc请求后,所述数据检索服务对其进行解析生成索引检索条件,向所述索引服务发起检索请求并获得响应结果;根据所述响应结果对应的数据的key,向hbase和所述图像存储服务中读取key对应的结构化数据和图像数据;对所述结构化数据和所述图像数据进行合并并返回检索结果。

在本公开的一种示例性实施例中,所述方法还包括:定时根据配置的数据热度进行所述图像存储服务中存储的图像数据的迁移和/或清理操作。

根据本公开的一个方面,提供一种公安卡口海量车辆数据存储与检索装置,包括:数据接入与分发模块,用于接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务;数据存储模块,用于分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中;图像数据存取模块,用于当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中;数据检索模块,用于利用hbase和elasticsearch实现所述车辆数据的检索。

根据本公开的一个方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为执行上述的公安卡口海量车辆数据存储与检索方法。

在本发明的一些实施例所提供的技术方案中,一方面,通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中,当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中,可以实现图像数据的快速写入与图像数据的快速随机存取。另一方面,利用hbase和elasticsearch实现所述车辆数据的检索,能够实现结构化数据和图像数据的快速检索。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:

图1示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索方法的流程图;

图2示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索方法的整体结构图;

图3示意性示出了根据本发明实施例的数据接入和分发服务的工作流程图;

图4示意性示出了根据本发明实施例的图像存储服务的工作流程图;

图5示意性示出了根据本发明实施例的数据检索服务的工作流程图;

图6示意性示出了根据本发明实施例的图像数据回滚服务的工作流程图;

图7示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索装置的框图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

图1示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索方法的流程图。如图1所示,该公安卡口海量车辆数据存储与检索方法可以包括以下步骤。

在步骤s110中,接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务。

本发明实施例中的结构化数据即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的图像数据等。

本发明实施例中的结构化数据每条大约占2kb左右,而高清卡口原始车图像数据大约占300-500kb。

在示例性实施例中,接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务可以进一步包括:采集终端采集的所述车辆数据通过kafka的接口进行数据写入时,利用kafka的partition的分区,将所述车辆数据分发到不同的kafka节点;使用kafka的consumerapi分批次从kafka中读取数据;解析读取到的kafka数据生成数据的key、索引信息、结构化数据和图像数据,并对所述车辆数据中的车牌进行重新编码。

在示例性实施例中,对所述车辆数据中的车牌进行重新编码包括:将所述车牌的前两位从0-65535中进行编码;将所述车牌的中间4位中的字母采用一字节的负数表示;将所述车牌最后一位中的字母与汉字采用一字节的负数表示。本发明实施例中对车牌进行重新编码的作用在于实现对车牌存储的压缩与车牌的模糊匹配算法的性能的提升。

在步骤s120中,分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中。

在示例性实施例中,分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中可以进一步包括:对当前批次中解析完成的所述索引信息、结构化数据和图像数据分别调用对应的elasticsearch、hbase和图像存储服务对应的rpc接口对数据进行写入;以及记录下当前最后一条处理成功的数据的偏移量。这里是为了实现从接入数据的读取、索引创建、结构化数据与图像数据存储的一致性的保证。

在步骤s130中,当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中。

在示例性实施例中,当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中可以进一步包括:当所述图像存储服务接收到图像数据添加的rpc请求时,把所述图像数据写入到日志文件中;在日志文件写入成功后,把所述图像数据添加到双队列的主内存块中;当所述主内存块中存储的数据达到所述预设阈值且双队列的备用内存块已经完成flush动作时,对所述主内存块和所述备用内存块进行切换;当达到所述备用内存块的内存限制大小时,生成flush磁盘的线程用于读取所述备用内存块中的图像数据并生成hfile文件,把hfile文件写入到磁盘。本发明实施例采用双队列内存的作用在于实现图像数据写入的无锁控制,从而提高整体写入性能。

在示例性实施例中,所述方法还可以包括:把hfile文件写入到磁盘时,将所述磁盘中的目录分为两个层级,第一级为当前内存块的分区值,第二级为日期目录。hfile文件本身的命名根据当次flush到磁盘的内存中数据的第一条数据的时间加最后一条数据的时间组成,内存块的分区值通过对车牌进行hash后得到,这样存储的目的有利于在对图像数据进行读取时,根据选择的车牌与时间范围能够快速的定位到数据所在的hfile文件,从而减少hfile文件的读取个数。

在步骤s140中,利用hbase和elasticsearch实现所述车辆数据的检索。

在示例性实施例中,利用所述hbase和elasticsearch实现所述车辆数据的检索可以进一步包括:当接收到数据检索请求时,开启数据检索服务用于监听http/rpc请求;当接收到http/rpc请求后,所述数据检索服务对其进行解析生成索引检索条件,向所述索引服务发起检索请求并获得响应结果;根据所述响应结果对应的数据的key,向hbase和所述图像存储服务中读取key对应的结构化数据和图像数据;对所述结构化数据和所述图像数据进行合并并返回检索结果。

在示例性实施例中,可以利用elasticsearch的空间检索算法实现结构化数据多维度检索并结合hbase的batchget与hfile的bloomfilter算法实现卡口结构化数据与图像数据的快速定位与查找。

在示例性实施例中,所述方法还可以包括:定时根据配置的数据热度进行所述图像存储服务中存储的图像数据的迁移和/或清理操作。

本发明实施方式提供的一种公安卡口海量车辆数据存储与检索方法,在满足数据的快速存储需要的同时满足数据快速检索与图像数据随机读取的功能。

下面通过图2-6对本发明实施例的方法进行详细描述。

本发明实施例提供了一种基于hadoop生态系统为底层技术的公安卡口海量车辆数据存储与检索方法,针对公安卡口车辆数据的结构化数据、图像数据的快速存储与检索,尤其是针对海量图像数据的大并发随机读取。

本发明实施例在基于hadoop生态系统为底层技术的基础上提供了从数据采集终端、数据分发管理、数据接入处理、存储与数据检索的整套技术方案来解决车辆数据的海量存储与检索难题,可以包括:(1)定义用于与数据采集终端通信的socket接口;(2)扩展实现hadoop生态系统中kafka中的分区接口;(3)实现用于处理数据采集终端传入的车辆数据的分布式处理程序,实现对数据的分解与入库;(4)实现专用的图像存储服务;(5)实现多维度数据检索服务;(6)图像数据回滚分析服务。

具体的,上述(1)中定义用于与数据采集终端通信的socket接口,此部分在kafka的基础上进行接口的扩展,可以进一步包括:采用avro协议定义数据采集终端的数据接入标准,包装kafka的通信接口,对外隐藏掉接口细节,直接提供指定的数据格式,实现解析请求数据并对数据进行编号,实现数据路由方法并向指定的集群节点写入数据。

其中avro是hadoop的一个子项目。avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,avro提供的机制使动态语言可以方便地处理avro数据。

具体的,上述(2)中扩展实现hadoop生态系统中kafka中的分区接口,可以进一步包括:对车牌进行hash并把数据对应到指定的分区、实现kafka的分区接口函数、根据车牌与时间分区值生成数据的唯一key(16字节,车牌+分区+时间),并结合上述(1)中定义的接口对数据进行分发。

其中hash就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

具体的,上述(3)中实现用于处理数据采集终端传入的车辆数据的分布式处理程序,实现对数据的分解与入库,可以进一步包括:根据kafka的分区个数生成接入实时任务进程,保证一个kafka的节点中对应一个或多个处理程序(按分区数生成进程);对数据采集终端接入的车辆数据进行解析并入库,可以进一步包括:解析avro协议中的车辆数据,根据车辆的结构化数据生成多维索引,分别对索引、结构化数据、图像数据进行存储,把索引存储到elasticsearch,结构化数据生成二进制存储到hbase,图像数据写入图像服务的内存中并记录wal(预写日志),即在将所述图像数据存储进内存前,图像数据可能会丢失,可以先把图像数据写入到一个日志文件中。其中数据统一采用在kafka分区接口中实现的16字节唯一key进行存储。

其中,elasticsearch是一个基于lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于restfulweb接口。hbase是一个分布式的、面向列的开源数据库。hbase是apache的hadoop项目的子项目。

具体的,上述(4)中图像存储服务,可以进一步包括:实现用于与接入程序、数据访问服务进行通信的rpc接口;实现图像处理服务,包括:内存分区(与kafka分区相同,例如每个分区1gb内存)与wal日志、根据跳表数据结构生成图像内存存储的内存块、借鉴hbase中hfile的存储结构实现内存数据溢写磁盘(例如,可以按天对图像数据进行目录区分)。

本发明实施例中,一方面,通过利用hbase的hfile随机读取特性以及内存的高效写入特性,能够实现图像数据的快速写入与图像数据的随机读取能力。可以先将图像数据存储于内存中,当内存中存储的图像数据达到阈值时例如达到1gb时,生成hbase的hfile文件,然后写入hadoop中。这里针对图像服务来讲,hadoop就是底层存储,因此假定hadoop就是物理磁盘。另一方面,可以利用hbase+elasticsearch来实现结构化数据和图像数据的快速检索。

具体的,上述(5)中多维度数据检索服务,由于在卡口系统中车辆数据可能被检索的维度太多,本发明实施例为实现高性能查询,会实现一个专用的数据检索服务对外接口例如http/rpc的通信接口,并统一接收json的请求消息,客户端程序把需要检索的数据维度请求文件交由此数据检索服务,此数据检索服务根据请求维度生成对应的索引计划从索引服务中读取对应的索引信息的topn并通过hbase高效的随机读取能力读取车辆数据的原始结构化数据,同时并行向图像存储服务发起批量图像读取请求快速的得到车辆信息对应的图像数据。

具体的,上述(6)中图像数据回滚分析服务,其中图像数据回滚服务作用于根据图像的存储时间配置对图像进行磁盘归档与定时的清理操作,图像数据回滚服务可配置例如近一个月内的数据为热数据存储到磁盘,超过一个月的数据存储到归档磁盘,超过三个月数据需要清理。图像数据回滚服务根据配置对图像数据存储目录进行扫描,当目录达到指定的天数配置时,对图像目录进行整体的迁移或者删除,从而解决磁盘的清理操作,从而解决传统的图像存储系统中海量小文件的清理问题。图像数据回滚用于对数据空间进行清理,也就是图像存储服务本身并不具体管理磁盘,由hadoop来管理。

这里的小文件指的是那些size比hdfs的blocksize(默认128mb)小的多的文件。如果在hdfs中存储小文件,那么在hdfs中肯定会含有许许多多这样的小文件。而hdfs的问题在于无法很有效的处理大量小文件。任何一个文件,目录和block,在hdfs中都会被表示为一个object存储在namenode的内存中,每一个object占用1024bytes的内存空间。所以,如果有10million个文件,每一个文件对应一个block,那么就将要消耗namenode10gb+的内存来保存这些block的信息。如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限。不仅如此,hdfs并不是为了有效的处理大量小文件而存在的。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从datanode到datanode的seeks和hopping来retrieve文件,而这样是非常的低效的一种访问方式。

图2示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索方法的整体结构图。

本发明实施例的整体架构如图2所示,卡口车辆数据采集终端通过本发明实施例提供的数据接入接口对数据进行接入,并由实时入库服务接收到接入的车辆结构化数据与图像数据进行编码转换与存储(根据数据的维度生成索引与结构化数据、图像数据),通过统一的数据检索服务对外提供数据的访问服务。

本发明实施例是基于hadoop生态系统相关组件的基础上进行的技术架构,因此在部署前首先需要部署hadoop生态系统,可以包含的组件包括:jdk1.7_67或以上版本、ambari、hadoop、hbase、elasticsearch、kafka、zookeeper、图像存储组件。

按每天3000w卡口数据量图像存储一个月的服务器配置说明:

1、元数据服务器

3台,建议配置256gb内存+500gbssd盘+cpu*2(2.0ghz+8core超线程),部署zookeeper+namenode+hbasemaster+图像数据回滚服务。

2、索引服务器

3-5台,建议配置256gb内存+ssd盘*2(500gb)+cpu*2(2.0ghz+8core超线程),部署elasticsearch服务组件。

3、结构化数据存储服务器

10-16台,建议配置96gb内存+1块ssd盘(500gb)+3tb磁盘4块+cpu*2(2.0ghz+8core超线程)+双网卡,部署hbase服务数据组件+kafka服务组件+数据接入处理服务。

其中,结构化数据存储双副本。

4、图像存储服务器

60台,建议配置64gb内存+1块ssd盘(500gb)+3tb磁盘12块+cpu*2(2.0ghz+8core超线程),部署图像存储服务组件。

图像存储服务器可选配集中式存储(如果需要在清理磁盘前的数据进行一定时间长度的保留),用于存储数据时效在一个月到三个月之间的数据。

其中,图像数据存储单副本。

5.数据检索服务器

1-2台,建议配置16gb内存+500gb磁盘+1cpu(2.0ghz+8core超线程),部署数据检索服务

在本发明实施例中,数据采集终端数据写入的接口通过使用kafka提供的socket通信接口来进行数据的传输与网络带宽的负载均衡,并结合kafka的partition的功能编写分布式的consumer端,来实现具体的数据接入处理,部署kafka服务组件的节点与hbase的存储节点共用(这块是利用kafka的高吞吐能力与hbase提供的数据本地化能力,让数据接收与写入能在一台机器上完成。当数据采集终端,也就是前端的拍照的设备,通过kafka的接口进行数据写入时,把数据随机分发给某一个hbase节点,hbase节点部署的kafka节点接收到这个写入的数据后,直接生成数据写入内存与hbase,避免二次网络通信)。但必须配置双网卡对数据采集终端提供a网卡用于数据的写入,接入处理程序通过b网卡把数据写入到对应的索引、hbase、与图像存储服务中,通过hbase高效的随机读取能力来提供对数据的快速读取操作,图像存储服务借用hbase的hfile文件数据结构对数据进行合并并存储到磁盘,因此对于图像的随机读取能力在本发明实施例中将会得到大大的提升。

图3示意性示出了根据本发明实施例的数据接入和分发服务的工作流程图。

图3是本发明实施例的数据接入处理服务在接收到数据采集终端传输的车辆数据后,批量读取接入的数据生成对应的索引、结构化数据、图像数据并分发到不同的服务的流程。

kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

其中,kafka集群包含一个或多个服务器,这种服务器被称为broker。每条发布到kafka集群的消息都有一个类别,这个类别被称为topic。partition是物理上的概念,每个topic包含一个或多个partition。producer是负责发布消息到kafkabroker。consumer消息消费者向kafkabroker读取消息的客户端。

如图3所示,数据接入处理服务在接收到数据采集终端传输的车辆数据后,批量读取接入的数据生成对应的索引、结构化数据、图像数据并分发到不同的服务中,具体可以包括:

步骤1,使用kafka的consumerapi编写数据接入处理程序。

本发明实施例使用的数据接入采用的是hadoop生态系统中的kafka组件来处理数据采集终端到卡口车辆数据存储系统之间的数据桥梁,这样做可以有效的预防数据处理过程中出现的异常情况,同时kafka本身提供不同语言的api接口,这样针对数据采集终端的接入会更加友好。

在本步骤1中,具体可以包括:

步骤1.1,数据采集终端连接kafka的producer的api来充当数据的生产者,在producer的接口内部为考虑网络的负载,kafka的partition的选择采用轮询的方法保证每一条数据都分发到不同的kafka节点中。

步骤1.2,数据接入处理程序连接kafka的consumer的api,分批次从kafka中读取数据,每个partition单独对应一个kafka的consumer进行消费,每个批次读取例如10-50mb的数据进行处理。

步骤2,解析读取到的kafka数据,并对车牌进行重新编码,在车牌中一般包含三个部分的数据:前两位(省+地区)+中间4位(一个字母加数值的值)+最后一位(根据含义会有不同,比如警、学、出租车、挂车等),由于这些里面包含有部分中文,而中文对于存储来讲需要占用3个字节,所以要重新编码。其中,前两位编码可以从0-65535,中间4位中的字母采用一字节的负数表示,最后一位中的字母与汉字采用一字节的负数表示。这是车牌的重新编码规则,其目的是为了减少单个车牌所占用的字节数,从而减少数据整体的存储空间,并可以更高效的提升数据检索的能力。

步骤3,对数据进行解析提取并生成数据的key、索引、结构化数据、图像数据。在本步骤中,通过对车辆数据结构化字段的配置信息,此配置信息可以通过一个hbase的表单独来进行存储,配置包含字段信息与需要用于索引的字段的描述。本发明实施例中通过配置的索引字段对解析出来的结构化数据生成对应的索引信息。

步骤4,对当前处理批次中解析完成的索引、结构化数据、图像数据分别调用对应的elasticsearch、hbase、图像存储服务对应的rpc接口对数据进行写入并同时对kafka进行手动的commit操作,记录下当前最后一条处理成功的数据的offset,保证数据处理过程中不丢失。

图4示意性示出了根据本发明实施例的图像存储服务的工作流程图。

如图4所示,是本发明实施例图像存储服务在接收到接入的图像数据后具体的处理过程的流程图。图像存储服务在接收到传入的图像数据后具体的处理过程的流程图,具体可以包括:

步骤1,当图像存储服务接收到一个图像数据添加的rpc(remoteprocedurecalls,远程过程调用)请求后,通过执行对应的数据添加操作来进行添加,此步骤中为了考虑到图像数据写入的吞吐量,数据添加操作首先把图像数据向对应的内存队列中进行添加。

rpc是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。由于使用rpc的程序不必了解支持通信的网络协议的情况,因此rpc提高了程序的互操作性。rpc是一项广泛用于支持分布式应用程序(不同组件分布在不同计算机上的应用程序)的技术。rpc的主要目的是为组件提供一种相互通信的方式,使这些组件之间能够相互发出请求并传递这些请求的结果。没有语言限制。

步骤2,此步骤主要用于在图像添加过程中的处理,由于为了考虑数据添加的处理能力,数据优先写入到内存。为了考虑到机器可能出现的异常情况,在数据添加前首先把图像数据写入到一个固定大小的wal日志文件中,wal日志文件的大小与内存块的大小相同,在此过程中把图像数据append写入到wal日志文件,在日志文件写入成功后找到双队列的内存块的主内存块(内存块中的主内存块表示这是一块活动的内存,用于处理数据的添加),此内存块是一个跳跃表的数据结构,把图像数据写入到内存块中。本发明实施例中,主备内存采用双缓冲内存块,当a块满后换到b块开始写,同时a块开始写磁盘。

步骤3,此步骤作用于对图像数据添加到图像存储服务的内存块后需要处理的后续动作,具体可以包括:

步骤3.1,如果主内存块的写内容还没有达到配置的内存块阈值时,或者说主内存块中剩余的大小大于已经写入的数据的平均大小时,表示主内存块还可以执行写入动作,流程不作操作,直接结束整个添加操作。

步骤3.2,如果主内存块剩余的空间大小已经无法再写入新的数据,说明此主内存块已经达到了阈值大小,主内存块的数据可以写入到磁盘,判断备用内存块是否已经完成了flush的动作,如果完成表示备用内存块可以切换成主内存块进行写操作,对主备内存块进行切换。

步骤3.3,此时内存块中备用内存块已经达到了内存限制的大小,生成一个flush磁盘的线程,读取备用内存块的数据并生成hfile文件,生成hfile文件时通过数据的key生成bloomfilter。当文件生成完成后,把文件写入到磁盘,并标记备用内存块为空内存块,可以被切换成主内存块。此步骤中在生成hfile文件并写入磁盘时,磁盘中的目录分为两个层级,第一级为当前内存块的分区值,第二层为日期目录,hfile的文件名称通过这个hfile中数据的最小时间数据(第一条数据写入的时间)加上最大时间数据(最后一条数据的写入时间)的时间值为文件的名称。

例如,在将内存块中的数据写入磁盘时,当1gb的内存块写满时,这个内存块里面存储有很多数据,在数据随机读取时,就可以根据要检索的时间范围,判断需要读取的文件个数,从而减少读取文件的总个数。

步骤3.4,hfile文件flush到磁盘结束,此时对应的内存块的wal日志需要被清理掉,对wal日志文件执行delete操作。

本发明实施例中,使用双缓冲队列比单缓冲阻塞队列和单缓存队列的效果都要好。在处理线程同步的时候,是要花费时间的,通过双缓存队列可以更大限度地提高程序的运行效率。尤其是在大的程序里面,这样的效果体现得更明显。而往往越大的系统,对性能的要求也就越高。

本发明实施例中充分的利用了hbase的hfile文件结构与kafka的partition的分区功能,其中利用partition的分区,把数据分发到不同的处理节点上,从而提高数据的写入能力,更好的利用网络带宽。例如,一个10mb的数据包过来,后面的处理节点有10个,就可以通过partition设置为10,让每个处理节点接收1mb的数据。这里所说的不同的处理节点是总的部署有kafka的多个节点,每次把数据发给某一个,当下一次数据过来的时候,把数据再发给另一个kafka节点,类似于轮询,保证每一个接收数据的节点都能平等对待。

图5示意性示出了根据本发明实施例的数据检索服务的工作流程图。

如图5所示,是本发明实施例数据检索服务在接收到对卡口车辆数据的查询请求后的处理流程。数据检索服务在接收到对卡口车辆数据的查询请求后的处理流程,具体可以包括:

步骤1,当应用端发起一个数据检索的请求时,本发明实施例会开启一个专用的数据检索服务,此数据检索服务可以监听http/rpc的请求,当请求被接收到后,数据检索服务开始对请求进行解析,生成请求需要的维度的索引检索条件或者说按请求维度生成索引的优化条件,向索引服务发起检索请求,并得到topn的结果。

步骤2,索引服务在响应完成索引的search结果后,此时根据响应的结果对应的数据的唯一key值,从线程池中拿出两个线程并行向hbase与图像存储服务中批量读取key的信息,此部分利用了hbase高效的随机读取能力。

步骤3,对图像存储服务与hbase中返回的原始图像数据和结构化数据的消息进行合并,并转换成应用端可接受的例如json数据格式,向应用端响应结果。

图6示意性示出了根据本发明实施例的图像数据回滚服务的工作流程图。

如图6所示,图像数据本身是一个占用存储空间非常大的服务,因此图像存储服务本身需要的图像数据回滚服务用于定时根据配置的数据热度与后续动作进行数据的迁移和/或清理动作,其中数据热度根据时间来进行表示,具体可以包括:

步骤1,当图像存储服务启动时,首先会把当前图像存储服务的rpc相关的连接信息向图像数据回滚服务发起连接进行注册,图像数据回滚服务记录各个图像存储服务的rpc连接信息到内存表中。

步骤2,此步骤在图像数据回滚服务启动后的定时器中定时触发数据判断请求,具体可以包括:

步骤2.1,数据热度配置表信息,此信息记录两个关键动作,热度时间范围(如最近一个月内),存储策略(例如可配置高性能磁盘、归档存储、清理),在本步骤中读取数据的热度配置。

步骤2.2,向已经在图像数据回滚服务中注册的所有的图像存储服务发起rpc请求,得到各服务中当前的存储目录信息,这些存储目录就是数据写入的日期值。

步骤2.3,根据步骤2.2中得到的各服务中记录的图像存储日期与当前配置的热度规则,计算当前的目录是否需要执行相应的回滚操作。

步骤3,此步骤在根据热度配置计算各图像存储服务的数据后,向各图像服务器发起具体的操作处理动作,具体可以包括:

步骤3.1,如果某个图像存储服务中有高性能磁盘的数据时间已经达到了需要迁移到集中存储的数据时(前提是图像存储服务节点中配置有可选的集中式存储),向这个图像存储服务发起一个rpc请求,通知其对指定的目录进行迁移。这里的数据迁移是对高性能磁盘数据超过时间的数据迁移到集中存储。

步骤3.2,如果某个图像存储服务中存储的目录日期已经达到了需要从磁盘中清理出去的要求时,向图像存储服务发起清理数据的rpc请求,在图像存储服务内部接收到该请求后,判断数据所在的磁盘存储类型,并在指定的存储磁盘中delete掉这部分目录。这里的数据清理表示磁盘数据不再需要,可直接删除,删除前的数据可能在集中存储也有可能在高性能磁盘。

本发明实施方式提供的公安卡口海量车辆数据存储与检索方法,通过hadoop生态系统的相关组件与自研图像存储服务并采用hfile文件结构的方法,能够更好的解决海量卡口车辆数据的存储能力、大批量图像数据写入的吞吐能力与在海量图像数据中进行快速随机读取的性能。

与现有技术相比,本发明实施例在提供一个海量的图像数据与结构化数据的混合存储能力的同时,还解决了如下几个大的技术难点:

解决了hadoop原生系统不支持海量小文件存储问题。本发明实施例通过图像存储服务,图像数据写入时先写入内存,当内存达到阈值例如1gb后,生成hbase的hfile文件。在hadoop的原生系统中,一个图像就是一个文件,而图像本身只有300~500kb。还解决了高性能的图像随机读取问题和多维度结构化数据的快速检索问题以及图像存储区域磁盘空间回滚难、回滚慢问题。

图7示意性示出了根据本发明实施例的公安卡口海量车辆数据存储与检索装置的框图。

如图7所示,该公安卡口海量车辆数据存储与检索装置100可以包括数据接入与分发模块110、数据存储模块120、图像数据存取模块130以及数据检索模块140。

其中数据接入与分发模块110可以用于接收车辆数据,根据所述车辆数据生成对应的索引信息、结构化数据和图像数据并分别分发至索引服务、数据存储服务和图像存储服务。

数据存储模块120可以用于分别通过所述索引服务、数据存储服务和图像存储服务将所述索引信息、结构化数据和图像数据存储至elasticsearch、hbase和内存中。

图像数据存取模块130可以用于当所述内存中存储的图像数据达到预设阈值时,生成hbase的hfile文件,将所述图像数据写入磁盘中。

数据检索模块140可以用于利用所述hbase和elasticsearch实现所述车辆数据的检索。

从另一方面上讲,本发明实施例为了解决公安卡口的海量结构化数据与图像数据的存储与检索提供了一整套的处理装置,可以包括:采集接入接口定义单元,作用于对数据采集终端的数据的写入提供海量写入的吞吐能力;数据分区规则与数据key的生成策略单元,作用于生成数据的全局唯一key与网络带宽的分配;数据接入处理单元,作用于对实时接入的车辆数据进行分析生成索引、结构化数据存储与图像数据存储分发的服务;图像存储单元,作用于把一个个小的图像文件进行合并并生成图像的索引进行存储的服务;数据检索单元,作用于针对client端程序对海量数据进行快速检索的服务;图像数据回滚单元,作用于对图像数据按时间热度进行迁移与清理动作来释放高性能磁盘的空间。

本发明实施例中的公安卡口海量车辆数据存储与检索装置中的各组成模块和/或单元具体实现可参考上述方法实施例,在此不再赘述。

进一步的,本公开实施例还提供一种电子设备,可以包括处理器以及存储器。所述存储器可以用于存储所述处理器的可执行指令。其中,所述处理器被配置为执行上述任意一实施例所述的公安卡口海量车辆数据存储与检索方法。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本发明实施方式的方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1