CN110232074A - 流数据与维表关联方法及流计算装置 - Google Patents
流数据与维表关联方法及流计算装置 Download PDFInfo
- Publication number
- CN110232074A CN110232074A CN201910472904.7A CN201910472904A CN110232074A CN 110232074 A CN110232074 A CN 110232074A CN 201910472904 A CN201910472904 A CN 201910472904A CN 110232074 A CN110232074 A CN 110232074A
- Authority
- CN
- China
- Prior art keywords
- data
- value
- dimension table
- processing unit
- local cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种流数据与维表关联方法及流计算装置,该装置包括数据采集单元和多个处理单元,各处理单元分别与join key的不同值对应。每个处理单元的本地缓存存储有预设维表的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配。数据采集单元将获得的数据流划分为多个子流,并将每个子流发送给其join key的值对应的处理单元。处理单元根据子流的数据记录的join key的值从本地缓存中匹配维表数据,若匹配到,则将所匹配到的维表数据与该数据记录关联。如此,可以通过较小的缓存空间实现维表数据的全量缓存,提高了join性能。
Description
技术领域
本申请涉及大数据技术领域,具体而言,涉及一种流数据与维表关联方法及流计算装置。
背景技术
在流计算中,通常由数据采集单元从外部数据源采集数据流,并分发给处理单元进行处理和分析。然而,数据采集单元采集的数据往往比较有限,因此在进行分析前,需要将数据流与维表中的数据进行关联(join,又称“连接”),以获得相对完整的数据。
相关技术中,通常由数据采集单元获取维表的全量数据并保存到缓存数据库中,当数据流到达任一处理单元时,该处理单元先从对应的本地缓存中查询与数据流的joinkey匹配的维表数据记录,如果没有查询到,则从缓存数据库中查询与数据流的join key匹配的维表数据记录,将查询到的维表数据记录与数据流进行join,并将查询到的维表数据记录拉取到该处理单元对应的本地缓存保存。
但是,本地缓存的容量是有限的,当维表体量很大时,本地缓存存储的维表数据记录相较于整个维表数据非常少,处理单元仍将大量地访问缓存数据库,一方面导致join性能降低,另一方面可能导致缓存数据库瘫痪。
发明内容
为了至少部分地克服现有技术中的上述不足,本申请的目的之一在于提供一种流数据与维表关联方法,应用于基于流式计算框架的流计算装置,所述流计算装置包括数据采集单元和多个处理单元,所述多个处理单元分别与关联键join key的不同值对应,每个处理单元具有本地缓存;所述方法包括:
所述数据采集单元获得数据流,根据所述数据流中的各数据记录各自包含的joinkey的值将所述数据流划分为多个子流,并将每个子流发送给与该子流的join key的值对应的处理单元;
接收到所述子流的处理单元从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据;其中,该处理单元的本地缓存存储有预设维表中的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配;
若存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则将所述匹配的维表数据和所述子流中的所述数据记录相关联。
本申请的另一目的在于提供一种流计算装置,基于流式计算框架,该流计算装置包括数据采集单元和多个处理单元,所述多个处理单元分别与关联键join key的不同值对应,每个处理单元具有本地缓存;
所述数据采集单元,用于获得数据流,根据所述数据流中的多条数据记录各自包含的join key的值将所述数据流划分为多个子流,并将每个子流发送给与该子流的joinkey的值对应的处理单元;
接收到所述子流的处理单元,用于:从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据;其中,该处理单元的本地缓存存储有预设维表中的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配;若存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则将所述匹配的维表数据和所述子流中的所述数据记录相关联。
相对于现有技术而言,本申请实施例具有以下有益效果:
本申请实施例提供的一种流数据与维表关联方法及流计算装置,该流计算装置包括数据采集单元和多个处理单元,各处理单元分别与join key的不同值对应。每个处理单元的本地缓存存储有预设维表的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配。数据采集单元将获得的数据流划分为多个子流,并将每个子流发送给与该子流的join key的值对应的处理单元;接收到子流的处理单元根据该子流的数据记录的join key的值从本地缓存中查找是否存在匹配的维表数据,若存在匹配的维表数据,则将该匹配的维表数据与该数据记录关联。如此,可以通过较少的本地缓存空间实现维表数据的全量缓存,从而提高join性能。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种流计算装置的架构示意图;
图2为本申请实施例提供的一种流数据与维表关联方法的流程示意图;
图3为本申请实施例提供的流计算装置的又一架构示意图;
图4为本申请实施例提供的流数据与维表关联方法的又一流程示意图;
图5为本申请实施例提供的流数据与维表关联方法的又一流程示意图。
图标:10-流计算装置;11-数据采集单元;12、13、14-处理单元;20-缓存数据库;302、303、304-本地缓存。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
请参照图1,图1是本申请实施例提供的一种流计算装置10的架构示意图。所述流计算装置基于流式计算框架实现,所述流式计算框架例如可以是JStorm、Storm、SparkStreaming或Flink等,本实施例对此没有限制。
所述流计算装置10可以部署在多个物理机(例如,服务器或主机)上,所述多个物理机组成一个集群。所述多个物理机通常可以包括主控节点和工作节点,其中,主控节点和工作节点分别通过相应的守护进程进行监控和管理。例如,JStorm的主控节点上运行有Nimbus守护进程,工作节点上运行有Supervisor守护进程,Supervisor守护进程可以监听所在工作节点分配到的作业(例如,Job或Topology)。
在实际应用中,针对每个流计算任务场景,通常会将该任务场景的流计算作业提交给流计算装置10。针对该流计算作业,流计算装置10会在工作节点上创建多个计算逻辑组件,所述多个计算逻辑组件可以包括数据采集单元11和多个处理单元。其中,所述多个处理单元例如可以是图1所示的12、13和14。
其中,所述数据采集单元11是流计算装置10的数据来源,用于从外部数据源获取数据并分发给相应的处理单元处理,例如,可以从消息队列、数据库等读取数据。每个处理单元用于对接收到的数据流进行处理(例如,计算、过滤等),并输出处理结果,或将处理结果发送给下一处理单元继续处理。其中,每个处理单元具有对应的本地缓存(LocalCache),例如图1所示的处理单元12具有对应的本地缓存302,处理单元13具有对应的本地缓存303,处理单元14具有对应的本地缓存304。
其中,每个处理单元对应的本地缓存位于运行该处理单元的物理机上。可选地,所述本地缓存可以是LRU(Least Recently Used,最近最少使用)类型的缓存。考虑到最近被使用过的数据在将来被使用的几率通常比较高,LRU类型的缓存将最新获取的数据放置在最前面,以便后续过程中能快速查找到该数据。
例如,在JStorm中,针对每个流计算任务场景,会预先设计一个用于实时计算的图状结构,该图状结构称为拓扑(Topology)。所述拓扑会被提交给JStorm集群,由JStorm集群中的主控节点进行划分得到多个任务,并将该多个任务分配给相应的工作节点执行。其中,一个拓扑包括spout和bolt两种角色,spout可以充当本实施例中的数据采集单元11,bolt可以充当本实施例中的处理单元。
在流计算装置10中,通常会将数据流划分成特定的单位数据进行处理。具体地,流计算装置10中的数据采集单元11在接收到数据流时,会将数据流截取成多个单位数据,再将该多个单位数据分别发送给相应的处理单元进行处理。示例性地,在JStorm中,可以将数据流划分成多个tuple(元组)来处理;在Spark Streaming中,可以按照时间间隔将数据流切分为多段,每段称为一个批处理作业(DiscretizedStream,DStream),然后再对多个批处理作业分别进行处理;在Samza中,可以将数据流切分成多条消息再分别进行处理。
在实际应用中,鉴于数据采集单元11能够获取的数据有限,数据流中的数据记录可能是不完整的。因此,通常需要将数据流中的数据记录与维度表(后称“维表”)中的数据记录进行关联(join)。例如,假定数据流中的数据记录包括字段A、字段B和字段C,预设维表中的数据记录包括字段A和字段D。那么,为了获得字段D的数据,可以将数据流中的数据记录和预设维表中的数据做关联。
假定,数据流中的两条数据记录如下:
A | B | C | |
item1 | a1 | b1 | c1 |
item2 | a2 | b2 | c2 |
预设维表中的一条数据记录如下:
A | D | |
item3 | a1 | d1 |
在此示例中,通常可以以共有的字段A为关联字段,该关联字段又称关联键或连接键(join key)。由于数据流中数据记录item1的字段A与预设维表中item3的字段A的值相同,均为a1,因此可以将item1和item3关联,得到如下所示的数据记录:
A | B | C | D |
a1 | b1 | c1 | d1 |
经研究,在对数据流与维表进行join的过程中,通常需要关注以下几点:
a.对维表数据库的并发读压力;
b.读维表数据对数据流的吞吐速度的影响;
c.动态维表更新和一致性问题;
d.如何确保数据流到达处理单元时,该处理单元已经获得了与该数据流的数据记录进行join所需的全部维表数据;即:如何确保数据流流经处理单元时,相应的维表数据已经就绪;
e.维表体量多大所导致的流量抖动和频繁的GC(Garbage Collection,垃圾回收)。
为了改善以上问题中的至少部分,本申请实施例提出一种应用于所述流计算装置10的流数据与维表关联方法,下面将对该内容进行阐述。
请参照图2,图2是本申请实施例提供的一种流数据与维表关联方法的流程示意图,该方法可以应用于图1示出的流计算装置10。下面将对该方法的各个步骤进行描述。
步骤21,所述数据采集单元11获得数据流,根据所述数据流中的各数据记录各自包含的join key的值将所述数据流划分为多个子流,并将每个子流发送给与该子流的joinkey的值对应的处理单元。
其中,数据流是一个无限的数据序列,其中包含多条数据记录,每条数据记录包括多个字段的值。例如上述的数据记录item1包括字段A的值a1、字段B的值b1以及字段C的值c1。
在本实施例中,可以根据需求预先确定用作join key的字段,例如上述示例中可以确定字段A为join key。可选地,join key可以包括一个字段或多个字段。
在实施时,可以在所述数据采集单元11中配置所需获取的数据流以及后继订阅所述数据流的处理单元,使得所述数据采集单元11在获得所述数据流时将所述数据流中的数据分发给订阅所述数据流的处理单元。此外,还可以在所述数据采集单元11中配置所述数据流的流向控制策略,使得所述数据采集单元11在获得所述数据流时基于该流向控制策略来对所述数据流中的数据进行分发。
在本实施例中,对所述流向策略没有限制,只要能够使得数据采集单元11按照步骤21中描述的方式对数据流进行划分及对划分得到的子流进行分发即可。
详细地,数据流中不同数据记录的join key的值通常不同,例如上述示例中,item1的字段A的值为a1,item2的字段A的值为a2。换言之,joinkey可以具有不同值。
在一种实施方式中,可以预先将join key的不同值划分为多个key组,每个key组包括至少一个值,并且各个key组中的值各不相同;再在数据采集单元11中进行配置,使得所述多个key组与所述多个处理单元分别对应。在此情况下,当数据采集单元11接收到数据流时,可以将数据流中join key的值属于同一key组的数据记录划分到一个子流中,从而得到多个子流。其中,得到的所述多个子流与所述多个key组分别对应,相应地,所述多个子流也与所述多个处理单元分别对应。
对于每个子流,数据采集单元11可以将该子流抽象成多个单位数据,再将每个单位数据发送给与该子流对应的处理单元。
在又一种实施方式中,可以预先确定与所述多个处理单元分别对应的多个哈希值,并在数据采集单元11中记录所述多个哈希值与所述多个处理单元的对应关系。在实施时,数据采集单元11在获得数据流时,对数据流中的各数据记录的join key的值分别做哈希,将得到的哈希值相同的数据记录划分到一个子流中,从而得到多个子流。其中,所述多个子流与所述多个哈希值分别对应,相应地,所述多个子流与所述多个处理单元分别对应。
如此,针对每个子流,所述数据采集单元11可以将该子流中的数据记录抽象成多个单位数据,再将每个单位数据发送给与该子流的join key的值对应的处理单元。
应当理解,还可以按照其它方式来配置数据采集单元11中的流向控制策略,本实施例对此没有限制。
在本实施例中,每个处理单元的本地缓存存储有预设维表的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配。其中,值得说明的是,不同处理单元的本地缓存中存储的是所述预设维表中的维表数据的不同部分。
仍以上述字段A是join key为例,假设字段A可能的值有a1、a2、a3、a4、a5和a6。其中,与处理单元12对应的join key的值有a1、a2和a3,则所述预设维表中字段A为a1、a2或a3的数据记录均存储于处理单元12的本地缓存中;与处理单元13对应的join key的值有a4和a5,则所述预设维表中字段A为a4或a5的数据记录均存储于处理单元13的本地缓存中;与处理单元14对应的join key的值有a6,则所述预设维表中字段A的值为a6的数据记录存储于处理单元14中。
值得说明的是,在实际应用中,所述预设维表中各个数据记录的join key的值的分布情况与数据流可能不同。比如,上述示例中,所述预设维表中可能只包括字段A的值分别为a1、a2、a4、a5以及a6的数据记录,而并不包括字段A的值为a3的数据记录。在此情况下,处理单元12的本地缓存中将只存储有:所述预设维表中字段A的值为a1的数据记录,以及字段A的值为a2的数据记录。处理单元13的情况类似,在此不再赘述。
为了提高读取效率,请参照图3,可以将维表数据从所述预设维表的存储源(例如,Mysql、Oracle、HBase等)同步到一预设的缓存数据库20(例如,Redis)中,再由各个处理单元从该缓存数据库20拉取所需的维表数据并保存到本地缓存中。如此,一方面可以提高处理单元的本地缓存加载维表数据的速度,另一方面可以确保本地缓存中的维表数据与所述预设维表中的维表数据的一致性,即可以改善前述的问题c。
具体地,可以通过一个流计算作业来负责从所述预设维表的存储源获取数据并同步到预设的缓存数据库20中,然后再由各个处理单元从缓存数据库20中将所需的维表数据拉取到本地缓存中存储。因此,本实施例提供的流数据与维表关联方法还可以包括如图4所示的步骤。
步骤41,所述数据采集单元11周期性地从所述预设维表的存储源同步维表数据到预设的缓存数据库20中。
步骤42,每个处理单元周期性地从所述缓存数据库20存储的维表数据中,获取与该处理单元对应的join key的值匹配的部分维表数据存储到本地缓存中。
在实施时,每个处理单元可以记录有其对应的join key的值。为便于描述,在此将处理单元对应的join key的值称为“目标值”。
在所述流计算装置10启动时,每个处理单元可以每隔第三预设时长从所述缓存数据库20中查询join key的值与该处理单元的目标值相同的维表数据记录,并将查询到的维表数据记录拉取到本地缓存中存储。
其中,数据采集单元11执行步骤31的周期和处理单元执行步骤32的周期可以根据所述预设维表中的数据发生变化的频率进行灵活设定,两者可以相同,也可以不同,本实施例对此没有限制。值得说明的是,维表数据的更新频率通常较慢,数据采集单元11通常不会频繁地访问所述预设维表,处理单元也通常不会频繁地访问所述缓存数据库,因此,步骤31和步骤32不会对缓存数据库20或预设维表造成并发读压力。
步骤22,接收到所述子流的处理单元从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据。
步骤23,若存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则将所述匹配的维表数据和所述子流中的所述数据记录相关联。
在本实施例中,处理单元接收到的通常是从某一子流中抽象出的各个单位数据,每个单位数据可以包括一条或多条数据记录。为便于描述,在后文中,将数据流中的数据记录称为“流数据记录”,将所述预设维表中的数据记录称为“维表数据记录”。
在实施过程中,任一处理单元在接收到所述子流的每一流数据记录时,处理单元可以从其本地缓存中查找是否存在join key的值与该流数据记录相同的维表数据记录。如果存在,则确定该维表数据记录与该流数据记录的join key的值匹配,进而将该维表数据记录和该流数据记录进行join。
其中,与所述子流中的各流数据记录的join key的值分别匹配的维表数据记录,即为步骤23中与所述子流中的数据记录的join key的值匹配的维表数据。
通过上述设计,根据join key分别对数据流和预设维表进行分区,每个处理单元用于进行一个分区的数据的join操作,从而能够在减少每个处理单元的本地缓存所需存储的维表数据的情况下,通过各个处理单元的本地缓存的配合实现对维表数据的全量缓存。如此,一方面可以不必频繁地读取维表数据库20,从而能够避免前述的问题a和b;另一方面,由于每个处理单元的本地缓存只需存储预设维表的一部分数据,数据量较少,因此基本可以确保当数据流到达处理单元时,该处理单元已经获得了进行join所需的维表数据,从而可以避免前述的问题d。
进一步地,在现有技术的一些场景中,数据采集单元11获取预设维表的全部数据,并广播给各个处理单元,这种方式在分发过程中会产生大量数据存储到消息队列中,拖慢处理速度;并且,所产生的这些数据均需要存储在相应的临时对象中,也就涉及到对这些临时对象的释放,从而导致业务抖动及频繁GC。相较于这种方式,通过本实施例的上述设计,可以减少数据采集单元11向各个处理单元发送的维表数据的量,从缓解了业务抖动和频繁GC的问题。换言之,本实施例提供的流数据与维表关联方法能够改善前述的问题d。
此外,在现有技术的一些场景中,如果维表体量大且join key的值较为分散,按照现有的方式对数据流和维表数据进行join,可能会出现如下情况:以join key是前述的字段A为例,字段A的值为a1的单位数据可能被发送给若干处理单元处理,此时这些处理单元都需要从所述预设维表(或缓存数据库20)中查询字段A的值为a1的维表数据记录。换言之,会增加本地缓存交替更新的频率,降低本地缓存的效益,同时还会对缓存数据库20或预设维表造成冲击。相较于此,本实施例提出的流数据与维表关联方法中,通过按照join key的值对数据流和所述预设维表的数据进行分区,改善了前述问题。
如上描述的,对于某些join key的值,所述预设维表中可能没有存储与该值匹配的维表数据记录,对应地,处理单元的本地缓存中也不会存储有与这些值对应的维表数据记录。那么,当处理单元接收的子流中包含这些join key的值时,将无法查找到匹配的维表数据。
为了避免处理单元进行无效的查找操作,请参照图5,本实施例提供的流数据与维表关联方法还可以包括步骤51至步骤53。
步骤51,接收到所述子流的处理单元从本地缓存记录的未命中的值中,查找是否存在所述数据记录的所述join key的值。若否,再执行步骤22。若是,则可以执行步骤53。
步骤52,若所述本地缓存中不存在与所述子流中的数据记录的join key的值匹配的维表数据,则在该本地缓存中将所述数据记录的join key的值记录为未命中的值(misskey)。
步骤53,结束对所述数据记录的处理。
其中,未命中的值是指无法在处理单元的本地缓存中匹配到维表数据的join key的值。本实施例中,每个处理单元一旦无法从本地缓存中查找到与接收的流数据记录的join key的值匹配的维表数据记录,就在本地缓存中将该流数据记录的join key的所述值记录成未命中的值。换言之,每个处理单元的本地缓存中存储有所有未命中的值(在此称为all miss key)。当任一处理单元接收到子流中的任一单位数据时,可以先检查该单位数据中的数据记录的join key的值,是否位于该处理单元的本地缓存所记录的all misskey中。如果是,表示该处理单元的本地缓存中没有存储与该join key的值匹配的维表数据,即:该join key的值是无效的,可以不必再进行后续的处理过程,从而可以减少不必要的查找操作。
考虑到对于某些未命中的值(以x为例),随着时间的推移,所述预设维表中可能已经包含有与该未命中的值x匹配的维表数据记录,并被拉取到特定处理单元的本地缓存中存储。但是,该特定处理单元记录的all misskey中此时还包括该未命中的值x,从而不会进行后续的处理。
为了改善以上问题,可以为每个处理单元的本地缓存中记录的all misskey设置相应的失效时间。对应地,所述流数据与维表关联方法还可以包括以下步骤:
每个处理单元每间隔预设时长删除本地缓存记录的未命中的值。
通过以上步骤,可以使得各处理单元中记录的all miss key与该处理单元对应的本地缓存中维表数据的实际情况相符合。
综上所述,本实施例提供一种流数据与维表关联方法及流计算装置,流计算装置的数据采集单元根据join key将数据流划分成多个子流,使得每个子流中的各数据记录的join key的值与相同的处理单元对应,并将每个子流发送给对应的处理单元;接收到子流的处理单元根据该子流的数据记录的join key的值从本地缓存中查找是否存在匹配的维表数据,若存在匹配的维表数据,则将该匹配的维表数据与该数据记录关联。如此,一方面提高了数据流与维表数据进行join的效率,另一方面,能够改善因join key的值的有效和无效比例失衡造成的效率低下等问题。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅为本申请的各种实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (12)
1.一种流数据与维表关联方法,其特征在于,应用于基于流式计算框架的流计算装置,所述流计算装置包括数据采集单元和多个处理单元,所述多个处理单元分别与关联键joinkey的不同值对应,每个处理单元具有本地缓存;所述方法包括:
所述数据采集单元获得数据流,根据所述数据流中的各数据记录各自包含的join key的值将所述数据流划分为多个子流,并将每个子流发送给与该子流的join key的值对应的处理单元;
接收到所述子流的处理单元从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据;其中,该处理单元的本地缓存存储有预设维表中的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配;
若存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则将所述匹配的维表数据和所述子流中的所述数据记录相关联。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收到所述子流的所述处理单元从所述本地缓存记录的未命中的值中,查找是否存在所述子流中的数据记录的join key的所述值;
若不存在,再执行所述从本地缓存中查找是否存在与所述子流中的数据记录的joinkey的值匹配的维表数据的步骤;
若所述本地缓存中不存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则在该本地缓存中将所述数据记录的join key的所述值记录为未命中的值。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述本地缓存记录的未命中的值中存在所述数据记录的join key的所述值,则结束对所述数据记录的处理。
4.根据权利要求1-3中任意一项所述的方法,其特征在于,所述方法还包括:
每个处理单元每间隔预设时长删除本地缓存记录的未命中的值。
5.根据权利要求1-3中任意一项所述的方法,其特征在于,所述方法还包括:
所述数据采集单元周期性地从所述预设维表的存储源同步维表数据到预设的缓存数据库中;
每个处理单元周期性地从所述缓存数据库存储的维表数据中,获取与该处理单元对应的join key的值匹配的部分维表数据存储到本地缓存中。
6.根据权利要求1-3中任意一项所述的方法,其特征在于,所述本地缓存为最近最少使用LRU类型的缓存。
7.一种流计算装置,其特征在于,基于流式计算框架,所述流计算装置包括数据采集单元和多个处理单元,所述多个处理单元分别与关联键join key的不同值对应,每个处理单元具有本地缓存;
所述数据采集单元,用于获得数据流,根据所述数据流中的多条数据记录各自包含的join key的值将所述数据流划分为多个子流,并将每个子流发送给与该子流的join key的值对应的处理单元;
所述处理单元,用于在接收到所述子流时,从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据;其中,该处理单元的本地缓存存储有预设维表中的部分维表数据,该部分维表数据与该处理单元所对应的join key的至少一个值匹配;若存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则将所述匹配的维表数据和所述子流中的所述数据记录相关联。
8.根据权利要求7所述的装置,其特征在于,所述处理单元,还用于:
从所述本地缓存记录的未命中的值中,查找是否存在所述子流中的数据记录的joinkey的所述值;若不存在,再执行所述从本地缓存中查找是否存在与所述子流中的数据记录的join key的值匹配的维表数据的步骤;若所述本地缓存中不存在与所述子流中的数据记录的join key的所述值匹配的维表数据,则在该本地缓存中将所述数据记录的join key的所述值记录为未命中的值。
9.根据权利要求8所述的装置,其特征在于,所述处理单元,还用于:
在所述本地缓存记录的未命中的值中存在所述数据记录的join key的所述值的情况下,结束对所述数据记录的处理。
10.根据权利要求7-9中任意一项所述的装置,其特征在于,
所述处理单元,还用于每间隔预设时长删除本地缓存记录的未命中的值。
11.根据权利要求7-9中任意一项所述的装置,其特征在于,
所述数据采集单元,还用于周期性地从所述预设维表的存储源同步维表数据到预设的缓存数据库中;
所述处理单元,还用于周期性地从所述缓存数据库存储的维表数据中,获取与该处理单元对应的join key的值匹配的部分维表数据存储到本地缓存中。
12.根据权利要求7-9中任意一项所述的装置,其特征在于,所述本地缓存为LRU类型的缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910472904.7A CN110232074B (zh) | 2019-05-31 | 2019-05-31 | 流数据与维表关联方法及流计算装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910472904.7A CN110232074B (zh) | 2019-05-31 | 2019-05-31 | 流数据与维表关联方法及流计算装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110232074A true CN110232074A (zh) | 2019-09-13 |
CN110232074B CN110232074B (zh) | 2022-04-08 |
Family
ID=67858905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910472904.7A Active CN110232074B (zh) | 2019-05-31 | 2019-05-31 | 流数据与维表关联方法及流计算装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110232074B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765166A (zh) * | 2021-01-06 | 2021-05-07 | 深圳市欢太科技有限公司 | 数据处理方法、装置及计算机可读存储介质 |
CN113051443A (zh) * | 2019-12-26 | 2021-06-29 | 北京奇艺世纪科技有限公司 | 一种数据处理方法及相关设备 |
CN113127511A (zh) * | 2020-01-15 | 2021-07-16 | 百度在线网络技术(北京)有限公司 | 多数据流的数据拼接方法、装置、电子设备和存储介质 |
CN113342853A (zh) * | 2021-06-18 | 2021-09-03 | 上海哔哩哔哩科技有限公司 | 流式数据处理方法和系统 |
CN113742333A (zh) * | 2020-05-29 | 2021-12-03 | 杭州海康威视数字技术股份有限公司 | 一种维表数据更新方法、装置及电子设备 |
CN116703304A (zh) * | 2023-08-09 | 2023-09-05 | 山东水发大正物联科技有限公司 | 一种基于物联网的货物资产监管方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595905A (zh) * | 2004-07-04 | 2005-03-16 | 华中科技大学 | 基于集群的流媒体缓存代理服务器系统 |
CN102214176A (zh) * | 2010-04-02 | 2011-10-12 | 中国人民解放军国防科学技术大学 | 超大维表的切分与表连接方法 |
US20130318031A1 (en) * | 2012-05-22 | 2013-11-28 | Jaskaran Singh Bawa | Distributed processing of streaming data records |
US20160196302A1 (en) * | 2015-01-07 | 2016-07-07 | International Business Machines Corporation | Technology for join processing |
CN107172058A (zh) * | 2017-06-01 | 2017-09-15 | 国家电网公司 | 一种基于流数据分析的Web 攻击实时在线检测系统 |
US20170329821A1 (en) * | 2016-05-12 | 2017-11-16 | International Business Machines Corporation | Signature detection |
-
2019
- 2019-05-31 CN CN201910472904.7A patent/CN110232074B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595905A (zh) * | 2004-07-04 | 2005-03-16 | 华中科技大学 | 基于集群的流媒体缓存代理服务器系统 |
CN102214176A (zh) * | 2010-04-02 | 2011-10-12 | 中国人民解放军国防科学技术大学 | 超大维表的切分与表连接方法 |
US20130318031A1 (en) * | 2012-05-22 | 2013-11-28 | Jaskaran Singh Bawa | Distributed processing of streaming data records |
US20160196302A1 (en) * | 2015-01-07 | 2016-07-07 | International Business Machines Corporation | Technology for join processing |
US20170329821A1 (en) * | 2016-05-12 | 2017-11-16 | International Business Machines Corporation | Signature detection |
CN107172058A (zh) * | 2017-06-01 | 2017-09-15 | 国家电网公司 | 一种基于流数据分析的Web 攻击实时在线检测系统 |
Non-Patent Citations (1)
Title |
---|
岳过山丘: "flink异步IO应用场景之流表join维表", 《简书》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051443A (zh) * | 2019-12-26 | 2021-06-29 | 北京奇艺世纪科技有限公司 | 一种数据处理方法及相关设备 |
CN113127511A (zh) * | 2020-01-15 | 2021-07-16 | 百度在线网络技术(北京)有限公司 | 多数据流的数据拼接方法、装置、电子设备和存储介质 |
CN113127511B (zh) * | 2020-01-15 | 2023-09-15 | 百度在线网络技术(北京)有限公司 | 多数据流的数据拼接方法、装置、电子设备和存储介质 |
CN113742333A (zh) * | 2020-05-29 | 2021-12-03 | 杭州海康威视数字技术股份有限公司 | 一种维表数据更新方法、装置及电子设备 |
CN113742333B (zh) * | 2020-05-29 | 2023-08-04 | 杭州海康威视数字技术股份有限公司 | 一种维表数据更新方法、装置及电子设备 |
CN112765166A (zh) * | 2021-01-06 | 2021-05-07 | 深圳市欢太科技有限公司 | 数据处理方法、装置及计算机可读存储介质 |
CN113342853A (zh) * | 2021-06-18 | 2021-09-03 | 上海哔哩哔哩科技有限公司 | 流式数据处理方法和系统 |
CN113342853B (zh) * | 2021-06-18 | 2023-03-21 | 上海哔哩哔哩科技有限公司 | 流式数据处理方法和系统 |
CN116703304A (zh) * | 2023-08-09 | 2023-09-05 | 山东水发大正物联科技有限公司 | 一种基于物联网的货物资产监管方法及系统 |
CN116703304B (zh) * | 2023-08-09 | 2023-10-27 | 山东水发大正物联科技有限公司 | 一种基于物联网的货物资产监管方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110232074B (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110232074A (zh) | 流数据与维表关联方法及流计算装置 | |
US11314613B2 (en) | Graphical user interface for visual correlation of virtual machine information and storage volume information | |
KR102266756B1 (ko) | Kvs 트리 | |
US20200167311A1 (en) | Reproducing datasets generated by alert-triggering search queries | |
US10769126B1 (en) | Data entropy reduction across stream shard | |
KR102005831B1 (ko) | 범위-기반 검색을 위한 데이터 저장 관리 | |
CN110291518A (zh) | 合并树无用单元指标 | |
EP2880848B1 (en) | Aggregating data in a mediation system | |
CN105608188A (zh) | 数据处理方法和数据处理装置 | |
CN104978324B (zh) | 一种数据处理方法和装置 | |
CN107103068A (zh) | 业务缓存的更新方法及装置 | |
US10318176B2 (en) | Real-time, self-learning automated object classification and storage tier assignment | |
CN106155934B (zh) | 一种云环境下基于重复数据的缓存方法 | |
CN111859132A (zh) | 一种数据处理方法、装置及智能设备、存储介质 | |
CN103207919A (zh) | 一种MongoDB集群快速查询计算的方法及装置 | |
CN105159845A (zh) | 存储器读取方法 | |
CN102054000A (zh) | 数据查询方法、装置及系统 | |
CN110727727A (zh) | 一种数据库的统计方法及装置 | |
CN102779138A (zh) | 实时数据的硬盘存取方法 | |
JP6406254B2 (ja) | ストレージ装置、データアクセス方法およびデータアクセスプログラム | |
JP5371656B2 (ja) | ファイル検索システム | |
KR101830504B1 (ko) | 분산 환경 기반 빅데이터 실시간 분석을 위한 인-메모리 db 연결 지원형 스케줄링 방법 및 시스템 | |
Wang et al. | Waterwheel: Realtime indexing and temporal range query processing over massive data streams | |
JPWO2015049734A1 (ja) | 検索システム及び検索方法 | |
CN111522918A (zh) | 数据汇聚方法、装置、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |