一种数据更新方法及装置与流程
未命名
09-22
阅读:66
评论:0
1.本发明涉及软件开发技术领域,尤其涉及一种数据更新方法及装置。
背景技术:
2.观察者模式(observer)又称为发布/订阅模式,是一种软件设计模式。在观察者模式中一个目标对象管理所有相依于它的观察者对象,并且在目标对象本身的状态改变时主动向全部观察者对象发出通知。
3.现有技术中,观察者模式下可观察数据源进行数据更新时的最小数据粒度为数据类,因此每次更新可观察数据源时都需要数据发生变化的数据类进行整体更新。例如:可观察数据源的某一数据类包括数据类型a和数据类型b两个类型的数据,当其中一个类型的数据发生了变化时,发布者需要进行数据更新,且更新方式为对该数据类进行整体更新。如上所述,在现有技术中,一旦可观察数据源中的数据发生了变化,无论是数据类中的全部数据均发生了变化,还是数据类中的部分数据发生了变化,发布者都需要对数据类进行整体更新,而当数据类中的部分数据发生了变化时对数据类进行整体更新会存在部分无效更新,进而造成相关更新资源的浪费。
技术实现要素:
4.有鉴于此,本发明实施例提供了一种数据更新方法及装置,用于解决相关技术中无法对可观察数据源中的数据进行差量更新的问题。
5.为了实现上述目的,本发明实施例提供技术方案如下:
6.第一方面,本发明的实施例提供了一种数据更新方法,包括:
7.定义目标数据类,所述目标数据类包括多个属性;
8.构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中,所述数据观察模型包括发布者和至少一个订阅者;
9.在需要对所述可观察数据源进行更新时,获取更新数据,所述更新数据为更新后所述目标数据类的数据;
10.根据原始数据和所述更新数据,确定目标属性集合,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;
11.根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新时。
12.作为本发明实施例一种可选的实施方式,在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,所述方法还包括:
13.根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;
14.确定所述第一订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;
15.向所述第一订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
16.作为本发明实施例一种可选的实施方式,在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,所述方法还包括:
17.根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;
18.根据所述第一订阅者集合中各个订阅者的生命周期的状态,确定第二订阅者集合,所述第二订阅者集合为所述第一订阅者集合中生命周期处于活跃状态的订阅者组成的集合;
19.确定所述第二订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;
20.向所述第二订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
21.作为本发明实施例一种可选的实施方式,所述构建数据观察模型,包括:
22.声明所述数据发布者和所述至少一个数据订阅者;
23.配置所述至少一个数据订阅者中的每一个数据订阅者订阅的属性。
24.作为本发明实施例一种可选的实施方式,所述获取更新数据,包括:
25.创建数据更新函数;所述数据更新函数的输入为所述原始数据,所述数据更新函数的输出为所述更新数据;
26.根据所述数据更新函数获取所述更新数据。
27.作为本发明实施例一种可选的实施方式,所述根据所述数据更新函数获取所述更新数据,包括:
28.确定所述数据观察模型的缓冲队列是否为空;
29.若否,则对所述数据更新函数和所述缓冲队列中的数据更新函数进行合并计算,获取汇总数据更新函数;
30.清空所述缓冲队列,并将所述汇总数据更新函数放入所述缓冲队列;
31.调用所述缓冲队列中的所述汇总数据更新函数以获取所述更新数据。
32.作为本发明实施例一种可选的实施方式,所述方法还包括:
33.若所述缓冲队列为空,则将所述数据更新函数放入所述缓冲队列;
34.调用所述缓冲队列中的所述数据更新函数以获取所述更新数据。
35.作为本发明实施例一种可选的实施方式,所述根据所述原始数据和所述更新数据,确定目标属性集合,包括:
36.对所述更新数据进行属性映射,获取更新后所述目标数据类的各个属性对应的数据;
37.通过确定更新后所述目标数据类的各个属性对应的数据与更新前所述目标数据类的各个属性对应的数据是否相同,获取至少一个目标属性,所述目标属性为所述目标数据类的属性中更新前后对应的数据不同的属性;
38.将所述至少一个目标属性组合为所述目标属性集合。
39.第二方面,本发明的实施例提供了一种信息流服务器,包括:
40.定义单元,用于定义目标数据类,所述目标数据类包括多个属性;
41.构建单元,用于构建数据观察模型,并将所述目标数据类添加到的所述数据观察
模型的可观察数据源中,所述数据观察模型包括发布者和至少一个订阅者;
42.获取单元,用于在需要对所述可观察数据源进行更新时,获取更新数据,所述更新数据为更新后所述目标数据类的数据;
43.处理单元,用于根据原始数据和所述更新数据,确定目标属性集合,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;
44.更新单元,用于根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。
45.作为本发明实施例一种可选的实施方式,所述装置还包括:
46.发送单元,用于在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;确定所述第一订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第一订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
47.作为本发明实施例一种可选的实施方式,所述装置还包括:
48.发送单元,用于在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;根据所述第一订阅者集合中各个订阅者的生命周期的状态,确定第二订阅者集合,所述第二订阅者集合为所述第一订阅者集合中生命周期处于活跃状态的订阅者组成的集合;确定所述第二订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第二订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
49.作为本发明实施例一种可选的实施方式,所述构建单元,具体用于声明所述数据发布者和所述至少一个数据订阅者;配置所述至少一个数据订阅者中的每一个数据订阅者订阅的属性。
50.作为本发明实施例一种可选的实施方式,所述获取单元,具体用于创建数据更新函数;所述数据更新函数的输入为所述原始数据,所述数据更新函数的输出为所述更新数据;根据所述数据更新函数获取所述更新数据。
51.作为本发明实施例一种可选的实施方式,所述获取单元,具体用于确定所述数据观察模型的缓冲队列是否为空;若否,则对所述数据更新函数和所述缓冲队列中的数据更新函数进行合并计算,获取汇总数据更新函数;清空所述缓冲队列,并将所述汇总数据更新函数放入所述缓冲队列;调用所述缓冲队列中的所述汇总数据更新函数以获取所述更新数据。
52.作为本发明实施例一种可选的实施方式,所述获取单元,还用于在所述缓冲队列为空的情况下,将所述数据更新函数放入所述缓冲队列;调用所述缓冲队列中的所述数据更新函数以获取所述更新数据。
53.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于对所述更新数
据进行属性映射,获取更新后所述目标数据类的各个属性对应的数据;通过确定更新后所述目标数据类的各个属性对应的数据与更新前所述目标数据类的各个属性对应的数据是否相同,获取至少一个目标属性,所述目标属性为所述目标数据类的属性中更新前后对应的数据不同的属性;将所述至少一个目标属性组合为所述目标属性集合。
54.第三方面,本发明实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在执行计算机程序时,使得所述电子设备实现上述任一实施方式所述的数据更新方法。
55.第四方面,本发明实施例提供一种计算机可读存储介质,当所述计算机程序被计算设备执行时,使得所述计算设备实现上述任一实施方式所述的数据更新方法。
56.第五方面,本发明实施例提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述任一实施方式所述的数据更新方法。
57.本发明实施例提供的数据更新方法首先定义包括多个属性的目标数据类,然后构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中;在需要对所述可观察数据源进行更新时,获取更新后所述目标数据类的数据,并更新后所述目标数据类的数据和更新前所述目标数据类的数据,确定所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合,以及根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。由于本发明实施例在需要对所述可观察数据源进行更新时,会根据原始数据和更新数据确定更新前后对应的数据发生了变化的属性组成的集合,并仅对可观察数据源中更新前后对应的数据发生了变化的属性对应的数据进行更新,因此本发明实施例可以在数据类中的部分属性对应的数据发生了变化时,对可观察数据源中的数据进行差量更新,避免了对更新前后数据未发生变化的属性对应的数据进行更新,进而避免造成相关更新资源的浪费。
附图说明
58.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
59.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要调用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
60.图1为本发明实施例提供的数据更新方法的步骤流程图之一;
61.图2为本发明实施例提供的目标数据类的数据结构图;
62.图3为本发明实施例提供的数据订阅模型的示意图之一;
63.图4为本发明实施例提供的数据订阅模型的示意图之二;
64.图5为本发明实施例提供的数据订阅模型的示意图之三;
65.图6为本发明实施例提供的数据更新方法的步骤流程图之二;
66.图7为本发明实施例提供的数据更新方法的步骤流程图之三;
67.图8为本发明实施例提供的数据观察装置的结构示意图之一;
68.图9为本发明实施例提供的数据观察装置的结构示意图之二;
69.图10为本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
70.为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
71.在下面的描述中阐述了很多具体细节以便于充分理解本发明,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。
72.在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,调用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
73.本发明实施例中的数据观察设备可以为移动设备,也可以为非移动设备。移动终端设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等;非移动终端设备可以为个人计算机(personal computer,pc)、电视机(television,tv)、柜员机或者自助机等,或者该数据观察设备还可以为其他类型的设备,本发明实施例对此不作限定。
74.本发明实施例提供了一种数据更新方法,参照图1所示,该数据更新方法包括如下步骤s11至s15:
75.s11、定义目标数据类。
76.其中,目标数据类包括多个属性。
77.即,将待观察数据映射为目标数据类的各个属性对应的数据。
78.在一些实施例中,为了区分可观察数据源中的数据和其它数据,可以使目标数据类需要实现一个指定的接口。例如:使目标数据类实现state接口。
79.示例性的,参照图2所示,图2中以目标数据类包括n个属性为例示出。当目标数据类包括n个属性时,目标数据类的数据结构中包括n个数据块,且n个数据块与目标数据类的n个属性一一对应。
80.s12、构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中。
81.其中,所述数据观察模型包括发布者和至少一个订阅者。
82.示例性的,参照图3所示,图3中以数据观察模型包括发布者和m个订阅者为例示出。数据观察模型中,发布者维护和管理可订阅数据并向各个订阅者发送订阅数据,各个订阅者可以对可订阅数据进行订阅。
83.作为本发明实施例一种可选的实施方式,所述构建数据观察模型,包括如下步骤a和步骤b:
84.步骤a、声明所述数据发布者和所述至少一个数据订阅者。
85.步骤b、配置所述至少一个数据订阅者中的每一个数据订阅者订阅的属性。
86.示例性的,当可观察数据源包括目标数据类,目标数据类包括n个属性,且数据观
察模型包括m个订阅者时,本发明实施例提供的数据观察模型可以如图4所示。如图4所示,订阅者1订阅了目标数据类的属性1和属性n,订阅者2订阅了目标数据类的属性2和属性3订阅者3订阅了目标数据类的属性n-1,
……
,订阅者m订阅了目标数据类的全部属性(属性1、属性2、
……
、属性n)。
87.由于本发明实施例在构建数据观察模型支持自定义每一个数据订阅者订阅的属性,因此本发明实施例可以进一步实现订阅者的差量书记订阅。
88.s13、在需要对所述可观察数据源进行更新时,获取更新数据。
89.其中,所述更新数据为更新后所述目标数据类的数据。
90.作为本发明实施例一种可选的实施方式,上述步骤s13中获取更新数据,包括如下步骤1和步骤2。
91.步骤1、创建数据更新函数。
92.其中,所述数据更新函数的输入为所述原始数据,所述数据更新函数的输出为所述更新数据。
93.步骤2、根据所述数据更新函数获取所述更新数据。
94.可选的,上述步骤2(根据所述数据更新函数获取所述更新数据)包括如下步骤
①
至步骤
⑥
:
95.步骤
①
、确定所述数据观察模型的缓冲队列是否为空。
96.即,确定数据观察模型的缓冲队列是否缓存有其它数据更新函数。
97.在实际数据观察过程中,由于多个线程均可能会对可观察数据源进行更新,因此缓冲队列中很可能存在其它线程写入,但未完成更新数据计算的数据更新函数,因此在创建数据更新函数时,数据观察模型的缓冲队列可能并不为空。
98.在上述步骤
①
中,若确定缓冲队列不为空,则执行如下步骤
②
至步骤
④
。
99.步骤
②
、对所述数据更新函数和所述缓冲队列中的数据更新函数进行合并计算,获取汇总数据更新函数。
100.示例性的,当前创建的数据更新函数的输入和输出分别为a1和a2,缓冲队列中的数据更新函数的输入和输出分别为b1,输出为b2,则汇总数据更新函数的输入为a1+a2,汇总数据更新函数的输出为b1+b2。
101.示例性的,当前创建的数据更新函数的输入和输出分别为c1和c2,缓冲队列中的数据更新函数的输入和输出分别为c1,输出为c3,则汇总数据更新函数的输入为a1,汇总数据更新函数的输出为c2。
102.步骤
③
、清空所述缓冲队列,并将所述汇总数据更新函数放入所述缓冲队列。
103.步骤
④
、调用所述缓冲队列中的所述汇总数据更新函数以获取所述更新数据。
104.在上述步骤
①
中,若确定缓冲队列为空,则执行如下步骤
⑤
和步骤
⑥
。
105.步骤
⑤
、将所述数据更新函数放入所述缓冲队列。
106.步骤
⑥
、调用所述缓冲队列中的所述数据更新函数以获取所述更新数据。
107.s14、根据原始数据和所述更新数据,确定目标属性集合。
108.其中,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合。
109.作为本发明实施例一种可选的实施方式,上述步骤s14(根据原始数据和所述更新
数据,确定目标属性集合)包括如下步骤ⅰ至ⅲ:
110.步骤ⅰ、对所述更新数据进行属性映射,获取更新后所述目标数据类的各个属性对应的数据。
111.示例性的,可以基于kotlin kproperties reflect的mapping计算对所述更新数据进行属性映射,以获取更新后所述目标数据类的各个属性对应的数据。
112.步骤ⅱ、通过确定更新后所述目标数据类的各个属性对应的数据与更新前所述目标数据类的各个属性对应的数据是否相同,获取至少一个目标属性。
113.其中,所述目标属性为所述目标数据类的属性中更新前后对应的数据不同的属性。
114.示例性的,当原始数据中包括属性1对应的数据、属性2对应的数据、属性3对应的数据以及属性4对应的数据,且四个属性对应的数据分别为a1、b1、c1、d1,更新数据同样包括4个属性1、属性2、属性3以及属性4对应的数据,但四个属性对应的数据分别为a1、b2、c2、d1,由于更新前后属性2和属性3的数据发生了变化,确定属性2和属性3为目标属性。
115.步骤ⅲ、将所述至少一个目标属性组合为所述目标属性集合。
116.承上示例所述,属性2和属性3为目标属性,因此将属性2和属性3组合为所述目标属性集合,目标属性集合为:{属性2,属性3}。
117.s15、根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。
118.承上示例所述,由于目标属性集合为{属性2,属性3},更新前后属性1和属性4对应的数据未发生变化,因此根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新时,仅对可观察数据源中属性2和属性3对应的数据进行更新,而不对属性1和属性4对应的数据进行更新。
119.图5为本发明实施例提供的数据观察模型的结构示意图。如图5所示,所述数据观察模型包括:可观察数据源51、缓冲队列52、更新数据计算模块53、映射模块54、比较模块55以及更新单元56。其中,可观察数据源51用户存储可观察的实体数据。缓冲队列52用于存储发布者写入的数据更新函数。更新数据计算模块53用于在缓冲队列52中包括多个数据更新函数时,读取缓冲队列52中的数据更新函数,并计算汇总数据更新函数,以及根据汇总的数据更新函数计算更新数据,在缓冲队列52中仅包括一个数据更新函数时,读取数据更新函数,并根据读取的数据更新函数计算更新数据。映射模块54用于将更新数据映射为各个属性对应的数据。比较模块55用户比较各个属性对应的数据在更新前后是否发生了变化。更新单元56用于可观察数据源51中更新前后对应的数据发生了变化的属性进行更新。
120.本发明实施例提供的数据更新方法首先定义包括多个属性的目标数据类,然后构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中;在需要对所述可观察数据源进行更新时,获取更新后所述目标数据类的数据,并更新后所述目标数据类的数据和更新前所述目标数据类的数据,确定所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合,以及根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。由于本发明实施例在需要对所述可观察数据源进行更新时,会根据原始数据和更新数据确定更新前后对应的数据发生了变化的属性组成的集合,并仅对可观察数据源中更新前后对应的数据发生了变化的属性对应的数据进行更新,因此本发明实施例可以在数据类中的部分属性对应的数据发生了变化时,对可观察数据源中的
数据进行差量更新,避免了对更新前后数据未发生变化的属性对应的数据进行更新,进而避免造成相关更新资源的浪费。
121.作为本发明实施例一种可选的实施方式,在图1所示实施例中的步骤s11至s15的基础上,参照图6所示,本发明实施例提供的方法还包括:
122.s61、根据所述目标属性集合确定第一订阅者集合。
123.其中,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合。
124.示例性的,当目标属性集合为{属性2,属性3},数据观察模型包括4个订阅者,且订阅者1订阅的属性为:属性1和属性2,订阅者2订阅的属性为:属性2和属性3、订阅者3订阅的属性为属性3和属性4,订阅者4订阅的属性为:属性4和属性5时,由于订阅者1订阅目标属性集合中的属性2,订阅者1订阅目标属性集合中的属性2和属性3,订阅者3订阅目标属性集合中的属性3,而订阅者4未订阅目标属性集合中的属性,因此第一订阅者集合为{订阅者1,订阅者2,订阅者3}。
125.s62、确定所述第一订阅者集合中各个订阅者对应的差量数据。
126.其中,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据。
127.承上示例所述,更新数据中订阅者1订阅的属性中属于所述目标属性集合的属性对应的数据为属性2对应的数据,更新数据中订阅者2订阅的属性中属于所述目标属性集合的属性对应的数据为属性2和属性3对应的数据,更新数据中订阅者3订阅的属性中属于所述目标属性集合的属性对应的数据为属性3对应的数据,因此订阅者1对应的差量数据为更新数据中属性2对应的数据,订阅者2对应的差量数据为更新数据中属性2和属性3对应的数据,订阅者3对应的差量数据为更新数据中属性3对应的数据。
128.s63、向所述第一订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
129.承上示例所述,订阅者1对应的差量数据为更新数据中属性2对应的数据,订阅者2对应的差量数据为更新数据中属性2和属性3对应的数据,订阅者3对应的差量数据为更新数据中属性3对应的数据,因此向订阅者1发送通知消息和更新数据中属性2对应的数据,向订阅者2发送通知消息和更新数据中属性2和属性3对应的数据,向订阅者4发送通知消息和更新数据中属性3对应的数据。
130.本发明实施例中的通知消息可以为用于通知订阅者执行数据更新后的操作的消息。例如:当订阅者为用户界面时,通知消息可以为通过用户界面进行刷新的消息。
131.由于上述实施例只会向订阅数据发生了变化的订阅者发送通知消息和对应的差量数据,更新数据源后订阅数据没有发生变化的订阅者不会收到通知消息和对应的差量数据,因此上述实施例可以避免无效的通知以及数据发送,进而整体数据观察程序的性能。
132.作为本发明实施例一种可选的实施方式,在图1所示实施例中的步骤s11至s15的基础上,参照图7所示,本发明实施例提供的方法还包括:
133.s71、根据所述目标属性集合确定第一订阅者集合。
134.其中,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合。
135.s72、根据所述第一订阅者集合中各个订阅者的生命周期的状态,确定第二订阅者
集合。
136.其中,所述第二订阅者集合为所述第一订阅者集合中生命周期处于活跃状态的订阅者组成的集合。
137.即,从所述数据观察模型的订阅者中选取订阅了所述目标属性集合中任一属性的订阅者组成的集合且生命周期的状态处于活跃状态的订阅者组成第二订阅者集合。
138.s73、确定所述第二订阅者集合中各个订阅者对应的差量数据。
139.其中,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据。
140.s74、向所述第二订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
141.由于上述实施例只会向订阅数据发生了变化且声明周期状态处于活跃状态的订阅者发送通知消息和对应的差量数据,更新数据源后订阅数据没有发生变化或生命周期处于非活跃状态的订阅者均不会收到通知消息和对应的差量数据,因此上述实施例可以进一步的避免无效的通知以及数据发送,进而整体数据观察程序的性能。
142.基于同一发明构思,作为对上述方法的实现,本发明实施例还提供了一种数据观察装置,该实施例与前述方法实施例对应,为便于阅读,本实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的数据观察装置能够对应实现前述方法实施例中的全部内容。
143.本发明实施例提供了一种数据观察装置,图8为该数据观察装置的结构示意图,如图8所示,该数据观察装置800包括:
144.定义单元81,用于定义目标数据类,所述目标数据类包括多个属性;
145.构建单元82,用于构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中,所述数据观察模型包括发布者和至少一个订阅者;
146.获取单元83,用于在需要对所述可观察数据源进行更新时,获取更新数据,所述更新数据为更新后所述目标数据类的数据;
147.处理单元84,用于根据原始数据和所述更新数据,确定目标属性集合,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;
148.更新单元85,用于根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。
149.作为本发明实施例一种可选的实施方式,参照图9所示,所述该数据观察装置800还包括:
150.发送单元86,用于在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;确定所述第一订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第一订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
151.作为本发明实施例一种可选的实施方式,参照图9所示,所述该数据观察装置800还包括:
152.发送单元86,用于在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;根据所述第一订阅者集合中各个订阅者的生命周期的状态,确定第二订阅者集合,所述第二订阅者集合为所述第一订阅者集合中生命周期处于活跃状态的订阅者组成的集合;确定所述第二订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第二订阅者集合中的各个订阅者发送通知消息和对应的差量数据。
153.作为本发明实施例一种可选的实施方式,所述构建单元82,具体用于声明所述数据发布者和所述至少一个数据订阅者;配置所述至少一个数据订阅者中的每一个数据订阅者订阅的属性。
154.作为本发明实施例一种可选的实施方式,所述获取单元83,具体用于创建数据更新函数;所述数据更新函数的输入为所述原始数据,所述数据更新函数的输出为所述更新数据;根据所述数据更新函数获取所述更新数据。
155.作为本发明实施例一种可选的实施方式,所述获取单元83,具体用于确定所述数据观察模型的缓冲队列是否为空;若否,则对所述数据更新函数和所述缓冲队列中的数据更新函数进行合并计算,获取汇总数据更新函数;清空所述缓冲队列,并将所述汇总数据更新函数放入所述缓冲队列;调用所述缓冲队列中的所述汇总数据更新函数以获取所述更新数据。
156.作为本发明实施例一种可选的实施方式,所述获取单元83,还用于在所述缓冲队列为空的情况下,将所述数据更新函数放入所述缓冲队列;调用所述缓冲队列中的所述数据更新函数以获取所述更新数据。
157.作为本发明实施例一种可选的实施方式,所述处理单元84,具体用于对所述更新数据进行属性映射,获取更新后所述目标数据类的各个属性对应的数据;通过确定更新后所述目标数据类的各个属性对应的数据与更新前所述目标数据类的各个属性对应的数据是否相同,获取至少一个目标属性,所述目标属性为所述目标数据类的属性中更新前后对应的数据不同的属性;将所述至少一个目标属性组合为所述目标属性集合。
158.本实施例提供的数据观察装置可以执行上述方法实施例提供的数据更新方法,其实现原理与技术效果类似,此处不再赘述。
159.基于同一发明构思,本发明实施例还提供了一种电子设备。图10为本发明实施例提供的电子设备的结构示意图,如图10所示,本实施例提供的电子设备包括:存储器101和处理器102,所述存储器101用于存储计算机程序;所述处理器102用于在执行计算机程序时执行上述实施例提供的数据更新方法。
160.基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当计算机程序被处理器执行时,使得所述计算设备实现上述实施例提供的数据更新方法。
161.基于同一发明构思,本发明实施例还提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算设备实现上述实施例提供的数据更新方法。
162.本领域技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产
品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
163.处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
164.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。
165.计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
166.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
技术特征:
1.一种数据更新方法,其特征在于,包括:定义目标数据类,所述目标数据类包括多个属性;构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中,所述数据观察模型包括发布者和至少一个订阅者;在需要对所述可观察数据源进行更新时,获取更新数据,所述更新数据为更新后所述目标数据类的数据;根据原始数据和所述更新数据,确定目标属性集合,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。2.根据权利要求1所述的方法,其特征在于,在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,所述方法还包括:根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;确定所述第一订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第一订阅者集合中的各个订阅者发送通知消息和对应的差量数据。3.根据权利要求1所述的方法,其特征在于,在根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新之后,所述方法还包括:根据所述目标属性集合确定第一订阅者集合,所述第一订阅者集合为所述数据观察模型的订阅者中订阅了所述目标属性集合中任一属性的订阅者组成的集合;根据所述第一订阅者集合中各个订阅者的生命周期的状态,确定第二订阅者集合,所述第二订阅者集合为所述第一订阅者集合中生命周期处于活跃状态的订阅者组成的集合;确定所述第二订阅者集合中各个订阅者对应的差量数据,任一订阅者对应的差量数据为所述更新数据中该订阅者订阅的属性中属于所述目标属性集合的属性对应的数据;向所述第二订阅者集合中的各个订阅者发送通知消息和对应的差量数据。4.根据权利要求1所述的方法,其特征在于,所述构建数据观察模型,包括:声明所述数据发布者和所述至少一个数据订阅者;配置所述至少一个数据订阅者中的每一个数据订阅者订阅的属性。5.根据权利要求1所述的方法,其特征在于,所述获取更新数据,包括:创建数据更新函数;所述数据更新函数的输入为所述原始数据,所述数据更新函数的输出为所述更新数据;根据所述数据更新函数获取所述更新数据。6.根据权利要求5所述的方法,其特征在于,所述根据所述数据更新函数获取所述更新数据,包括:确定所述数据观察模型的缓冲队列是否为空;若否,则对所述数据更新函数和所述缓冲队列中的数据更新函数进行合并计算,获取汇总数据更新函数;清空所述缓冲队列,并将所述汇总数据更新函数放入所述缓冲队列;
调用所述缓冲队列中的所述汇总数据更新函数以获取所述更新数据。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:若所述缓冲队列为空,则将所述数据更新函数放入所述缓冲队列;调用所述缓冲队列中的所述数据更新函数以获取所述更新数据。8.根据权利要求1所述的方法,其特征在于,所述根据所述原始数据和所述更新数据,确定目标属性集合,包括:对所述更新数据进行属性映射,获取更新后所述目标数据类的各个属性对应的数据;通过确定更新后所述目标数据类的各个属性对应的数据与更新前所述目标数据类的各个属性对应的数据是否相同,获取至少一个目标属性,所述目标属性为所述目标数据类的属性中更新前后对应的数据不同的属性;将所述至少一个目标属性组合为所述目标属性集合。9.一种数据观察装置,其特征在于,包括:定义单元,用于定义目标数据类,所述目标数据类包括多个属性;构建单元,用于构建数据观察模型,并将所述目标数据类添加到的所述数据观察模型的可观察数据源中,所述数据观察模型包括发布者和至少一个订阅者;获取单元,用于在需要对所述可观察数据源进行更新时,获取更新数据,所述更新数据为更新后所述目标数据类的数据;处理单元,用于根据原始数据和所述更新数据,确定目标属性集合,所述原始数据为更新前所述目标数据类的数据,所述目标属性集合为所述目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;更新单元,用于根据所述更新数据和所述目标属性集合对所述可观察数据源进行更新。10.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在执行计算机程序时,使得所述电子设备实现权利要求1-8任一项所述的数据更新方法。11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序被计算设备执行时,使得所述计算设备实现权利要求1-8任一项所述的数据更新方法。12.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机实现如权利要求1-8任一项所述的数据更新方法。
技术总结
本发明实施例提供了一种数据更新方法及装置,涉及软件开发技术领域。该方法包括:定义目标数据类,目标数据类包括多个属性;构建数据观察模型,并将目标数据类添加到的数据观察模型的可观察数据源中,数据观察模型包括发布者和至少一个订阅者;在需要对可观察数据源进行更新时,获取更新数据,更新数据为更新后目标数据类的数据;根据原始数据和更新数据,确定目标属性集合,原始数据为更新前目标数据类的数据,目标属性集合为目标数据类的属性中更新前后对应的数据发生了变化的属性组成的集合;根据更新数据和目标属性集合对可观察数据源进行更新时。本发明实施例用于解决相关技术中无法对可观察数据源中的数据进行差量更新的问题。的问题。的问题。
技术研发人员:谢信奇
受保护的技术使用者:北京字节跳动网络技术有限公司
技术研发日:2022.03.11
技术公布日:2023/9/20
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:醉酒检测方法、装置、可穿戴设备及存储介质与流程 下一篇:铣高装置的制作方法