基于缓存的高效多源流数据融合方法及系统
- 国知局
- 2024-08-19 14:25:05
本发明属于数据融合,涉及一种基于缓存的高效多源流数据融合方法及系统。
背景技术:
1、数据融合的概念:数据融合是指将不同来源、不同结构的数据整合成一个完整的、全面的数据,以便更全面地、更完整地挖掘事务联系,从而为决策活动提供有力的数据支撑与参考。在实时流场景中,一方面,数据来源可能来自不同的传感器、设备、应用程序、数据库等不同的渠道;另一方面,数据的结构形式也不尽相同,有数值型、文本型、图像型等,这些数据被称为多源异构数据。如何在实时流场景中,将多源异构数据进行高效地融合是一个亟待解决的问题。
2、传统场景的做法:在传统做法中,不同源的数据通常会存储在关系型数据库(如mysql(关系型数据库管理系统))的不同表中。在需要进行数据融合时,会通过sql(structured query language,数据库语言)语句进行多表联合查询,来获取磁盘中的数据,并进行拼接。这种情况下,mysql会执行全表扫描,如果数据量比较大的话,连接两张表也会产生大量的结果集。读取磁盘、全表扫描等都会导致数据融合的效率较低。
3、实时流场景的难点:在实时流场景中,系统往往需要有较高的实时性。同时,实时流场景实现数据融合的难点在于:不同源数据产生的时间、地点不同,而且数据的传输受到网络因素的影响,所以到达系统的时间大概率不是同时的,会有先后顺序。这就需要设计一种有效且高效的方法,对实时数据进行融合,以提高系统的时效性。
4、为了提高效率,通常的做法是将数据存入关系型数据库改进为存入缓存数据库中。缓存数据库相较于关系型数据的优点在于:缓存数据库的设计目标是快速读取,其使用的数据结构基于内存,在查询时会更加高效。常用的缓存数据库有redis(remotedictionary server,即远程字典服务)、memcached(分布式的高速缓存系统)、varnish(高性能的开源http加速器)。memcached主要支持简单的键值对数据结构,通常用于比较简单但需要高性能的场景。varnish是一种http缓存代理,主要用于缓存静态web内容,专注于提高web服务器的性能、减轻服务器的负载。redis支持多种数据结构,具有极高的性能,也有缓存、消息队列等多种用途,能为系统带来更高的扩展性,所以也是目前最为常用的一种缓存数据库。redis以键值对的形式存储数据,在读写速度方面有着明显的性能优势。因此,可以用redis替换传统的关系型数据库,对数据进行缓存,在其他数据到达系统时直接查询redis中是否有与之匹配的数据,如果有,就进行拼接,从而达到进行高效数据融合的目的。
5、redis缓存的核心在于key值的设计。不同场景中,通过不同key值的设计,可以达到不同的目的。例如,在公开号为cn111666305b的中国发明专利中,通过主键、查询的表名等的组合来设计key值,实现了redis缓存和数据库的自动关联;在公开号cn 109241111b的中国发明专利中,将从人脸图片中提取到的特征值作为key值保存在redis中,以便kafka快速保存和读取,提高了服务器的处理能力。在流数据融合领域,如何设计key值,以便实现高效的数据融合,是重点要解决的问题。
6、公开号为cn110232074b的中国发明专利为了解决“单个缓存容量有限,且在查询数据时会有较高的负载压力”的问题,提出了一种将数据进行分流,存在多个本地缓存中的方法,实现了通过较小的缓存空间实现数据的全量缓存,同时也提高了数据关联的效率。但这种方法主要针对将实时数据和关系型数据库中的静态数据进行融合,无法做到纯实时数据的动态融合。
7、公开号为cn116070171a的中国发明专利为了解决“数字孪生各子系统间差异较大,每个子系统的数据对接都需要定制化开发”的问题,提出了一种基于flink的孪生数据融合平台。但这种方法是先将都保存到kafka服务中,然后利用flink统一从kafka中读取数据,再进行融合,无法查询融合进度,且时效性不强。公开号为cn112035530a的中国发明专利为了解决“现有分布式平台报文匹配灵活性较低、时效性不足”的问题,提出了一种基于配置和缓存特征值机制的报文匹配方法。但这种方法仅支持具有相同报文结构的报文进行匹配,灵活性较差。
技术实现思路
1、本发明的目的在于提供一种基于缓存的高效多源流数据融合方法及系统,实现流数据的实时查询和融合,并提高融合效率。
2、为了达到上述目的,本发明的基础方案为:一种基于缓存的高效多源流数据融合方法,包括如下步骤:
3、根据报文功能的不同,将报文划分为普通报文和关联关系报文;
4、根据键值设计方式的不同,将远程字典服务(redis)中的表分为:匹配关系缓存表、唯一标识缓存表、报文缓存表和匹配进度表,其中,针对每种被匹配的报文类型,预先将它和匹配报文类型的匹配关系存入redis的匹配关系缓存表中;
5、当匹配报文到达时,为每一个报文分配一个唯一标识,并将报文存入唯一标识缓存表、报文缓存表和匹配进度表;
6、自匹配关系缓存表中查找与报文匹配的报文类型,若报文类型匹配,则将报文的唯一标识存入匹配进度表,更新匹配进度;
7、判断多个报文是否完全匹配,若是则遍历每种匹配报文类型的唯一标识列表,根据唯一标识从唯一标识缓存表中取出报文内容,然后将报文内容依次与当前关联关系报文拼接,融合为完整的报文。
8、本基础方案的工作原理和有益效果在于:本技术方案利用redis提高流式数据融合效率,基于redis的高效多源流数据融合方法,通过设计不同形式的键值利用redis对流数据缓存,达到实时查询和融合的目的。
9、本发明能够实现数据的动态融合,在系统运行的过程中,每一个数据到达系统都经过匹数据匹配操作,一旦找到能够匹配的报文,数据匹配模块立刻进行匹配,这种动态融合的特性,保证了系统能够对数据进行实时处理,以达到提高进行高效融合的目的。
10、在融合过程中,本发明支持不同结构的报文,本发明不对数据做种类做限制,各种领域的存在匹配关系的实时流数据都适用的,并且,在匹配过程中,匹配关系是动态定义的,因此两两匹配的报文之间可以具有不同的报文结构。
11、进一步,将被匹配的报文类型和匹配报文类型的匹配关系,存入redis的匹配关系缓存表的存储过程是双向的,即当类型a报文和类型b报文有匹配关系时,需要在redis中存储两条数据,一条数据将a作为被匹配报文类型,b作为匹配报文类型;一条数据将b作为被匹配报文类型,a作为匹配报文类型;
12、在报文匹配关系中,分为单条件匹配和多条件匹配,对于单条件匹配关系,被匹配报文类型与匹配报文类型之间是否匹配通过一组字段值是否相等唯一确定;
13、对于多条件匹配关系,被匹配报文类型与匹配报文类型之间是否匹配通过多组字段值是否相等共同确定,多个条件之间通过逻辑与运算连接或者逻辑或运算连接。
14、针对每种被匹配报文类型,预先将它和匹配报文类型的匹配关系存入redis的匹配关系缓存表中,便于后续查询。
15、进一步,报文存入唯一标识缓存表时,唯一标识缓存表的key值为报文的唯一标识,value为报文的每个字段和字段的值。
16、将报文的唯一标识存入对应的缓存表内,利于匹配。
17、进一步,报文存入报文缓存表时,根据报文的类型标识字段得到报文的类型名;
18、通过报文的类型名,在匹配关系缓存表中查找报文所有会发生匹配的匹配字段;
19、对于每个匹配字段,将报文类型名.匹配字段名@字段值作为key值,当前报文唯一标识作为value的一部分存入redis的报文缓存表中,其中value是一个列表,存储该key对应的所有报文的唯一标识。
20、获取报文的类型名,以便确定报文匹配关系。
21、进一步,报文存入匹配进度表时,根据报文的类型标识字段,判断当前报文是否为关联关系报文,如果是,将报文类型名@唯一标识作为key存入匹配进度表的value表中,其中value表存储该关联关系报文和其匹配的报文;
22、从匹配关系缓存表中取出会与关联关系报文匹配的所有报文类型,然后填入匹配进度表的value表的key中,并将value全部设置为空,表示关联关系报文与这些报文类型均未发生匹配。
23、将报文对应存入匹配进度表,可实时获取匹配进度。
24、进一步,自匹配关系缓存表中查找与报文匹配的报文类型,若报文类型匹配,则将报文的唯一标识存入匹配进度表,更新匹配进度的方法如下:
25、s1,取出被匹配报文类型.匹配字段名@字段值中的字段值,并将该字段值作为匹配报文类型.匹配字段名@字段值中的字段值,作为待查询key值;
26、s2,在redis的报文缓存表中查找待查询key值是否存在,如果存在,说明被匹配报文类型与匹配报文类型匹配成功,将匹配报文类型.匹配字段名@字段值对应的value,即存放报文唯一标识的列表取出,并执行步骤s3;如果不存在,则重新回到步骤s1,进行下一个报文类型的匹配;
27、s3,将得到的唯一标识列表存入匹配进度表,将关联关系报文类型名@报文唯一标识作为匹配进度表的key,将匹配进度表的value表中的匹配报文类型key对应的value赋值为得到的唯一标识列表。
28、每一种报文会存在若干种匹配报文类型,从匹配关系缓存表中找出与之匹配的报文类型,并在匹配后更新匹配进度,确保匹配准确。
29、进一步,判断多个报文是否完全匹配的方法如下:
30、每当匹配进度表的某个key值发生更新时,就判断这个关联关系报文是否和所有其他类型的报文都发生了匹配关系;
31、当发生变化的key值所对应的value表中所有匹配报文类型key的value值均不为空时,即均为一个列表时,则报文实现完全匹配。
32、判断报文是否完全匹配,以便后续融合。
33、本发明还提供一种执行本发明所述方法的基于缓存的高效多源流数据融合系统,包括匹配关系建立模块和实时处理模块,所述实时处理模块与匹配关系建立模块连接。
34、利用本系统,通过redis实现多源流数据融合,提高融合效率。
35、进一步,所述匹配关系建立模块包括匹配关系抽取模块和匹配关系缓存模块,所述匹配关系抽取模块用于将每种被匹配的报文类型和匹配报文类型的匹配关系存入匹配关系缓存模块中。
36、通过匹配关系建立模块预先建立匹配关系,便于后续使用。
37、进一步,所述实时处理模块包括依次连接的数据输入模块、数据匹配模块和数据拼接模块;
38、所述数据输入模块包括唯一标识分配模块、唯一标识缓存模块、报文缓存模块、报文类型判断模块和匹配进度缓存模块;当匹配报文到达时,报文类型判断模块从匹配关系缓存模块获取匹配报文类型;唯一标识分配模块为每一个报文分配一个唯一标识,并将报文存入唯一标识缓存模块、报文缓存模块和匹配进度缓存模块;唯一标识缓存模块存储每个报文对应的唯一标识符和该报文的具体内容,所述内容包括每个字段和字段值,用于快速查询某个唯一标识对应的报文的具体内容;报文缓存模块存储报文的类型名,该报文所有会发生匹配的字段以及当前报文唯一标识,用于快速查询某个报文的匹配报文是否已缓存到redis中;匹配进度缓存模块存储某个关联关系报文目前已经匹配了哪几种报文;
39、所述数据匹配模块包括匹配报文类型查询模块、待查询键值构造模块、待查询键值查询模块和匹配进度更新模块;所述匹配报文类型查询模块自匹配关系缓存模块中查找与报文匹配的报文类型;待查询键值构造模块获取被匹配报文类型的字段值作为待查询键值;待查询键值查询模块在redis的报文缓存模块中查找待查询待查询键值是否存在,如果存在,被匹配报文类型与匹配报文类型匹配成功,则将报文的唯一标识存入匹配进度更新模块,更新匹配进度;
40、所述数据拼接模块包括匹配进度查询模块和报文拼接模块,所述匹配进度查询模块判断多个报文是否完全匹配,若是则遍历每种匹配报文类型的唯一标识列表,根据唯一标识从唯一标识缓存模块中取出报文内容,所述报文拼接模块将报文内容依次与当前关联关系报文拼接,融合为完整的报文。
41、实时处理模块结构简单,对数据进行依次处理,获取完整的报文。
本文地址:https://www.jishuxx.com/zhuanli/20240819/275130.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。