一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据查询方法、装置及设备、存储介质与流程

2021-11-09 22:25:00 来源:中国专利 TAG:


1.本发明涉及大数据技术领域,尤其涉及的是一种数据查询方法、装置及设备、存储介质。


背景技术:

2.物联网领域拥有着繁多的业务类型以及海量增长的数据,从前端传感器采集数据,到后台对数据进行处理得到结果,整个过程耗时较长。而许多业务对结果的时效性有着较高的要求,如交通领域中,一些业务需要对某区域的套牌车辆进行监管,倘若对历史数据进行套牌车处理并上报,显然错过了最佳监管时机。
3.流式计算框架是一种重要的大数据处理手段,可以实时地获取数据,并对数据进行处理得到结果,可以避免错过上述的最佳监管时机。因此,可以将流式计算框架应用在物联网场景中,来应对海量流数据的处理。
4.在相关的方式中,虽然可以应对流数据的处理,但是只能提供数据处理的最终结果,最终结果之前的中间处理数据无法通过查询获取。然而在一些应用中,有可能会需要这些中间处理数据,所以上述方式无法满足这些应用的需求。


技术实现要素:

5.有鉴于此,本发明提供一种数据查询方法、装置及设备、存储介质,可以满足应用对中间处理数据的需求。
6.本发明第一方面提供一种数据查询方法,包括:
7.当在数据库中查询到至少一个原始数据时,按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,并按照第一数据结构将所有第一处理数据存储至数据库;第一数据结构包括:第一关键字key和第一值value,第一key至少包括指定处理逻辑的逻辑标识、原始数据对应的日期、原始数据中指定数据维度对应的数据维值,第一value被定义为哈希hash结构,hash结构的哈希关键字hashkey依据满足第一key的原始数据的时间区间确定,hash结构的哈希值hashvalue至少包括满足hashkey的原始数据所对应的第一处理数据;
8.当接收到查询第一处理数据的请求任务时,依据请求任务在第一数据结构中确定对应的第一目标key和第一目标key对应的第一目标value,并依据所述请求任务在第一目标value中确定出对应的目标hashkey,依据所述请求任务在所述目标hashkey对应的目标hashvalue中查询到对应的目标第一处理数据。
9.根据本发明的一个实施例,该方法之前,进一步包括:当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第二数据结构进行存储;第二数据结构包括第二key和第二value,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值;第二value至少包括满足第二key的原始数据;
10.所述在数据库中查询到至少一个原始数据包括:
11.当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型和数据维度,在所述第二数据结构中确定第二目标key,在所述第二目标key对应的第二目标value中查询到对应的原始数据。
12.根据本发明的一个实施例,该方法之前,进一步包括:当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第三数据结构进行存储;第三数据结构包括第一key-value组合和第二key-value组合,第一key-value组合包括第三key和第三value,第三key至少包括所述设定时间窗口、数据类型、数据维度,第三value至少包括满足所述第三key的数据维值;数据维值为与第三key中数据维度对应的数据维值;第二key-value组合包括第四key和第四value,第四key至少包括第三key和第三value,第四value至少包括满足第四key的原始数据;
13.所述在数据库中查询到至少一个原始数据包括:
14.当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型、数据维度在所述第三数据结构中确定第三目标key和所述第三目标key对应的第三目标value,并依据第三目标key和第三目标value在所述第三数据结构中确定第四目标key,在所述第四目标key对应的第四目标value中查询到对应的原始数据。
15.根据本发明的一个实施例,所述按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,包括:
16.将查询到的各原始数据进行分组,每一组中的原始数据中指定数据维度对应的数据维值相同,并按照指定处理逻辑对每组原始数据进行处理得到第一处理数据。
17.根据本发明的一个实施例,所述日期是指查询到的原始数据所处的时间窗口对应的日期;
18.所述满足第一key的原始数据的时间区间通过以下方式确定:
19.依据满足第一key的各原始数据对应的时间窗口,确定最早的第一时间窗口和最晚的第二时间窗口;
20.从第一时间窗口对应的时间信息中获取指定时间单位对应的第一时间信息;
21.从第二时间窗口对应的时间信息中获取指定时间单位对应的第二时间信息;
22.依据所述第一时间信息、第二时间信息确定满足第一key的原始数据的时间区间。
23.根据本发明的一个实施例,对源数据进行过滤得到待存储的原始数据之后,该方法还包括:
24.依据最近一次存储至数据库的第二处理数据和当前得到的待存储的原始数据确定待存储的第二处理数据并按照第四数据结构存储;所述第四数据结构包括第五key和第五value,第五key至少包括当前得到的待存储的原始数据的时间戳、数据维值,该数据维值为具有所述时间戳的原始数据中指定数据维度对应的数据维值;所述第五value至少包括所述待存储的第二处理数据中满足所述第五key的第二处理数据。
25.根据本发明的一个实施例,该方法还包括:
26.在指定清理时间到达时,按照如下至少一种方式对所述数据库存储的数据进行清理:
27.方式1:将所述数据库中存储时长超过设定时长的数据删除;
28.方式2:检查所述数据库中已存储的数据量是否超过第一阈值,如果是,依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中存入时间处于所述目标时间段的数据删除,返回检查所述数据库中已存储的数据量是否超过第一阈值;
29.方式3:检查所述数据库中已存储的数据量是否超过第二阈值,如果是,依据当前时间确定过期时间段,将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除。
30.根据本发明的一个实施例,当按照方式3对所述数据库存储的数据进行清理时,所述指定清理时间是指按照第一数据结构将所有第一处理数据存储至所述数据库之后的时间。
31.本发明第二方面提供一种数据查询装置,包括:
32.处理数据存储模块,用于当在数据库中查询到至少一个原始数据时,按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,并按照第一数据结构将所有第一处理数据存储至数据库;第一数据结构包括:第一关键字key和第一值value,第一key至少包括指定处理逻辑的逻辑标识、原始数据对应的日期、原始数据中指定数据维度对应的数据维值,第一value被定义为哈希hash结构,hash结构的哈希关键字hashkey依据满足第一key的原始数据的时间区间确定,hash结构的哈希值hashvalue至少包括满足hashkey的原始数据所对应的第一处理数据;
33.处理数据查询模块,用于当接收到查询第一处理数据的请求任务时,依据请求任务在第一数据结构中确定对应的第一目标key和第一目标key对应的第一目标value,并依据所述请求任务在第一目标value中确定出对应的目标hashkey,依据所述请求任务在所述目标hashkey对应的目标hashvalue中查询到对应的目标第一处理数据。
34.根据本发明的一个实施例,该装置进一步包括:第一原始数据存储模块,用于当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第二数据结构进行存储;第二数据结构包括第二key和第二value,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值;第二value至少包括满足第二key的原始数据;
35.所述处理数据存储模块在数据库中查询到至少一个原始数据时,具体用于:
36.当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型和数据维度,在所述第二数据结构中确定第二目标key,在所述第二目标key对应的第二目标value中查询到对应的原始数据。
37.根据本发明的一个实施例,该装置进一步包括:第二原始数据存储模块,用于当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第三数据结构进行存储;第三数据结构包括第一key-value组合和第二key-value组合,第一key-value组合包括第三key和第三value,第三key至少包括所述设定时间窗口、数据类型、数据维度,第三value至少包括满足所述第三key的数据维值;数据维值为与第三key中数据维度对应的数据维值;第二key-value组合包括第四key和第四value,第四key至少包括第三key和第三value,第四value至少包括满足第四key的原始数据;
38.所述处理数据存储模块在数据库中查询到至少一个原始数据时,具体用于:
39.当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型、数据维度在所述第三数据结构中确定第三目标key和所述第三目标key对应的第三目标value,并依据第三目标key和第三目标value在所述第三数据结构中确定第四目标key,在所述第四目标key对应的第四目标value中查询到对应的原始数据。
40.根据本发明的一个实施例,所述处理数据存储模块按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据时,具体用于:
41.将查询到的各原始数据进行分组,每一组中的原始数据中指定数据维度对应的数据维值相同,并按照指定处理逻辑对每组原始数据进行处理得到第一处理数据。
42.根据本发明的一个实施例,所述日期是指查询到的原始数据所处的时间窗口对应的日期;
43.所述满足第一key的原始数据的时间区间通过以下模块确定:
44.时间窗口确定模块,用于依据满足第一key的各原始数据对应的时间窗口,确定最早的第一时间窗口和最晚的第二时间窗口;
45.第一时间信息确定模块,用于从第一时间窗口对应的时间信息中获取指定时间单位对应的第一时间信息;
46.第二时间信息确定模块,用于从第二时间窗口对应的时间信息中获取指定时间单位对应的第二时间信息;
47.时间区间确定模块,用于依据所述第一时间信息、第二时间信息确定满足第一key的原始数据的时间区间。
48.根据本发明的一个实施例,所述第一原始数据存储模块或第二原始数据存储模块对源数据进行过滤得到待存储的原始数据之后,还用于:
49.依据最近一次存储至数据库的第二处理数据和当前得到的待存储的原始数据确定待存储的第二处理数据并按照第四数据结构存储;所述第四数据结构包括第五key和第五value,第五key至少包括当前得到的待存储的原始数据的时间戳、数据维值,该数据维值为具有所述时间戳的原始数据中指定数据维度对应的数据维值;所述第五value至少包括所述待存储的第二处理数据中满足所述第五key的第二处理数据。
50.根据本发明的一个实施例,该装置还包括:
51.数据清理模块,用于在指定清理时间到达时,按照如下至少一种方式对所述数据库存储的数据进行清理:
52.方式1:将所述数据库中存储时长超过设定时长的数据删除;
53.方式2:检查所述数据库中已存储的数据量是否超过第一阈值,如果是,依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中存入时间处于所述目标时间段的数据删除,返回检查所述数据库中已存储的数据量是否超过第一阈值;
54.方式3:检查所述数据库中已存储的数据量是否超过第二阈值,如果是,依据当前时间确定过期时间段,将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除。
55.根据本发明的一个实施例,当按照方式3对所述数据库存储的数据进行清理时,所述指定清理时间是指按照第一数据结构将所有第一处理数据存储至所述数据库之后的时
间。
56.本发明第三方面提供一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例所述的数据查询方法。
57.本发明第四方面提供一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例所述的数据查询方法。
58.本发明实施例具有以下有益效果:
59.本发明实施例中,可以通过查询原始数据并按照指定处理逻辑对原始数据进行处理得到第一处理数据,按照分为二级索引的第一数据结构来存储第一处理数据,其中,第一级索引为第一key-第一value,第二级索引为hashkey-hashvalue,从而在查询第一处理数据时,可以先依据第一级索引所需的信息(包括逻辑标识、日期、数据维度)查找到第一目标key对应的第一目标value(包括目标hashkey-目标hashvalue),接着再依据第二级索引所需的目标hashkey从对应的目标hashvalue中查询出对应的目标第一处理数据,上述方式中,第一处理数据作为中间处理数据存储在数据库中,在一些应用需要某些中间处理数据时,可以从第一数据结构中找到对应的中间处理数据,可以满足应用对中间处理数据的需求,而且二级索引的形式使得查询效率较高,多个value可以共用同一key,也可以节省数据库的存储空间。
附图说明
60.图1是本发明一实施例的数据查询方法的流程示意图;
61.图2是本发明一实施例的数据库的示意图;
62.图3是本发明一实施例的数据查询装置的结构示意图;
63.图4是本发明一实施例的电子设备的结构框图。
具体实施方式
64.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
65.在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
66.应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种器件,但这些信息不应限于这些术语。这些术语仅用来将同一类型的器件彼此区分开。例如,在不脱离本发明范围的情况下,第一器件也可以被称为第二器件,类似地,第二器件也可以被称为第一器件。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
67.为了使得本发明的描述更清楚简洁,下面对本发明中的一些技术术语进行解释:
68.流处理:流式计算框架的一种处理手段,针对处理高速并发且时效性有较高要求的大规模计算场景,能够对具有实时、高速、无边界、瞬时性等特性的流式数据进行实时处理,具备低时延、高可用、高扩展等能力。
69.数据驱动:区别于数据批处理,一条数据即可触发计算或者说处理。
70.时间驱动:区别于数据驱动,周期地触发对相应时间窗口内的数据进行计算或者说处理。
71.下面对本发明实施例的数据查询方法进行更具体的描述,但不应以此为限。
72.在一个实施例中,参看图1,一种数据查询方法,可以包括以下步骤:
73.s100:当在数据库中查询到至少一个原始数据时,按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,并按照第一数据结构将所有第一处理数据存储至数据库;第一数据结构包括:第一关键字key和第一值value,第一key至少包括指定处理逻辑的逻辑标识、原始数据对应的日期、原始数据中指定数据维度对应的数据维值,第一value被定义为哈希hash结构,hash结构的哈希关键字hashkey依据满足第一key的原始数据的时间区间确定,hash结构的哈希值hashvalue至少包括满足hashkey的原始数据所对应的第一处理数据;
74.s200:当接收到查询第一处理数据的请求任务时,依据请求任务在第一数据结构中确定对应的第一目标key和第一目标key对应的第一目标value,并依据所述请求任务在第一目标value中确定出对应的目标hashkey,依据所述请求任务在所述目标hashkey对应的目标hashvalue中查询到对应的目标第一处理数据。
75.本发明实施例的数据查询方法的执行主体可以为任一种具有处理能力的电子设备,比如计算机设备或服务器等。当然,电子设备中可以应用一定的工具来实现上述方法,比如可以利用流计算引擎来实现,流计算引擎具体类型不限,比如可以为apache storm(一个分布式实时大数据处理系统)、flink引擎等。
76.当然,电子设备所利用的工具也不限于流计算引擎,其他适用于处理流数据的工具均适用。在下面的实施例内容中,以采用流计算引擎实现为例展开说明,但是应当理解的是,这并不应作为限制。
77.流计算引擎中可以设置有一个或多个不同的时间驱动任务,时间驱动任务用于查询所需原始数据并对查询到的原始数据进行处理,时间驱动任务可以由用户设置,或者系统在运行过程中自动生成。
78.在设置时间驱动任务之后,可以周期地触发、或者可以根据外部信息触发时间驱动任务,以执行相应的时间驱动任务。优选来说,可以周期触发时间驱动任务,如此,可以周期地实现原始数据的查询与处理,以及所得的第一处理数据的存储,以提供更充分的中间处理数据,来应对应用或用户需求。
79.流计算引擎可以获取一个或多个外部数据源发送的源数据,这些源数据可以是外部数据不断传输至流计算引擎的流数据中的数据,当然也不限于此,其他数据同样也可以适用。流计算引擎获取的源数据可以直接作为原始数据进行存储,或者可以将获取的源数据进行过滤后作为原始数据进行存储。
80.当然,原始数据的来源不限于此,在本实施例中,更多关注的是基于查询到的原始数据进行处理以及对处理所得的第一处理数据进行存储,因而本实施例中,只要数据库中
存储有原始数据,在执行至少一个时间驱动任务能够查询到相应的原始数据即可。
81.所述的数据库可以为分布式存储系统中的分布式数据库。比如,数据库可以分成多个分库,分别分布在分布式存储系统的多个存储节点中,在查询原始数据时,可以从所有存储节点中进行查询。当然,此处只是举例,实际也可以在分布式存储系统的每个存储节点上设置一个完整的数据库,在查询原始数据时可以在其中一个存储节点的数据库中查询,或者其他方式,具体不限于此。
82.可以在任一时间驱动任务被触发(下面将被触发的时间驱动任务称为第一时间驱动任务)时,依据第一时间驱动任务在数据库中查询满足要求的原始数据,具体查询方式不限。查询到的原始数据可以为一个或多个,通常情况下为多个。在查询到原始数据之后,可以执行步骤s100。
83.步骤s100中,当在数据库中查询到至少一个原始数据时,按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,并按照第一数据结构将所有第一处理数据存储至数据库。
84.原始数据的格式不限,在本实施例中,举例来说,原始数据可以为包含多个数据维度对应的数据维值的多维数据。比如,在交通监控场景下,一条原始数据可以包含车辆属性数据、采集到该车辆属性数据的时间戳、采集该车辆属性数据的设备的设备标识等多个数据维值,这些数据维值是原始数据中的不同维度上的数值,这里的车辆属性信息可以包括但不限于车牌号。
85.当然,上述的原始数据只是举例,原始数据当然也可以为包含一个数据维值的单维数据,具体不作限定。在下面的实施例内容中,以原始数据为多维数据为例展开说明,但是应当理解的是,这并不应作为限制。
86.流计算引擎在设置时间驱动任务时,还可以为时间驱动任务设置对应的数据类型、数据维度及处理逻辑。可选的,不同时间驱动任务对应的数据类型、数据维度及处理逻辑中至少一者不同。这里的数据类型为相应时间驱动任务负责查询并处理的原始数据的类型,数据维度为这些原始数据所包含的一个数据维度(当然也可以是多个,具体不限于此)。
87.所述的指定数据维度可以指被触发的第一时间驱动任务对应的数据维度,而这数据维度也是第一时间驱动任务负责的数据类型下的原始数据包含的数据维度。当然,指定数据维度也可以是以其他方式指定的数据维度,具体不限于此。
88.在查询到原始数据之后,可以按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据。这里的指定处理逻辑比如可以为被触发的第一时间驱动任务对应的处理逻辑,当然,具体不限于此,也可以是其他方式指定的处理逻辑。
89.指定处理逻辑的具体内容不限,可以根据原始数据的处理需要来确定,比如,可以包括数学运算、逻辑判断等等处理逻辑。
90.可选的,按照指定处理逻辑对原始数据进行处理时,可以先依据指定数据维度对应的数据维值对查询到的原始数据进行分组,再按照指定处理逻辑分别对每组原始数据进行处理,得到每组原始数据对应的第一处理数据。
91.举例来说,查询到10个原始数据,指定数据维度对应的数据维值为车牌号,其中,5个原始数据中的车牌号为“浙a1xxxx”,另5个原始数据中的车牌号为“浙b1xxxx”,则可以将包含的车牌号为“浙a1xxxx”的原始数据作为一组进行处理得到对应的第一处理数据,将包
含的车牌号为“浙b1xxxx”的原始数据作为一组进行处理得到对应的第一处理数据。
92.当然,按照指定处理逻辑对原始数据进行处理时,也可以按照指定处理逻辑对查询到的所有原始数据一起进行处理,得到对应的第一处理数据,具体方式不限。
93.得到第一处理数据之后,可以按照第一数据结构将所有第一处理数据存储至数据库。第一数据结构包括第一key和第一value,即采用key-value(键-值)的形式存储,其中,第一value进一步采用自定义的hashkey-hashvalue的哈希结构形式存储。
94.具体来说,针对每个第一处理数据,可以确定该第一处理数据的第一key,可以包括处理得到第一处理数据的指定处理逻辑的逻辑标识、对应第一处理数据的原始数据对应的日期、原始数据中指定数据维度对应的数据维值。
95.比如,第一处理数据的第一key为:20180530_model1_浙a1xxxx,20180530即为原始数据对应的日期,浙a1xxxx为原始数据中指定数据维度对应的数据维值,model1为指定处理逻辑的逻辑标识,三者在第一key的顺序不做限定。
96.其中,原始数据对应的日期可以为原始数据的存储时间中的日期,比如,原始数据的存储时间为2018年05月30日15点30分,则可以将2018年05月30日作为对应的第一处理数据的第一key中的日期。
97.同时,还可以确定每个第一key对应的第一value,可以包括依据满足第一key的原始数据的时间区间确定的hashkey与满足hashkey的原始数据所对应的第一处理数据。
98.其中,满足第一key的原始数据即经处理后得到对应的第一处理数据所用的原始数据,而满足第一key的时间区间可以根据原始数据的相关时间信息来确定,比如,以根据原始数据的存储时间为例,可以将这些原始数据的存储时间中的最早存储时间与最晚存储时间之间的时间段确定该时间区间,当然具体不限于此。
99.依据时间区间确定hashkey时,为了便于后续查询,可以按照设定的转换规则对时间区间进行转换,得到hashkey。比如,时间区间为"00:00-00:05",按照设定的转换规则转换后,得到"0-300"作为hashkey。当然,这里的转换只是举例,而且也不是必要的,也可以不进行转换。
100.按照通常的思路,会将第一处理数据单独作为第一value。但是,本发明实施例与上述思路不同,第一value中不仅包含第一处理数据、还包括依据满足第一key的原始数据的时间区间确定的hashkey,并不将hashkey划入第一key中,这样的话,只要逻辑标识、日期与数据维值相同就可以共用相同的第一key,可以减少数据库中的第一key的数量,节省数据库的存储空间,同时有利于在查询时快速定位第一key,提升查询效率。
101.按照第一数据结构将所有第一处理数据存储至数据库时,可以针对每一第一处理数据,在数据库的所有第一数据结构中查找该第一处理数据的第一key,如果查找到,则将第一value存储到第一key对应的位置,否则,可以将该第一处理数据的第一key和第一value作为一个新的第一数据结构存储到数据库中。
102.比如,第一key为20180530_model1_浙a1xxxx,hashkey为"0-300",hashvalue(即第一处理数据)为"5",组成的第一value为"0-300":"5";假设数据库中存储有以下数据:
103.key1:20180530_model1_浙a1xxxx
104.value1:
105.{
106."300-600":"4",
107.……
108.}
109.则在存储第一处理数据时,可以在数据库中查找到第一key(即上述key1),所以,直接将第一value"0-300":"5"存入到key4对应的value1中,更新后的value1如下:
110.value1:
111.{
112."0-300":"5",
113."300-600":"4",
114.……
115.}
116.上述方式中,事实上,是将第一key-第一value作为第一级索引,hashkey-hashvalue作为第二级索引,在查询第一处理数据时,可以先在第一级索引中查找对应的第一value,之后只在查找到的第一value这一第二级索引中查找所需的hashvalue,可以大大提升查询效率。而且,多个value可以对应于同一个key存储,减少了key这部分数据的重复存储,可以节省数据库所需的存储空间。
117.步骤s200中,当接收到查询第一处理数据的请求任务时,依据请求任务在第一数据结构中确定对应的第一目标key和第一目标key对应的第一目标value,并依据所述请求任务在第一目标value中确定出对应的目标hashkey,依据所述请求任务在所述目标hashkey对应的目标hashvalue中查询到对应的目标第一处理数据。
118.请求任务可以由需要中间处理数据的应用发送、或者可以由用户通过设备发送,具体不限于此。
119.可选的,请求任务中可以携带查询范围。查询范围可以包括第一目标key;或可以包括目标逻辑标识、目标日期、目标数据维值,这种情况下,可以由目标逻辑标识、目标日期、目标数据维值组成第一目标key。
120.相应的,依据请求任务在第一数据结构中确定对应的第一目标key时,可以根据请求任务中携带的查询范围从数据库的所有第一数据结构中确定出满足查询范围的第一目标key。
121.当然,此处只是举例,请求任务中也可以携带其他用于确定查询范围的信息,或者通过其他形式来确定查询范围。
122.可选的,请求任务还可以携带目标hashkey。由于第一目标key对应的第一目标value中可以包含多个hashkey-hashvalue,所以,在确定出第一目标key后,可以依据请求任务中携带的目标hashkey从第一目标key对应的第一目标value中确定出目标hashkey。
123.在确定出目标hashkey之后,在hashkey-hashvalue为一对一的情况下,可以直接将目标hashkey对应的目标hashvalue确定为查询到的目标第一处理数据;在hashkey-hashvalue为一对多的情况下,也可以进一步依据请求任务在目标hashkey对应的目标hashvalue中确定出至少一个目标hashvalue作为查询到的目标第一处理数据。
124.比如,继续以上述key1-value1为例,假设第一目标key为20180530_model1_浙a1xxxx,则确定出的第一目标value为"0-300":"5"、及"300-600":"4",假设目标hashkey
为"0-300",则可以将"5"确定为目标第一处理数据。
125.本发明实施例中,可以通过查询原始数据并按照指定处理逻辑对原始数据进行处理得到第一处理数据,按照分为二级索引的第一数据结构来存储第一处理数据,其中,第一级索引为第一key-第一value,第二级索引为hashkey-hashvalue,从而在查询第一处理数据时,可以先依据第一级索引所需的信息(包括逻辑标识、日期、数据维度)查找到第一目标key对应的第一目标value(包括目标hashkey-目标hashvalue),接着再依据第二级索引所需的目标hashkey从对应的目标hashvalue中查询出对应的目标第一处理数据,上述方式中,第一处理数据作为中间处理数据存储在数据库中,在一些应用需要某些中间处理数据时,可以从第一数据结构中找到对应的中间处理数据,可以满足应用对中间处理数据的需求,而且二级索引的形式使得查询效率较高,多个value可以共用同一key,也可以节省数据库的存储空间。
126.此外,值得说明的是,一般来说,相同的原始数据或者不同的原始数据可以按照不同的处理逻辑被处理得到不同的第一处理数据,所以如果不区分处理逻辑,则可能会查询到多种处理逻辑下的第一处理数据,而这对于应用来说非常不友好,因而这些应用可能只需要特定的处理逻辑下的第一处理数据。
127.而本发明实施例中,在存储第一处理数据时,对应的第一key中包含得到第一处理数据所用的指定处理逻辑的逻辑标识,所以,在查询时,可以根据逻辑标识找到特定的处理逻辑下的目标第一处理数据,对于应用来说更为友好。
128.在一个实施例中,在上述的数据查询方法的步骤s100之前,进一步包括以下步骤:
129.s110:当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第二数据结构进行存储;第二数据结构包括第二key和第二value,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值;第二value至少包括满足第二key的原始数据。
130.流计算引擎中可以设置时间窗口触发周期,每个时间窗口触发周期对应一个或多个时间驱动任务,每个时间驱动任务可以被配置有对应的数据类型与数据维度。在同一时间窗口触发周期对应多个时间驱动任务时,这多个时间驱动任务对应的数据类型可以相同,从而同一时间窗口内存储的原始数据可以由多个时间驱动任务进行处理。
131.时间窗口触发周期比如可以为1分钟,即每隔一分钟触发产生一个新的时间窗口,每次触发可以产生一个时间窗口,该时间窗口可以为从当前触发时刻开始持续时长为一个时间窗口触发周期的时间范围。当然,时间窗口触发周期具体不限于此。
132.这里的设定时间窗口可以是最新产生的与被触发的第一时间驱动任务对应的时间窗口。该设定时间窗口的时长比如可以为一分钟、几秒钟或者几分钟,具体时间不限。比如,设定时间窗口可以表示为2018年4月15日5点10分,或者也可以表示为2018年4月15日5点10分0秒—2018年4月15日5点11分0秒,都表示10分这一整分钟的时长,具体表示形式不限。当然,此处的具体时间信息只是举例,并不作为限制。
133.设定时间窗口的产生方式比如可以包括:将触发时刻中的年、月、日、时、分这部分时间信息组成为设定时间窗口。比如,触发时刻为2020年1月7日14点59分0秒,则设定时间窗口可以为2020-01-07-14-59,也可以将其进行一定的转换,当然,具体不限于此。
134.设定时间窗口内接收到外部输入的源数据,比如,从外部数据源中获取到源数据。
获取到的源数据可能异常、或者存在多余的数据维值。一个源数据中可能只有部分数据维度上的数据维值是相应数据类型对应的所有时间驱动任务所需要的,比如,源数据有100个数据维度,而其中只有5个数据维度上的维值是这些时间驱动任务所需要的。
135.因此,为了减少源数据的冗余,以及为了去除异常的源数据,在接收到源数据之后,可以将源数据进行过滤,以得到待存储的原始数据。
136.具体来说,对源数据进行过滤,可以分为以下几步:
137.首先,可以将源数据中无关数据维度上的维值删除,保留有效数据维度上的数据维值;其中,无关数据维度或有效数据维度可以在设置时间窗口触发时刻时对应设置,有效数据维度是对应的时间驱动任务所需的数据维度。
138.接着,可以检查有效数据维度中待筛选数据维度上的数据维值是否符合要求,如果不符合要求,则丢弃该数据;如果符合要求,则继续执行后续步骤;
139.接着,将有效数据维度中待映射数据维度上的数据维值映射成满足要求的数据维值,得到待存储的原始数据。
140.其中,检查有效数据维度中待筛选数据维度上的数据维值是否符合要求时,可以检查待筛选数据维度上的数据维值是否为空,如果否则符合要求,如果是则不符合要求;或者,检查待筛选数据维度上的数据维值是否为异常值,如果否则符合要求,如果是则不符合要求。
141.将有效数据维度中待映射数据维度上的数据维值映射成满足要求的数据维值时,可以从预设的维值映射关系中确定满足要求的数据维值。举例来说,维值映射关系包括:男-man,女-woman,则映射时,可以将“男”映射为“man”等。
142.上述的待筛选数据维度、及待映射数据维度,同样可以在设置时间窗口触发时刻时对应设置,根据对应的时间驱动任务来确定。比如,一个源数据包括a1、a2、a3、a4四个维度,流处理引擎中设置了两个处理相同类型的流数据的时间驱动任务,一个时间驱动任务需要a1这个维度上的维值,另一个时间驱动任务需要a2这个维度上的维值,则有效数据维度可以为a1和a2,待筛选数据维度比如可以为a1,待映射数据维度比如可以为a2,当然,待筛选维度和待映射维度不限于此,两者可以相同,也可以不同。
143.过滤完成后,得到的原始数据可以由至少一个有效数据维度上的数据维值组成,且每一有效数据维度上的数据维值为有效数据维值。当然,如果不考虑数据冗余或异常,也可以不用进行过滤,直接将源数据作为原始数据。
144.在得到原始数据之后,需要将原始数据存储至数据库中,本实施例中,按照第二数据结构存储原始数据。第二数据结构为key-value形式,包括第二key和第二value。
145.其中,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值。第二value至少包括满足第二key的原始数据。
146.这里的数据类型与数据维度可以是设定时间窗口对应的数据类型与数据维度,或者说是被触发的第一时间驱动任务对应的数据类型与数据维度。这里的数据维度对应的数据维值,是指待存储的原始数据中与该数据维度对应的数据维值。
147.数据类型可以根据外部数据源的应用场景而定,比如可以包括:应用在交通监控场合的交通数据类型、应用在门禁控制场合的门禁数据类型等。可选的,在得到原始数据之后,可以检查原始数据的数据类型是否为被触发的第一时间驱动任务对应的数据类型,如
果是,则按照所述第二数据结构存储原始数据。
148.存储原始数据时,可以在数据库中新建表项,将原始数据的第二key和第二value存储在新建的表项中。
149.相应的,步骤s100中,所述在数据库中查询到至少一个原始数据,可以包括:
150.当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型和数据维度,在所述第二数据结构中确定第二目标key,在所述第二目标key对应的第二目标value中查询到对应的原始数据。
151.这里的查询事件比如可以指第一时间驱动任务被触发的事件,当然,也可以是外部触发的用户查询事件,具体不限于此。
152.查询事件对应的目标时间窗口,可以根据查询事件的触发时刻或者被检测到的时刻来确定。查询事件对应的目标时间窗口的数量可以为多个,也可以为一个,具体数量不限,可以根据需要确定。
153.以触发时刻为例,可以先确定比触发时刻早预设时长的目标时刻,根据目标时刻中的指定时间信息确定目标时间窗口。比如,触发时刻为2020年1月7日16点24分0秒,目标时刻可以为2020年1月7日16点19分0秒,指定时间信息比如可以为年、月、日、时、分这些时间信息,最终确定的目标时间窗口比如包括:2020-01-07-16-19、2020-01-07-16-18、2020-01-07-16-17,如此,可以查找到2020年01月07日16点17分0秒到2020年01月07日16点19分59秒内存储的原始数据(这里以秒为单位计算,当然可以以更精确的单位计算)。
154.由于本实施例中,原始数据的存储形式为key-value的形式,所以,在查找时,可以先依据所述目标时间窗口、查询事件对应的数据类型和数据维度确定查找所需的第二目标key。
155.其中,查询事件对应的数据类型和数据维度可以是查询事件中携带的数据类型和数据维度,或者预先为查询事件设置的对应数据类型和数据维度,具体不作限定,只要能够查询到所需的原始数据即可。
156.在确定第二目标key之后,可以在第二数据结构中确定第二目标key。换言之,所述第二目标key是所述第二数据结构中包含所述目标时间窗口、目标时间窗口被配置的对应的数据类型和数据维度的key。
157.当然,如果数据库的所有第二数据结构中不存在该第二目标key,则说明不存在所需查询的原始数据,此时可以返回查询不到原始数据的提示信息。
158.接着,可以在第二目标key对应的第二目标value中查询到对应的原始数据。可选的,在第二数据结构中key-value是一对一的关系时,可以将第二目标key对应的第二目标value确定为查询到的原始数据;或者,在第二数据结构中key-value是一对多的关系时,可以根据查询事件从第二目标key对应的第二目标value进一步查询出所需的原始数据,比如查询事件中可以进一步指示所需的原始数据的其他数据维度上的数据维值等信息,或者也可以直接将第二目标key对应的第二目标value确定为查询到的原始数据。
159.上述方式是原始数据存储与查询的一种可选方式,但不应作为限制,还有其他的方式,下面继续介绍另一种原始数据存储与查询的方式。
160.在一个实施例中,在上述的数据查询方法的步骤s100之前,进一步包括:
161.s120:当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待
存储的原始数据并按照第三数据结构进行存储;第三数据结构包括第一key-value组合和第二key-value组合,第一key-value组合包括第三key和第三value,第三key至少包括所述设定时间窗口、数据类型、数据维度,第三value至少包括满足所述第三key的数据维值;数据维值为与第三key中数据维度对应的数据维值;第二key-value组合包括第四key和第四value,第四key至少包括第三key和第三value,第四value至少包括满足第四key的原始数据。
162.这里的设定时间窗口同样可以是最新产生的与被触发的第一时间驱动任务对应的时间窗口。关于设定时间窗口与源数据过滤的内容,可以参看前述实施例中的描述,在此不再赘述。
163.本实施例与前述实施例不同之处在于,原始数据被存储时所按照的数据结构不同,本实施例中,按照第三数据结构存储原始数据。第三数据结构包括第一key-value组合和第二key-value组合,这两个key-value组合都是key-value的形式,其中,根据第一key-value组合可以确定第二key-value组合中的key,相当于原始数据也是基于二级索引的形式存储的,第一key-value组合作为第一级索引,确定出原始数据的key之后,再在第二key-value组合中确定出原始数据。
164.其中,第一key-value组合包括第三key和第三value。第三key至少包括所述设定时间窗口、数据类型、数据维度,这里的数据类型和数据维度可以是与设定时间窗口对应的数据类型与数据维度,或者说是被触发的第一时间驱动任务对应的数据类型与数据维度。第三value至少包括满足所述第三key的数据维值,这里的数据维值为原始数据中与第三key中数据维度对应的数据维值。
165.第二key-value组合包括第四key和第四value。第四key至少包括第三key和第三value,换言之,基于第三key和第三value可以确定第四key。第四value至少包括满足第四key的原始数据,即当前需要存储的原始数据。
166.具体来说,按照第三数据结构存储原始数据时,可以在所述数据库中查找原始数据的第一key-value组合中的第三key,如果查找到,则判断第三key对应的value中是否存在第三value,如果是,则将原始数据存储到第四key(由第三key和第三value组成)对应的位置,如果否,则将第三value存储到第三key对应的位置处,并将第四key与原始数据对应存储在数据库中;如果未查找到,则在数据库中存储原始数据的第一key-value组合和第二key-value组合。
167.举例来说,数据库中已存储以下第一key-value组合c1:key2和key2对应的value2:
168.key2:1527832800000_bayonetvehiclepass_plateno
169.value2:[
[0170]
{
[0171]“浙a1xxxx”[0172]
},
[0173]
{
[0174]“浙b1xxxx”[0175]
},
[0176]
……
[0177]
]
[0178]
数据库中还存储了以下第二key-value组合c1:key3和key3对应的value3:
[0179]
key3:1527832800000_bayonetvehiclepass_plateno_浙a1xxxx
[0180]
value3:[
[0181]
{
[0182]
"collecttime":1527832815000,
[0183]
"devno":"devno8849",
[0184]
"plateno":"浙a1xxxx"
[0185]
},
[0186]
……
[0187]
]
[0188]
假设:原始数据的第三key为上述key2,即1527832800000_bayonetvehiclepass_plateno,数据维度为plateno,原始数据中与plateno对应的数据维值为"浙a1xxxx",比如原始数据为以下数据d1:
[0189]
{
[0190]
"collecttime":1524567815000,
[0191]
"devno":"devno3579",
[0192]
"plateno":"浙a1xxxx"
[0193]
}
[0194]
则,确定出的第一key-value组合(即第四value)为1527832800000_bayonetvehiclepass_plateno_浙a1xxxx,也就是上述的key3。
[0195]
那么,在存储原始数据时,在数据库的与key2对应的value中可以查找到“浙a1xxxx”,key2与“浙a1xxxx”可以组成key3,接着可以将上述原始数据d1存入到数据库与key3对应的位置处,即将key3对应的value3更新为:
[0196]
value2:[
[0197]
{
[0198]
"collecttime":1527832815000,
[0199]
"devno":"devno8849",
[0200]
"plateno":"浙a1xxxx"
[0201]
},
[0202]
{
[0203]
"collecttime":1524567815000,
[0204]
"devno":"devno3579",
[0205]
"plateno":"浙a1xxxx"
[0206]
},
[0207]
……
[0208]
]
[0209]
更新后的value3在原有数据的基础上,新增了上述原始数据d1。
[0210]
相应的,步骤s100中,所述在数据库中查询到至少一个原始数据,可以包括:
[0211]
当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型、数据维度在所述第三数据结构中确定第三目标key和所述第三目标key对应的第三目标value,并依据第三目标key和第三目标value在所述第三数据结构中确定第四目标key,在所述第四目标key对应的第四目标value中查询到对应的原始数据。
[0212]
查询事件及对应的目标时间窗口的相关内容可以参看前述实施例中的描述内容,相同之处在此不再赘述。确定第三目标key所需的数据类型、数据维度可以携带在查询事件中,当然具体不限于此。
[0213]
本实施例中,由于存储原始数据所按照的第三数据结构是基于二级索引的结构。第一级索引中目标时间窗口、查询事件对应的数据类型、数据维度作为key,数据维值作为value。第二级索引中再用目标时间窗口、查询事件对应的数据类型、数据维度、数据维值作为key,原始数据作为value。
[0214]
而前述实施例中,存储原始数据所按照的第二数据结构是基于一级索引的,直接以目标时间窗口、查询事件对应的数据类型、数据维度、数据维值作为key,原始数据作为value。
[0215]
本实施例相比于上述方式的好处在于,相同的原始数据量的情况下,二级索引中的第一级索引的key相比于一级索引的key数量会少很多,这样可以大大提升查询的效率。
[0216]
在第三数据结构中确定出由目标时间窗口、查询事件对应的数据类型、数据维度组成的第三目标key之后,可以依据第三目标key和第三目标value在所述第三数据结构中确定第四目标key,比如将第三目标key与各第三目标value分别组成一第四目标key,之后可以在所述第四目标key对应的第四目标value中查询到对应的原始数据,比如将第四目标key对应的所有第四目标value确定为查询到的原始数据。
[0217]
通过上述方式,可以实现原始数据的存储与查询,且原始数据按照第三数据结构存储,该第三数据结构事实上是一种二级索引结构,可以实现原始数据的快速查找,同时,时间窗口、数据类型、数据维值相同的原始数据可以使用相同的key,这样可以节省数据库的存储空间。
[0218]
举例来说,第三目标key比如为:
[0219]
1527832800000_bayonetvehiclepass_plateno;
[0220]
该第三目标key也就是前述实施例中数据库中已存储的key2,那么可以在数据库中找到该key2,将该key2对应的value确定为第四目标key,包括:
[0221]
key3:1527832800000_bayonetvehiclepass_plateno_浙a1xxxx;
[0222]
key4:1527832800000_bayonetvehiclepass_plateno_浙b1xxxx。
[0223]
接着,可以将数据库中与第四目标key(即key3和key4)对应的第四目标value确定为查询到的原始数据,数量可以为一个或多个。当然,也可以进一步根据查询事件从第四目标value选择出所需的原始数据,具体不作限定。
[0224]
可选的,为了提升处理效率,查询第三目标key与查询所需的原始数据可以通过不同的线程来实现。具体的,一个线程在数据库中查找到第三目标key后,可以将第三目标key与对应的各第三目标value分别组成第四目标key,并将所有的第四目标key封装成一个虚
拟消息,将虚拟消息存入到已设置的数据队列中;另一个线程在数据队列中存在虚拟消息时,获取虚拟消息并解析出第四目标key,再从数据库中获取第四目标key对应的第四目标value,以得到所需的原始数据。
[0225]
举例来说,虚拟消息的封装格式可以为:
[0226]
{"collecttime":1550461032120,"dataid":"1","datatype":"traffic","record":["1550461020000_traffic_carid_浙a1xxxx",
[0227]
"1550461080000_traffic_carid_浙a1xxxx",
[0228]
"1550461140000_traffic_carid_浙a1xxxx",
[0229]
"1550461200000_traffic_carid_浙a1xxxx",
[0230]
"1550461260000_traffic_carid_浙a1xxxx",
[0231]
"1550461320000_traffic_carid_浙a1xxxx",
[0232]
"1550461380000_traffic_carid_浙a1xxxx",
[0233]
"1550461440000_traffic_carid_浙a1xxxx",
[0234]
"1550461500000_traffic_carid_浙a1xxxx",
[0235]
"1550461560000_traffic_carid_浙a1xxxx",
[0236]
"1550461620000_traffic_carid_浙a1xxxx",
[0237]
"1550461680000_traffic_carid_浙a1xxxx"],"timedriver":true}
[0238]
其中,“"collecttime":1550461032120,"dataid":"1","datatype":"traffic","record"”为头部信息,可以包含虚拟消息的封装时间、数据类型等,“"timedriver":true”为尾部消息,作为用于表示虚拟消息用于时间驱动任务的标识。
[0239]
查询到所需的原始数据后,可以接着执行上述的步骤s100,具体参看前述的实施例,在此不再赘述。
[0240]
在一个实施例中,步骤s100中,所述按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,包括:
[0241]
将查询到的各原始数据进行分组,每一组中的原始数据中指定数据维度对应的数据维值相同,并按照指定处理逻辑对每组原始数据进行处理得到第一处理数据。
[0242]
本实施例中,指定数据维度对应的数据维值优选为:用于表示原始数据所属的目标对象的属性数据维值。当然,具体不做限定。
[0243]
通常来说,在进行数据处理时,属于同一目标对象的数据可以被一起进行处理,因此,本实施例中,按照原始数据中指定数据维度对应的数据维值进行分组,保证每组原始数据属于同一目标对象。
[0244]
以车辆为例,假设原始数据中指定数据维度对应的数据维值为车牌号,如果两个原始数据中的车牌号不同,说明原始数据属于不同的车辆,所以这两个原始数据不能被一起处理,将该原始数据分在不同组中。最终比如可以得到:包含车牌号“浙a1xxxx”的一组原始数据,以及包含车牌号“浙b1xxxx”的一组原始数据,这两组原始数据。
[0245]
由于上述实施例中,在过滤源数据时,保留了源数据中多个时间驱动任务所需处理的数据维度,使得过滤后的同一原始数据可以被多个任务使用,避免为不同任务在数据库中以不同的维度组合多次存储来自同一份源数据的原始数据,可减少数据库中的冗余数据,也减轻数据库的负担。
[0246]
在此情况下,本实施例中,按照指定处理逻辑对每组原始数据进行处理时,可以先根据被触发的第一时间驱动任务确定原始数据中需被处理的数据维度,再按照指定处理逻辑对原始数据中处于确定出的数据维度上的数据维值进行处理。
[0247]
按照指定处理逻辑对每组原始数据进行处理得到第一处理数据之后,可以得到每组原始数据对应的第一处理数据,每组原始数据可以对应一个或多个第一处理数据,具体不作限定。
[0248]
在一个实施例中,步骤s200中所涉及的,原始数据对应的日期是指查询到的原始数据所处的时间窗口对应的日期。
[0249]
在第二数据结构中,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值,所以,原始数据所处的时间窗口可以从第二key中获取,就是第二key中的时间窗口。
[0250]
在第三数据结构中,第一key-value组合中的第三key至少包括所述设定时间窗口、数据类型、数据维度,所以,原始数据所处的时间窗口可以从该第三key中获取,就是第三key中的时间窗口。
[0251]
日期就是时间窗口对应的日期,或者可以说是时间窗口包含的日期,比如,时间窗口为2018年05月30日15点30分,则可以将2018年05月30日作为原始数据对应的日期。
[0252]
在一个实施例中,步骤s200中所涉及的,所述满足第一key的原始数据的时间区间通过以下方式确定:
[0253]
t100:依据满足第一key的各原始数据对应的时间窗口,确定最早的第一时间窗口和最晚的第二时间窗口;
[0254]
t200:从第一时间窗口对应的时间信息中获取指定时间单位对应的第一时间信息;
[0255]
t300:从第二时间窗口对应的时间信息中获取指定时间单位对应的第二时间信息;
[0256]
t400:依据所述第一时间信息、第二时间信息确定满足第一key的原始数据的时间区间。
[0257]
一般来说,基于查询事件可以在数据库中查询到多个原始数据,这些原始数据可以对应于同一个时间窗口或不同时间窗口,这是根据查询事件对应的目标时间窗口的个数而定的。
[0258]
上述的指定时间单位比如可以包括小时、及分钟等。当然还可以包含其他信息,比如还可以包括天。
[0259]
在查询到的原始数据对应于同一个时间窗口的情况下,最早的第一时间窗口和最晚的第二时间窗口为同一个,此时可以从该时间窗口中获取指定时间单位对应的时间信息,根据该时间信息确定满足第一key的原始数据的时间区间。比如,原始数据对应于同一个时间窗口2018年05月30日00点00分,则此时的时间区间可以为“00:00-00:00”。
[0260]
在查询到的原始数据对应于不同时间窗口的情况下,最早的第一时间窗口和最晚的第二时间窗口为不同时间窗口,此时,分别从第一时间窗口和第二时间窗口中获取指定时间单位对应的第一时间信息和第二时间信息,依据所述第一时间信息、第二时间信息确定满足第一key的原始数据的时间区间。比如,最早的第一时间窗口2018年05月30日00点00
分,最晚的第二时间窗口为2018年05月30日00点05分,则此时的时间区间可以为“00:00-00:05”。
[0261]
当然,上述的时间区间的格式不限于此,也可以对上述格式进行转换,比如将"00:00-00:05"转换为"0-300"。
[0262]
可以理解,上述时间区间的确定方式只是优选的方式,具体并不限于此。
[0263]
在一个实施例中,对源数据进行过滤得到待存储的原始数据之后,该方法还包括:
[0264]
依据最近一次存储至数据库的第二处理数据和当前得到的待存储的原始数据确定待存储的第二处理数据并按照第四数据结构存储;所述第四数据结构包括第五key和第五value,第五key至少包括当前得到的待存储的原始数据的时间戳、数据维值,该数据维值为具有所述时间戳的原始数据中指定数据维度对应的数据维值;所述第五value至少包括所述待存储的第二处理数据中满足所述第五key的第二处理数据。
[0265]
流计算引擎中可以预先设置多个数据驱动任务,在对源数据过滤得到待存储的原始数据之后,可以确定该原始数据的数据类型对应的数据驱动任务(下面简称第一数据驱动任务),再按照第一数据驱动任务对应的处理逻辑、并依据该原始数据与第一数据驱动任务对应的上一次处理所得并存储在数据库中的第二处理数据确定待存储的第二处理数据。
[0266]
得到待存储的第二处理数据之后,按照第四数据结构存储该第二处理数据,该第四数据结构同样为key-value的形式,包括第五key和第五value。
[0267]
其中,第五key至少包括当前得到的待存储的原始数据的时间戳、数据维值,这里的时间戳可以包括但不限于原始数据的采集时间,数据维值为原始数据中指定数据维度对应的数据维值,这里的指定数据维度可以是第一数据驱动任务被配置的对应数据维度。当然,第四数据结构中的第五key不限于此,还可以包括指定处理逻辑的逻辑标识等,具体不限。
[0268]
第五value至少包括所述待存储的第二处理数据中满足所述第五key的第二处理数据,可以是依据最近一次存储至数据库的第二处理数据和当前得到的待存储的原始数据确定出的所有第二处理数据。
[0269]
按照第四数据结构存储待存储的第二处理数据之后,后续可以根据第四数据结构从数据库中找出上述的第二处理数据,以便于进行后续处理,或者提供给需要该数据的应用。
[0270]
通过上述基于数据驱动的数据处理方式,可以实现数据的实时处理,并将处理所得的中间处理数据存储在数据库中,在应用需要更具体的中间处理数据时,可以构造相应的key,根据key从数据库中找到对应的中间处理数据,进一步满足应用对中间处理数据的需求。
[0271]
在前述的实施例中,原始数据、第一处理数据及第二处理数据等数据均被存储在数据库中,且随着流数据的不断产生,数据库中的数据量会不断增加,为了防止数据量过大导致数据库溢出,可以采用多粒度的数据删除策略来删除数据库中的数据,更好地实现数据库管理,下面对此进行详细的介绍
[0272]
在一个实施例中,该方法还包括:
[0273]
在指定清理时间到达时,按照如下至少一种方式对所述数据库存储的数据进行清理:
[0274]
方式1:将所述数据库中存储时长超过设定时长的数据删除;
[0275]
方式2:检查所述数据库中已存储的数据量是否超过第一阈值,如果是,依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中存入时间处于所述目标时间段的数据删除,返回检查所述数据库中已存储的数据量是否超过第一阈值;
[0276]
方式3:检查所述数据库中已存储的数据量是否超过第二阈值,如果是,依据当前时间确定过期时间段,将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除。
[0277]
可以理解,在清理时,可以仅执行方式1-3中的一种,或者也可以执行方式1-3中的多种,比如,执行方式1和2、或方式2和3、或方式2和3、或方式1-3,具体不作限定。上述的多粒度的数据删除策略,是指执行方式1-3中的多种的情况,这是优选的情况。
[0278]
本实施例所指的数据,可以包括原始数据、第一处理数据、第二处理数据及相关的数据结构中的其他信息,当然具体不限于此。
[0279]
在一个例子中,可以实时或者周期地执行方式1,检查监控数据库中是否存在存储时长超过设定时长的数据,如果是,则删除。同时,周期地执行方式2,检查所述数据库中已存储的数据量是否超过第一阈值,如果是,依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中存入时间处于所述目标时间段的数据删除,返回检查所述数据库中已存储的数据量是否超过第一阈值。
[0280]
流计算引擎可以为每个数据设置对应的设定时长,不同数据的设定时长可以不同或者相同,具体可根据需要设置。
[0281]
在将数据库中存储时长超过设定时长的数据删除时,还可以检查该数据是否为数据库中某个关键字(key)对应的唯一数据,若是,则可以将关键字从数据库中删除。
[0282]
通过方式1,可以一定程度上减轻数据库的负担,但是,在数据短时间内暴增的情况下,该方式仍无法彻底解决数据库溢出的情况。
[0283]
因而本实施例中,同时还执行了方式2,检查所述数据库中已存储的数据量是否超过第一阈值,如果是,说明数据库中数据量过大,此时,可以确定依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中处于该目标时间段的数据删除,并返回继续执行检查所述数据库中已存储的数据量是否超过第一阈值,直至数据量不超过第一阈值。
[0284]
目标时间段的时长可以为一天,比如,时间段可以为从最早存入的数据的存入时间所在的一整天,具体时长不限。上述的数据量也可以用已存储的数据的大小与数据库的总大小来衡量,具体不做限定。
[0285]
在上述例子中,采用了两种删除策略结合来实现数据库中的数据清理。虽然上述两种删除策略结合可以大大减轻数据库的负担,但是,仍然有可能存在某些时刻数据量超过第一阈值、甚至更大的情况。
[0286]
为此,在另一个例子中,在上述方式1和方式2的基础上,再执行方式3,但是,当按照方式3对所述数据库存储的数据进行清理时,所述指定清理时间是指按照第一数据结构将所有第一处理数据存储至所述数据库之后的时间。
[0287]
换言之,在按照第一数据结构将所有第一处理数据存储至所述数据库之后,开始执行方式3。
[0288]
当然,也可以在按照第二数据结构存储原始数据、按照第三数据结构存储原始数据、或者按照第四数据结构存储第二处理数据之后,执行上述方式3。
[0289]
由于每次存储完数据都会执行上述方式3,所以可以尽量避免数据库溢出,保证数据库的存储性能。
[0290]
方式3中,检查所述数据库中已存储的数据量是否超过第二阈值,如果是,依据当前时间确定过期时间段,将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除,之后,可以返回继续执行检查所述数据库中已存储的数据量是否超过第二阈值的步骤,直至不超过第二阈值。
[0291]
这里的过期时间段根据当前时间确定,是在当前时间之前的时间段。相比于上述的时间段来说,过期时间段的时长可以更长一些,比如可以为5天、10天或一个月等。
[0292]
当然,在将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除时,也可以以随机采样的方式从数据库中处于所述过期时间段的数据中选取若干数据进行删除,具体方式不限于此。
[0293]
在相关数据查询方式中,需要为数据查询进行资源预分配,但是,数据的数据查询会存在高峰期和低谷期,资源预分配在低谷期时会造成资源的浪费,而在高峰期时可能会因资源不足造成处理崩溃的情况。
[0294]
为了解决上述资源不足的问题,本发明不再为上述数据查询进行资源预分配,而是采用下述方式来实现数据(包括原始数据、第一处理数据和/或第二处理数据)的查询:
[0295]
在流计算引擎开始处理之后,获取需处理的任务(包括请求任务、时间驱动任务、数据驱动任务等);检查任务队列是否已满,如果否,则将该任务加入到任务队列中,如果是,可以拒绝该任务;
[0296]
从任务队列中获取任务,检查线程池中是否有空闲线程,若存在,则在该空余线程可用时,将该空余线程分配给获取的任务,以使该空余线程完成该任务,若不存在,则等待一段时间后返回检查线程池中是否有空闲线程的步骤。
[0297]
通过上述方式,可以根据任务的数量多少来自适应分配线程即cpu资源,可以减少资源浪费、或处理崩溃的情况发生。
[0298]
在一个实施例中,可以将数据库设置在分布式存储系统中的每一个服务器上,并且按照相同的划分方式将每个服务器上的数据库划分成n个分库,n与分布式存储系统中服务器的数量相同,并且设置每个服务器的一个分库作为主库,其他服务器各自的一个分库作为该主库对应的从库,不同服务器的主库不同,在数据存储时会选择合适的主库,将数据存储到主库中,后续会将主库中的数据同步到其他服务器的该主库对应的从库中。
[0299]
比如,如图2所示,s1-s3为组成分布式存储系统的三个服务器,三个服务器设置了同一数据库,该数据库被分成三个分库,分别用矩形、三角形、圆形示意,同一形状的分库中的数据应相同。其中,在服务器s1中,矩形为主库,三角形、圆形为从库;在服务器s2中,圆形为主库,矩形和三角形为从库;在服务器s3中,三角形为主库,圆形和矩形为从库。
[0300]
那么,在服务器s3宕机时,可以将服务器s1或s2的三角形切换为主库,由服务器s1和s2来提供数据的存取,如此,后续在服务器s3恢复为主库时,只需将服务器s1或s2的三角形中的数据同步给服务器s3的三角形中,无需对矩形或圆形的数据进行同步,大大减小所需的同步量,也可以保证分布式存储系统的高可用性,某一台或几台服务器宕机后,计算不
受任何影响,也不需要任务回退。
[0301]
本发明还提供一种数据查询装置,在一个实施例中,参看图3,数据查询装置100包括:
[0302]
处理数据存储模块101,用于当在数据库中查询到至少一个原始数据时,按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据,并按照第一数据结构将所有第一处理数据存储至数据库;第一数据结构包括:第一关键字key和第一值value,第一key至少包括指定处理逻辑的逻辑标识、原始数据对应的日期、原始数据中指定数据维度对应的数据维值,第一value被定义为哈希hash结构,hash结构的哈希关键字hashkey依据满足第一key的原始数据的时间区间确定,hash结构的哈希值hashvalue至少包括满足hashkey的原始数据所对应的第一处理数据;
[0303]
处理数据查询模块102,用于当接收到查询第一处理数据的请求任务时,依据请求任务在第一数据结构中确定对应的第一目标key和第一目标key对应的第一目标value,并依据所述请求任务在第一目标value中确定出对应的目标hashkey,依据所述请求任务在所述目标hashkey对应的目标hashvalue中查询到对应的目标第一处理数据。
[0304]
在一个实施例中,该装置进一步包括:第一原始数据存储模块,用于当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第二数据结构进行存储;第二数据结构包括第二key和第二value,第二key至少包括所述设定时间窗口、数据类型、数据维度、所述数据维度对应的数据维值;第二value至少包括满足第二key的原始数据;
[0305]
所述处理数据存储模块在数据库中查询到至少一个原始数据时,具体用于:
[0306]
当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型和数据维度,在所述第二数据结构中确定第二目标key,在所述第二目标key对应的第二目标value中查询到对应的原始数据。
[0307]
在一个实施例中,该装置进一步包括:第二原始数据存储模块,用于当在设定时间窗口接收到外部输入的源数据时,对源数据进行过滤得到待存储的原始数据并按照第三数据结构进行存储;第三数据结构包括第一key-value组合和第二key-value组合,第一key-value组合包括第三key和第三value,第三key至少包括所述设定时间窗口、数据类型、数据维度,第三value至少包括满足所述第三key的数据维值;数据维值为与第三key中数据维度对应的数据维值;第二key-value组合包括第四key和第四value,第四key至少包括第三key和第三value,第四value至少包括满足第四key的原始数据;
[0308]
所述处理数据存储模块在数据库中查询到至少一个原始数据时,具体用于:
[0309]
当检测到查询事件时,确定所述查询事件对应的目标时间窗口;依据所述目标时间窗口、查询事件对应的数据类型、数据维度在所述第三数据结构中确定第三目标key和所述第三目标key对应的第三目标value,并依据第三目标key和第三目标value在所述第三数据结构中确定第四目标key,在所述第四目标key对应的第四目标value中查询到对应的原始数据。
[0310]
在一个实施例中,所述处理数据存储模块按照指定处理逻辑对原始数据进行处理得到各原始数据对应的第一处理数据时,具体用于:
[0311]
将查询到的各原始数据进行分组,每一组中的原始数据中指定数据维度对应的数
据维值相同,并按照指定处理逻辑对每组原始数据进行处理得到第一处理数据。
[0312]
在一个实施例中,所述日期是指查询到的原始数据所处的时间窗口对应的日期;
[0313]
所述满足第一key的原始数据的时间区间通过以下模块确定:
[0314]
时间窗口确定模块,用于依据满足第一key的各原始数据对应的时间窗口,确定最早的第一时间窗口和最晚的第二时间窗口;
[0315]
第一时间信息确定模块,用于从第一时间窗口对应的时间信息中获取指定时间单位对应的第一时间信息;
[0316]
第二时间信息确定模块,用于从第二时间窗口对应的时间信息中获取指定时间单位对应的第二时间信息;
[0317]
时间区间确定模块,用于依据所述第一时间信息、第二时间信息确定满足第一key的原始数据的时间区间。
[0318]
在一个实施例中,所述第一原始数据存储模块或第二原始数据存储模块对源数据进行过滤得到待存储的原始数据之后,还用于:
[0319]
依据最近一次存储至数据库的第二处理数据和当前得到的待存储的原始数据确定待存储的第二处理数据并按照第四数据结构存储;所述第四数据结构包括第五key和第五value,第五key至少包括当前得到的待存储的原始数据的时间戳、数据维值,该数据维值为具有所述时间戳的原始数据中指定数据维度对应的数据维值;所述第五value至少包括所述待存储的第二处理数据中满足所述第五key的第二处理数据。
[0320]
在一个实施例中,该装置还包括:
[0321]
数据清理模块,用于在指定清理时间到达时,按照如下至少一种方式对所述数据库存储的数据进行清理:
[0322]
方式1:将所述数据库中存储时长超过设定时长的数据删除;
[0323]
方式2:检查所述数据库中已存储的数据量是否超过第一阈值,如果是,依据所述数据库中最早存入的数据的存入时间确定目标时间段,将所述数据库中存入时间处于所述目标时间段的数据删除,返回检查所述数据库中已存储的数据量是否超过第一阈值;
[0324]
方式3:检查所述数据库中已存储的数据量是否超过第二阈值,如果是,依据当前时间确定过期时间段,将所述数据库中处于所述过期时间段、且存入时间最接近所述过期时间段起始时间的数据删除。
[0325]
在一个实施例中,当按照方式3对所述数据库存储的数据进行清理时,所述指定清理时间是指按照第一数据结构将所有第一处理数据存储至所述数据库之后的时间。
[0326]
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0327]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元。
[0328]
本发明还提供一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例中所述的数据查询方法。
[0329]
本发明数据查询装置的实施例可以应用在电子设备上。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,图4是本发明根据一示例性实施例示出的数据查询装置100所在电子设备的一种硬件结构图,除了图4所示的处理器510、内存530、接口520、以及非易失性存储器540之外,实施例中装置100所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0330]
本发明还提供一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例中任意一项所述的数据查询方法。
[0331]
本发明可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。机器可读存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。机器可读存储介质的例子包括但不限于:相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0332]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献