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

一种方法和装置与流程

2022-07-10 03:56:52 来源:中国专利 TAG:


1.本技术涉及终端领域,尤其涉及一种方法和装置。


背景技术:

2.分布式系统中,各个设备(或称为节点)之间可以进行时间同步。通常,各个设备在联网模式下,可以定期和网络时间协议(network time protocol,ntp)服务器进行时间同步,确保自身和ntp服务器的时间保持一致。
3.上述方式下,不仅需要分布式系统的各个节点均与ntp服务器之间多次通信,而且后续计算同步时间的过程复杂,提高了设备的功耗。


技术实现要素:

4.本技术实施例提供一种方法和装置,能够降低设备的功耗。
5.第一方面,本技术实施例提供一种方法,包括:第一设备向第二设备发送第一消息,并获取第一消息的虚拟发送时间t1;t1是根据第一偏移量和第一设备发送第一消息的系统时间确定的,第一偏移量包括第一初始值和第一设备的系统时间的跳变量;第一设备从第二设备接收第一消息的响应消息,并获取第一消息的响应消息的虚拟接收时间t2,t2是根据第一偏移量和第一设备接收第一消息的响应消息的系统时间确定的;其中,第一消息的响应消息中携带第二设备接收到第一消息的虚拟接收时间t1’和第二设备发送第一消息的响应消息的虚拟发送时间t2’,t1’是根据第二偏移量和第二设备接收到第一消息的系统时间确定的,t2’是根据第二偏移量和第二设备发送第一消息的响应消息的系统时间确定的,第二偏移量包括第二初始值和第二设备的系统时间的跳变量;第一设备根据t1、t2、t1’和t2’确定第一设备与第二设备之间的第一虚拟时间偏差,并保存第一虚拟时间偏差。
6.基于本技术实施例提供的方法,第一设备根据t1、t2、t1’和t2’确定第一设备与第二设备之间的第一虚拟时间偏差后,无论哪个设备(第一设备或第二设备)发生时间跳变(例如被用户或ntp服务更改导致时间跳变),两个设备间的时间偏差不变,这是由于t1、t2、t1’和t2’可以根据系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变。这样,无需频繁进行时间偏差检测,可以节省设备的功耗。例如,假设现有技术每30分钟进行一次时间偏差检测,本技术可以每24小时进行一次时间偏差检测,相比现有技术可以提升20%的待机时间。
7.在一种可能的实现方式中,该方法还包括:第一设备向第三设备发送第二消息,并获取第二消息的虚拟发送时间t3;t3是根据第一偏移量和第一设备发送第二消息的系统时间确定的;第一设备从第三设备接收第二消息的响应消息,并获取第二消息的响应消息的虚拟接收时间t4,t4是根据第一偏移量和第一设备接收第二消息的响应消息的系统时间确定的;其中,第二消息的响应消息中携带第三设备接收到第二消息的虚拟接收时间t3’和第三设备发送第二消息的响应消息的虚拟发送时间t4’,t3’是根据第三偏移量和第三设备接收到第二消息的系统时间确定的,t4’是根据第三偏移量和第三设备发送第二消息的响应
消息的系统时间确定的,第三偏移量包括第三初始值和第三设备的系统时间的跳变量;第一设备根据t3、t4、t3’和t4’确定第一设备与第三设备之间的第二虚拟时间偏差,并保存第二虚拟时间偏差。
8.基于本技术实施例提供的方法,第一设备根据t3、t4、t3’和t4’确定第一设备与第三设备之间的第二虚拟时间偏差后,无论哪个设备(第一设备或第三设备)发生时间跳变,两个设备间的时间偏差不变,这是由于t3、t4、t3’和t4’可以根据系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变。这样,无需频繁进行时间偏差检测,可以节省设备的功耗。
9.在一种可能的实现方式中,t1和t2是从第一计数器读取的,第一计数器用于从第二计数器读取第一设备的系统时间,且第一计数器写入了第一偏移量;t1’和t2’是从第三计数器读取的,第三计数器用于从第四计数器读取第二设备的系统时间,且第三计数器写入了第二偏移量。第一计数器可以是第一设备独立维护的计数器,其单调递增,这是由于第一计数器的数值可以根据第一设备的系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变。第三计数器是第二设备独立维护的计数器,其单调递增。这是由于第一计数器的数值可以根据第二设备的系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变。
10.在一种可能的实现方式中,该方法还包括:第一设备基于预设周期比对第二计数器和第五计数器的步进值,第五计数器用于统计第一设备的开机运行时间;若第二计数器和第五计数器的步进值的差值等于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为0;若第二计数器和第五计数器的步进值的差值小于或大于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为第二计数器和第五计数器的步进值的差值与第一设备开机时第二计数器的步进值的差值。也就是说,第一设备的系统时间的跳变量可以是从第一设备的开机时间开始统计的。从第一设备开机至第一设备发送第一消息时,第一设备的系统时间发生几次跳变,第一设备的系统时间的跳变量就包括几次跳变对应的跳变量。
11.在一种可能的实现方式中,该方法还包括:第一设备启动数据库时,从第一计数器读取虚拟启动时间t5,若t5小于最后一个写入数据库的数据的虚拟写入时间t6,向第一计数器写入修正值,修正值包括t7与t5的差值和一个预设值。这样,若数据库未启动(数据库进程未运行)时,系统时间发生了跳变,在数据库启动后可以进行修正,保持虚拟时间单调递增,保证虚拟时间的可用性和准确性。
12.在一种可能的实现方式中,该方法还包括:第一设备启动数据库后第一次向数据库写入数据时,从第一计数器读取虚拟写入时间t7,若t7小于最后一个写入数据库的数据的虚拟写入时间t6,向第一计数器写入修正值,修正值包括t7与t6的差值和一个预设值。这样,若数据库未启动(数据库进程未运行)时,系统时间发生了跳变,在数据库启动后可以对设备的虚拟时间进行修正,保持虚拟时间单调递增,保证虚拟时间的可用性和准确性。
13.在一种可能的实现方式中,该方法还包括:第一设备重新计算第一设备与第二设备的虚拟时间偏差。由于对设备的虚拟时间进行了修正,因此需要重新计算第一设备与第二设备的虚拟时间偏差,以保证第一设备与第二设备的虚拟时间偏差的准确性。
14.在一种可能的实现方式中,该方法还包括:第一设备写入第一数据,并获取第一数
据的虚拟写入时间t7和第一数据的逻辑时间;若t7与第一设备写入第一数据的前一个数据的虚拟写入时间t8相同,第一数据的逻辑时间为第一数据的前一个数据的逻辑时间加1。逻辑时间可以用于提高虚拟时间的精度。
15.在一种可能的实现方式中,t7是从第一计数器读取的,第一数据的逻辑时间是从第八计数器读取的;若t7与t8相同,第八计数器加1;若t7与t8不相同,第八计数器清零。
16.在一种可能的实现方式中,该方法还包括:第一设备从第二设备接收数据同步消息,数据同步消息包括第二数据和第二数据的第一时间戳,第一时间戳包括第二数据在第二设备对应的虚拟写入时间t9和第二数据的逻辑时间;第一设备确定第二数据的第二时间戳,第二时间戳包括第二数据在第一设备对应的虚拟写入时间t10和第二数据的逻辑时间,t10包括t9与第一虚拟时间偏差。即第一设备可以将第二数据在第二设备上对应的时间(即第一时间戳)换算成第二数据在第一设备(本机)上对应的时间(即第二时间戳),这样可以使第二数据与第一设备上其他数据的时间尺度统一,从而第一设备能够正确识别第二数据与第一设备上其他数据写入的先后顺序。
17.在一种可能的实现方式中,该方法还包括:第一设备确定第二数据与数据库中的其他数据是否冲突;若确定第二数据与数据库中的第三数据冲突,比较第二数据的第二时间戳与第三数据的时间戳,第三数据的时间戳包括第三数据在第一设备对应的虚拟写入时间和第三数据的逻辑时间;第一设备保存时间戳最大的数据。即在进行数据冲突解决时,第一设备可以为来自第二设备的第二数据补偿第一虚拟时间偏差,将第二数据在第二设备上对应的虚拟时间换算成在第一设备对应的虚拟时间,这样可以使第二数据与第一设备上其他数据的时间尺度统一,从而第一设备能够正确识别该外来数据和第一设备上的数据写入的先后顺序,从而使得冲突解决策略更加准确。
18.在一种可能的实现方式中,第一设备确定第二数据与数据库中的其他数据是否冲突包括:第一设备确定第二数据的关键字与第三数据的关键字是否相同,若相同,确定第二数据与第三数据冲突。其中,第二数据与数据库中的其他数据可以是“关键字-值”类型的数据,即每个数据对应一个关键字和值。若任意两个数据的关键字相同,该两个数据冲突,需要进行冲突解决。
19.第二方面,本技术实施例提供一种方法,应用于包括第一设备和第二设备的系统,包括:第一设备向第二设备发送第一消息,并获取第一消息的虚拟发送时间t1;t1是根据第一偏移量和第一设备发送第一消息的系统时间确定的,第一偏移量包括第一初始值和第一设备的系统时间的跳变量;第二设备从第一设备接收第一消息;第二设备向第一设备发送第一消息的响应消息;其中,第一消息的响应消息中携带第二设备接收到第一消息的虚拟接收时间t1’和第二设备发送第一消息的响应消息的虚拟发送时间t2’,t1’是根据第二偏移量和第二设备接收到第一消息的系统时间确定的,t2’是根据第二偏移量和第二设备发送第一消息的响应消息的系统时间确定的,第二偏移量包括第二初始值和第二设备的系统时间的跳变量;第一设备从第二设备接收第一消息的响应消息,并获取第一消息的响应消息的虚拟接收时间t2,t2是根据第一偏移量和第一设备接收第一消息的响应消息的系统时间确定的;第一设备根据t1、t2、t1’和t2’确定第一设备与第二设备之间的第一虚拟时间偏差,并保存第一虚拟时间偏差。
20.基于本技术实施例提供的方法,第一设备根据t1、t2、t1’和t2’确定第一设备与第
二设备之间的第一虚拟时间偏差后,无论哪个设备(第一设备或第二设备)发生时间跳变(例如被用户或ntp服务更改导致时间跳变),两个设备间的时间偏差不变,这是由于t1、t2、t1’和t2’可以根据系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变。这样,无需频繁进行时间偏差检测,可以节省设备的功耗。例如,假设现有技术每30分钟进行一次时间偏差检测,本技术可以每24小时进行一次时间偏差检测,相比现有技术可以提升20%的待机时间。
21.在一种可能的实现方式中,系统还包括第三设备,该方法还包括:第一设备向第三设备发送第二消息,并获取第二消息的虚拟发送时间t3;t3是根据第一偏移量和第一设备发送第二消息的系统时间确定的;第三设备从第一设备接收第二消息;第三设备向第一设备发送第二消息的响应消息;其中,第二消息的响应消息中携带第三设备接收到第二消息的虚拟接收时间t3’和第三设备发送第二消息的响应消息的虚拟发送时间t4’,t3’是根据第三偏移量和第三设备接收到第二消息的系统时间确定的,t4’是根据第三偏移量和第三设备发送第二消息的响应消息的系统时间确定的,第三偏移量包括第三初始值和第三设备的系统时间的跳变量;第一设备从第三设备接收第二消息的响应消息,并获取第二消息的响应消息的虚拟接收时间t4,t4是根据第一偏移量和第一设备接收第二消息的响应消息的系统时间确定的;第一设备根据t3、t4、t3’和t4’确定第一设备与第三设备之间的第二虚拟时间偏差,并保存第二虚拟时间偏差。
22.在一种可能的实现方式中,t1和t2是从第一计数器读取的,第一计数器用于从第二计数器读取第一设备的系统时间,且第一计数器写入了第一偏移量;t1’和t2’是从第三计数器读取的,第三计数器用于从第四计数器读取第二设备的系统时间,且第三计数器写入了第二偏移量。
23.在一种可能的实现方式中,该方法还包括:第一设备基于预设周期比对第二计数器和第五计数器的步进值,第五计数器用于统计第一设备的开机运行时间;若第二计数器和第五计数器的步进值的差值等于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为0;若第二计数器和第五计数器的步进值的差值小于或大于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为第二计数器和第五计数器的步进值的差值与第一设备开机时第二计数器的步进值的差值。
24.在一种可能的实现方式中,该方法还包括:第一设备启动数据库时,从第一计数器读取虚拟启动时间t5,若t5小于最后一个写入数据库的数据的虚拟写入时间t6,向第一计数器写入修正值,修正值包括t7与t5的差值和一个预设值。
25.在一种可能的实现方式中,该方法还包括:第一设备启动数据库后第一次向数据库写入数据时,从第一计数器读取虚拟写入时间t7,若t7小于最后一个写入数据库的数据的虚拟写入时间t6,向第一计数器写入修正值,修正值包括t7与t6的差值和一个预设值。
26.在一种可能的实现方式中,该方法还包括:第一设备重新计算第一设备与第二设备的虚拟时间偏差。
27.在一种可能的实现方式中,该方法还包括:第一设备写入第一数据,并获取第一数据的虚拟写入时间t7和第一数据的逻辑时间;若t7与第一设备写入第一数据的前一个数据的虚拟写入时间t8相同,第一数据的逻辑时间为第一数据的前一个数据的逻辑时间加1。
28.在一种可能的实现方式中,t7是从第一计数器读取的,第一数据的逻辑时间是从
第八计数器读取的;若t7与t8相同,第八计数器加1;若t7与t8不相同,第八计数器清零。
29.在一种可能的实现方式中,该方法还包括:第一设备从第二设备接收数据同步消息,数据同步消息包括第二数据和第二数据的第一时间戳,第一时间戳包括第二数据在第二设备对应的虚拟写入时间t9和第二数据的逻辑时间;第一设备确定第二数据的第二时间戳,第二时间戳包括第二数据在第一设备对应的虚拟写入时间t10和第二数据的逻辑时间,t10包括t9与第一虚拟时间偏差。
30.在一种可能的实现方式中,该方法还包括:第一设备确定第二数据与数据库中的其他数据是否冲突;若确定第二数据与数据库中的第三数据冲突,比较第二数据的第二时间戳与第三数据的时间戳,第三数据的时间戳包括第三数据在第一设备对应的虚拟写入时间和第三数据的逻辑时间;第一设备保存时间戳最大的数据。
31.在一种可能的实现方式中,第一设备确定第二数据与数据库中的其他数据是否冲突包括:第一设备确定第二数据的关键字与第三数据的关键字是否相同,若相同,确定第二数据与第三数据冲突。
32.第三方面,本技术实施例提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法。
33.第四方面,本技术实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法。
34.第五方面,本技术实施例提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现上述第一方面提供的任意一种方法。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
35.第六方面,本技术实施例还提供了一种装置,该装置可以是处理设备、电子设备或芯片。该装置包括处理器,用于实现上述第一方面提供的任意一种方法。该装置还可以包括存储器,用于存储程序指令和数据,存储器可以是集成在该装置内的存储器,或设置在该装置外的片外存储器。该存储器与该处理器耦合,该处理器可以调用并执行该存储器中存储的程序指令,用于实现上述第一方面提供的任意一种方法。该装置还可以包括通信接口,该通信接口用于该装置与其它设备(例如,第二设备)进行通信。
附图说明
36.图1为本技术实施例提供的一种分布式网络的示意图;
37.图2为本技术实施例提供的一种第一设备/第二设备/第三设备的结构示意图;
38.图3为本技术实施例提供的一种系统时间和虚拟时间的对比示意图;
39.图4为本技术实施例提供的一种信号交互示意图;
40.图5为本技术实施例提供的一种在写入数据1时读取虚拟时间和逻辑时间的过程示意图;
41.图6为本技术实施例提供的又一种信号交互示意图;
42.图7为本技术实施例提供的一种时间换算的示意图;
43.图8为本技术实施例提供的一种冲突解决的示意图;
44.图9为本技术实施例提供的一种芯片系统的结构示意图。
具体实施方式
45.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。其中,在本技术的描述中,除非另有说明,“至少一个”是指一个或多个,“多个”是指两个或多于两个。另外,为了便于清楚描述本技术实施例的技术方案,在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
46.图1为本技术实施例提供的一种分布式网络(系统)的架构示意图。分布式网络可以包括多个设备,例如可以包括第一设备101、第二设备102和第三设备103。上述各个设备可以是路由器、网络交换机、防火墙、波分复用设备、分组传送网设备、基站、基站控制器或者数据中心等,本技术不做限定。
47.示例性的,用于实现本技术实施例提供的第一设备、第二设备或第三设备的功能的装置可以通过图2中的装置200来实现。图2所示为本技术实施例提供的装置200的硬件结构示意图。该装置200中包括至少一个处理器201,用于实现本技术实施例提供的第一设备的功能。装置200中还可以包括通信总线202以及至少一个通信接口204。装置200中还可以包括存储器203。
48.在本技术实施例中,处理器可以是中央处理器(central processing unit,cpu),通用处理器、网络处理器(network processor,np)、数字信号处理器(digital signal processing,dsp)、微处理器、微控制器、可编程逻辑器件(programmable logic device,pld)。处理器还可以是其它任意具有处理功能的装置,例如专用集成电路(application-specific integrated circuit,asic),现场可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件、软件模块或者其任意组合。
49.通信总线202可用于在上述组件之间传送信息。
50.通信接口204,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,ran),无线局域网(wireless local area networks,wlan)等。通信接口204可以是接口、电路、收发器或者其它能够实现通信的装置,本技术不做限制。通信接口204可以和处理器201耦合。本技术实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。
51.在本技术实施例中,存储器可以是只读存储器(read-only memory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、只读光盘(compact disc read-only memory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,也可以与处理器耦合,例如通过通信总线202。存储器也可以和处理器集成在一起。
52.其中,存储器203用于存储程序指令,并可以由处理器201来控制执行,从而实现本
申请下述实施例提供的方法。处理器201用于调用并执行存储器203中存储的指令,从而实现本技术下述实施例提供的方法。
53.可选的,本技术实施例中的计算机执行指令也可以称之为应用程序代码,本技术实施例对此不作具体限定。
54.可选地,存储器203可以包括于处理器201中。
55.在具体实现中,作为一种实施例,处理器201可以包括一个或多个cpu,例如图2中的cpu0和cpu1。
56.在具体实现中,作为一种实施例,装置200可以包括多个处理器,例如图2中的处理器201和处理器207。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
57.在具体实现中,作为一种实施例,装置200还可以包括输出设备205和输入设备206。输出设备205和处理器201耦合,可以以多种方式来显示信息。例如,输出设备205可以是液晶显示器(liquid crystal display,lcd),发光二级管(light emitting diode,led)显示设备,阴极射线管(cathode ray tube,crt)显示设备,或投影仪(projector)等。输入设备206和处理器201耦合,可以以多种方式接收用户的输入。例如,输入设备206可以是触摸屏设备或传感设备等。
58.分布式网络中的每个设备上存在一个数据库,任意两个设备之间可以进行数据同步。在进行数据同步时,需要确定数据写入的先后顺序。每个设备上的每条数据记录可以包含一个(操作)时间戳,时间戳可以记录数据写入的系统时间。
59.由于进行时间同步的过程繁杂,在一种实现方式中,可以确定出两个设备的系统时间的偏差,每个设备为来自对端设备的数据记录的操作时间戳补偿该偏差,从而可以正确确定数据写入的先后顺序。由于系统时间可能发生跳变(由于用户调整、断电、故障等原因可能导致系统时间发生跳变),两个设备之间需要每隔一段时间就进行一次时间偏差检测(例如,每30分钟/次),以保证两个设备间的时间偏差的准确性。
60.在本技术实施例中,引入虚拟时间(也可以称为虚拟时钟),虚拟时间是根据设备的系统时间(也可以成为系统时钟)和偏移量确定的。其中,偏移量包括初始值和设备的系统时间的跳变量。虚拟时间是各设备独立维护的计数器,其单调递增(虚拟时间可以根据系统时间的跳变量得到相应的补偿,因此不会像系统时间一样跳变)。这样,两个设备在测量过一次时间偏差后,无论哪个设备发生时间跳变(例如被用户或ntp服务更改导致时间跳变),两个设备间的时间偏差不变,因此无需频繁进行时间偏差检测,可以节省设备的功耗。例如,假设现有技术每30分钟进行一次时间偏差检测,本技术可以每24小时进行一次时间偏差检测,相比现有技术可以提升20%的待机时间。
61.本技术实施例中,虚拟时间和系统时间的关系可以如式(1)所示:
[0062][0063]
其中,tv表示虚拟时间,tr表示系统时间,λ表示虚拟时间与系统时间之间的偏移量(offset),f表示虚拟时间的精度和系统时间的精度的倍数,f=1表示虚拟时间与系统时间精度一致(即走得一样快)。例如,若系统时间步进1微秒,则虚拟时间也步进1微秒。公式
(1)可以简化为公式(2):
[0064]
tv=tr λ
ꢀꢀꢀ
(2)
[0065]
其中,λ=初始值 设备的系统时间的跳变量。λ的初始值可以为16位的随机非0值*x,x的值是预设的,例如,x=10/20/100等。x的单位可以是纳秒(ns)、微秒(μs)、秒(s)等。
[0066]
需要说明的是,分布式系统中的各个设备可以对应不同的初始值,以使各设备间的虚拟时间的差值较大,减弱时间偏差测量过程中的误差带来的影响。例如,假设时间偏差测量过程的误差为1s,当第一设备对应的初始值为10s,第二设备对应的初始值为100s时,该两个设备间的虚拟时间的偏差至少为90s时,1s的测量误差的影响可以忽略不计。
[0067]
如图3所示,由于用户调整、设备断电、设备故障等原因可能导致设备的系统时间发生跳变,此时为了维持虚拟时间的连续递增性,λ可以逆向补偿系统时间的跳变量。假设发生时间跳变前,λ=初始值,则发生时间跳变后,λ=初始值 系统时间的跳变量。也就是说,时间跳变前,虚拟时间=系统时间 λ(初始值);时间跳变后,虚拟时间=系统时间 λ(初始值 系统时间的跳变量)。当检测到系统时间再次发生跳变时,可以重新计算λ,继续补偿系统时间的跳变量。
[0068]
在一种可能的实现方式中,虚拟时钟可以是各个设备独立维护的计数器,该计数器步进间隔均匀,且单调递增不回退。示例性的,第一设备的虚拟时间可以是第一计数器记录的。第一计数器可以从第二计数器读取第一设备的系统时间(也可以称为系统时钟),且第一计数器写入了第一偏移量。第一偏移量包括第一初始值和第一设备的系统时间的跳变量。第二计数器可以从对事件源产生的事件进行计数。其中,事件源可以是时钟芯片(时钟电路)或是中央处理器(central processing unit,cpu),事件可以是时钟芯片(时钟电路)产生的中断或是cpu内部的滴答(ticks)。事件源每产生一次事件,第二计数器的值步进(递增)一次。例如,如果事件源产生事件的周期是1毫秒,那么第二计数器的值每毫秒加1。
[0069]
当用户在设备上调整系统时间时,或者当设备发生断电等故障时,第二计数器可以发生跳变(即系统时间发生跳变)。其中,系统时间的跳变量可以是第一设备基于预设周期比对第二计数器和第五计数器的步进值得到的。其中,第五计数器用于统计第一设备的开机运行时间;若第二计数器和第五计数器的步进值的差值等于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为0;若第二计数器和第五计数器的步进值的差值小于或大于第一设备开机时第二计数器的步进值,第一设备的系统时间的跳变量为第二计数器和第五计数器的步进值的差值与第一设备开机时第二计数器的步进值的差值。
[0070]
上文对虚拟时间进行了说明,下面以第一设备发起虚拟时间偏差测量(也可以简称为时间偏差测量)为例,对本技术实施例提供的方法(例如,时间偏差测量方法)进行说明,如图4所示,包括:
[0071]
401、第一设备向第二设备发送第一消息,并获取第一消息的虚拟发送时间t1。
[0072]
第一设备打开数据库后,可以向第二设备发送第一消息,以便发起时间偏差测量。或者,第一设备可以基于预设周期发起时间偏差测量。
[0073]
其中,t1是根据第一偏移量和第一设备发送第一消息的系统时间确定的,第一偏移量包括第一初始值和第一设备的系统时间的跳变量。第一设备的系统时间的跳变量可以参考上文中的相关描述进行确定。第一初始值可以为16位的随机非0值*x,x的值是预设的,例如,x=10/20/100等。
[0074]
402、第一设备从第二设备接收第一消息的响应消息,并获取第一消息的响应消息的虚拟接收时间t2。
[0075]
其中,t2是根据第一偏移量和第一设备接收第一消息的响应消息的系统时间确定的。第一消息的响应消息中携带第二设备接收到第一消息的虚拟接收时间t1’和第二设备发送第一消息的响应消息的虚拟发送时间t2’,t1’是根据第二偏移量和第二设备接收到第一消息的系统时间确定的,t2’是根据第二偏移量和第二设备发送第一消息的响应消息的系统时间确定的,第二偏移量包括第二初始值和第二设备的系统时间的跳变量。第二设备的系统时间的跳变量可以参考上文中的相关描述进行确定。第二初始值可以为16位的随机非0值*x,x的值是预设的,例如,x=10/20/100等。
[0076]
403、第一设备根据t1、t2、t1’和t2’确定第一设备与第二设备之间的第一虚拟时间偏差,并保存第一虚拟时间偏差。
[0077]
其中,t1和t2可以是从第一设备的第一计数器读取的,第一计数器用于从第一设备的第二计数器读取第一设备的系统时间,且第一计数器写入了第一偏移量(第一设备对应的偏移量)。t1’和t2’可以是从第二设备的第三计数器读取的,第三计数器用于从第二设备的第四计数器读取第二设备的系统时间,且第三计数器写入了第二偏移量(第二设备对应的偏移量)。
[0078]
第一设备与第二设备之间的第一虚拟时间偏差的计算过程可以如式(3)所示:
[0079][0080]
其中,δt表示第一设备与第二设备的虚拟时间的偏差,即第一虚拟时间偏差,rtt为网络的往返延迟。
[0081]
假设第一设备和第二设备首次进行时间偏差测量时,第一设备和第二设备都未发生时间跳变,第一设备的虚拟时间=第一设备的系统时间 λ1,第二设备的虚拟时间=第二设备的系统时间 λ2,第一次时间偏差测量得到的时间偏差δt1=第一设备的系统时间 λ1-(第二设备的系统时间 λ2);若第一设备发生时间跳变,第一设备的虚拟时间=(第一设备的系统时间-系统时间的跳变量) (λ1 系统时间的跳变量)=第一设备的系统时间 λ1,发生时间跳变后的时间偏差δt2=第一设备的系统时间 λ1-(第二设备的系统时间 λ2),即δt1=δt2。即无论哪个设备发生时间跳变,两个设备间的时间偏差不变,因此无需频繁进行时间偏差检测,可以节省功耗。
[0082]
可选的,第一设备还可以测量第一设备与第三设备之间的时间偏差,即步骤403之后还包括以下步骤:
[0083]
404、第一设备向第三设备发送第二消息,并获取第二消息的虚拟发送时间t3。
[0084]
其中,t3是根据第一偏移量和第一设备发送第二消息的系统时间确定的。
[0085]
405、第一设备从第三设备接收第二消息的响应消息,并获取第二消息的响应消息的虚拟接收时间t4。
[0086]
其中,t4是根据第一偏移量和第一设备接收第二消息的响应消息的系统时间确定的;其中,第二消息的响应消息中携带第三设备接收到第二消息的虚拟接收时间t3’和第三设备发送第二消息的响应消息的虚拟发送时间t4’,t3’是根据第三偏移量和第三设备接收
到第二消息的系统时间确定的,t4’是根据第三偏移量和第三设备发送第二消息的响应消息的系统时间确定的,第三偏移量包括第三初始值和第三设备的系统时间的跳变量。
[0087]
406、第一设备根据t3、t4、t3’和t4’确定第一设备与第三设备之间的第二虚拟时间偏差,并保存第二虚拟时间偏差。
[0088]
其中,t3和t4可以是从第一设备的第一计数器读取的。t3’和t4’可以是从第二设备的第三计数器读取的。
[0089]
第一设备确定第二虚拟时间偏差的过程可以参考步骤403中第一设备确定第一虚拟时间偏差的过程。当然,第一设备还可以测量第一设备与其他设备(例如,第四设备、第五设备等)之间的虚拟时间偏差,其过程不做赘述。
[0090]
可以理解的是,分布式系统中的任意两个设备之间可以进行时间偏差测量,每个设备可以保存该设备与分布式系统中的其它设备之间的虚拟时间偏差。
[0091]
示例性的,第一设备可以存储如表1所示的元数据(metadata)表。
[0092]
表1
[0093][0094]
其中,δt1是第一设备的虚拟时间与第二设备的虚拟时间的时间偏差。例如,δt1=第一设备的虚拟时间-第二设备的虚拟时间,或者,δt1=第二设备的虚拟时间-第一设备的虚拟时间。δt2是第一设备的虚拟时间与第三设备的虚拟时间的时间偏差。例如,δt2=第一设备的虚拟时间-第三设备的虚拟时间,或者,δt2=第三设备的虚拟时间-第一设备的虚拟时间。δt3是第一设备的虚拟时间与第四设备的虚拟时间的时间偏差。例如,δt3=第一设备的虚拟时间-第四设备的虚拟时间,或者,δt3=第四设备的虚拟时间-第一设备的虚拟时间。
[0095]
可选的,表1还可以包括λ,如表2所示:
[0096]
表2
[0097][0098]
表2可以存储在第一设备的数据库中,当数据库启动时,可以加载表2,即将λ以及各个时间偏差都加载到内存中,以便第一设备可以从内存中读取λ以及各个时间偏差。
[0099]
在一种可能的情况中,设备的虚拟时间可能需要进行修正。这是由于数据库运行期间,数据库服务(数据库程序)可以一直检测系统时间是否跳变。但数据库关闭期间,数据库服务无法检测系统时间是否跳变,若数据库关闭期间系统时间发生跳变,就需要对虚拟时间进行修正。示例性的,对第一设备的虚拟时间的修正可以由下述两个场景触发:
[0100]
(1)第一设备启动数据库时,从第一计数器读取虚拟启动时间t5,若t5小于最后一
个写入数据库的数据的虚拟写入时间t6,说明数据库关闭期间出现了时间跳变,需要修正。可以向第一计数器写入修正值,修正值包括t7与t5的差值和一个预设值。
[0101]
(2)第一设备启动数据库后第一次(首次)向数据库写入数据时,从第一计数器读取虚拟写入时间t7,若t7小于最后一个写入数据库的数据的虚拟写入时间t6,说明数据库关闭期间出现了时间跳变,需要修正。可以向第一计数器写入修正值,修正值包括t7与t6的差值和一个预设值。
[0102]
这样,若数据库未启动(数据库进程未运行)时,系统时间发生了跳变,在数据库启动后可以对设备的虚拟时间进行修正,保持虚拟时间单调递增,保证虚拟时间的可用性和准确性。
[0103]
另外,在一种可能的设计中,数据库服务打开后,可以向常驻进程请求系统时间的跳变量,这样,无需对虚拟时间进行修正。
[0104]
可以理解的是,虚拟时间修正后,第一设备可以重新计算第一设备与其他设备(例如,第二设备、第三设备等)之间的第二设备的时间偏差,并更新表1或表2的内容。具体过程参考上文,在此不做赘述。
[0105]
在一种可能的设计中,当虚拟时间的精度和系统时间的精度一致时,由于系统时间最多精确到微秒,在大量数据批量写入的场景,对虚拟时间的读取间隔可能小于微秒,导致无法对部分数据的写入先后顺序进行区分。基于此,可以引入逻辑时间(逻辑时间位/逻辑部分),逻辑时间可以用于提高虚拟时间的精度。例如,如果虚拟时间的精度(即事件源的精度)是1毫秒,可以保证以小于1,000次/s的频度均匀获取虚拟时间时能得到不一样的值,假如以大于1,000次/s(例如,1,000,000次/s)的频度获取虚拟时间,可能获取多个相同的虚拟时间,无法对操作(例如,写操作)的先后顺序进行区分。对虚拟时间增加逻辑时间之后,以大于1,000次/s的频度获取虚拟时间时,若获取到相同的虚拟时间,则可以对逻辑时间进行递增,这样可以保证以大于1,000次/s的频度获取虚拟时间时,虚拟时间的值不同,从而可以对操作(例如,写操作)的先后顺序进行区分。其中,逻辑时间的位数可以包括1位、2位或3位。
[0106]
例如,第一设备写入第一数据时,不仅可以获取第一数据的虚拟写入时间t7,还可以获取第一数据的逻辑时间。如图5所示,第一设备写入第一数据(数据1)时,可以从第一计数器读取t7,从第八计数器读取数据1的逻辑时间,然后将t7和数据1的逻辑时间作为数据1的时间戳,并将数据1和数据1的时间戳组合为一条记录写入数据库。其中,逻辑时间独立递增且在物理部分跳变时清零。示例性的,若t7与第一设备写入第一数据的前一个数据的虚拟写入时间t8相同,第一数据的逻辑时间为第一数据的前一个数据的逻辑时间加1;若t7与第一设备写入第一数据的前一个数据的虚拟写入时间t8不相同,第一数据的逻辑时间为0。其中,t7是从第一计数器读取的,第一数据的逻辑时间是从第八计数器读取的;若t7与t8相同,第八计数器加1;若t7与t8不相同,第八计数器清零。
[0107]
上文中,虚拟时间(虚拟发送时间、虚拟接收时间、虚拟写入时间等)是指根据系统时间和偏移量确定的时间(a部分)。引入逻辑时间后,也可以认为虚拟时间包括a部分和逻辑时间,可以将a部分称为虚拟时间的物理部分,将逻辑时间称为虚拟时间的逻辑部分。若无特别说明,本技术实施例中提及的虚拟时间是指根据系统时间和偏移量确定的时间(a部分)。
[0108]
上述步骤401-406说明了设备之间确定时间偏差的过程,确定出时间偏差后,在进行数据同步时,可以为来自对端设备的数据的虚拟时间补偿相应的时间偏差,以便正确确定数据写入的先后顺序。下面对第一设备与第二设备之间的数据同步过程进行说明,如图6所示,包括:
[0109]
407a、第二设备向第一设备发送数据同步消息。
[0110]
第二设备可以调用同步接口向第一设备发送数据同步消息。
[0111]
407b、第一设备从第二设备接收数据同步消息。
[0112]
其中,数据同步消息包括记录1(record1),记录1包括第二数据和第二数据的第一时间戳,第一时间戳包括第二数据在第二设备对应的虚拟写入时间t9和第二数据的逻辑时间。
[0113]
408、第一设备确定第二数据的第二时间戳。
[0114]
即第一设备将第二数据在第二设备上对应的时间(即第一时间戳)换算成第二数据在第一设备(本机)上对应的时间(即第二时间戳)。其中,第二时间戳包括第二数据在第一设备对应的虚拟写入时间t10和第二数据的逻辑时间,t10包括t9与第一虚拟时间偏差。第一设备可以从内存中读取第一虚拟时间偏差。
[0115]
如图7所示,记录1包括第二数据和第一时间戳,第二数据是关键字-值(key-value,kv)类型的数据,第二数据包括关键字1和值2,第一时间戳为1596697041000,000,1(共17位),单位为100ns(即0.1μs)。第一时间戳的前16位(1596697041000,000)是第二数据在第二设备上对应的虚拟时间(可以是从第二设备的第三计数器读取到的),第一时间戳的最后一位(第17位,即1)是第二数据的逻辑时间。假设第一虚拟时间偏差=第二设备的虚拟时间-第一设备的虚拟时间=100,即第一设备的虚拟时间比第二设备的虚拟时间慢100个单位,即100*100ns。第一设备接收到记录1后,可以在1596697041000,00(第二数据在第二设备上对应的虚拟时间)的基础上加上100,从而将t9(即1596697041000,000)修改为t10(即1596697041000,100),逻辑时间保持不变,第二时间戳是t10和逻辑时间的组合(即1596697041000,100,1)。第一设备将第二数据和第二时间戳组合成记录2。
[0116]
409、第一设备确定第二数据与数据库中的其他数据是否冲突。
[0117]
数据库中可以存储关键字-值(key-value,kv)类型的数据,每条数据(数据记录)包括关键字(key)和值(value)。第一设备确定数据库中是否有关键字相同的数据记录(同key记录)。若没有同key记录,直接入库。若有同key记录,需要进行冲突解决。
[0118]
示例性的,第一设备确定第二数据的关键字与第三数据的关键字是否相同,若相同,确定第二数据与第三数据冲突。
[0119]
410、若确定第二数据与数据库中的第三数据冲突,比较第二数据的第二时间戳与第三数据的时间戳。
[0120]
其中,第三数据的时间戳包括第三数据在第一设备对应的虚拟写入时间和第三数据的逻辑时间。可以先比较第三数据在第一设备对应的虚拟写入时间与第二数据在第一设备对应的虚拟写入时间的大小,虚拟写入时间更大时,时间戳更大。若虚拟写入时间相同,可以比较第三数据的逻辑时间与第二数据的逻辑时间,逻辑时间更大时,时间戳更大。其中,第三数据是第一设备的数据库中的任一条数据。
[0121]
示例性的,如图8所示,记录1和记录2可以参考图7的相关描述,记录3包括第三数
据和第三数据的时间戳,第三数据是kv类型的数据,第三数据包括关键字1和值1,第三数据的时间戳为1596697041000,000,0(共17位),单位为100ns(即0.1μs),第三数据的时间戳的前16位(1596697041000,000)是第三数据在第一设备上对应的虚拟时间(可以是从第一设备的第一计数器读取到的),第三数据的时间戳的最后一位(第17位,即0)可以是第二数据的逻辑时间。由于第二数据的关键字与第三数据的关键字相同,所以第二数据与第三数据冲突,需要进行冲突解决。可以比较第二数据的第二时间戳(即时间换算后的时间戳)与第三数据的时间戳的大小。具体的,可以先比较第二数据的第二时间戳中的虚拟写入时间(1596697041000,100)与第三数据的时间戳中的虚拟写入时间(1596697041000,000)的大小,虚拟写入时间更大时,时间戳更大。由于1596697041000,000《1596697041000,100,因此第二数据的时间戳(第二时间戳)更大,因此保留记录2:《关键字1,值2,1596697041000,100,1》。
[0122]
411、第一设备保存时间戳最大的数据。
[0123]
可以理解的是,时间戳最大的数据即写入时间最晚的数据。
[0124]
另外,为减少时间漂移的影响,两个设备(例如,第一设备和第二设备)首次测量时间偏差后,每隔预设时间间隔(例如,24小时)可以重新测量时间偏差。
[0125]
基于本技术实施例提供的方法,第一设备可以保存一个时间偏差列表,该时间偏差列表中包括第一设备的虚拟时间与其他设备(例如,第二设备、第三设备等)的虚拟时间的时间偏差。这样,在进行数据同步时,第一设备可以补偿相应的时间偏差。例如,外来数据(例如,来自第二设备的数据)到达第一设备后,第一设备可以将该外来数据原本的虚拟时间(例如,在第二设备上对应的虚拟时间)换算成在第一设备上对应的虚拟时间,达到尺度统一,从而第一设备能够正确识别该外来数据和第一设备上的数据写入的先后顺序。即使设备发生时间跳变,两个设备间的时间偏差也不变,不会造成由于时间偏差变化导致无法正确识别数据写入的先后顺序的问题。
[0126]
本技术另一实施例提供一种芯片系统,如图9所示,该芯片系统包括至少一个处理器901和至少一个接口电路902。处理器901和接口电路902可通过线路互联。例如,接口电路902可用于从其它装置(例如,第一设备的存储器,第二设备的存储器)接收信号。又例如,接口电路902可用于向其它装置(例如处理器901)发送信号。
[0127]
例如,接口电路902可读取存储器中存储的指令,并将该指令发送给处理器901。当所述指令被处理器901执行时,可使得第一设备或第二设备执行上述实施例中的各个步骤。
[0128]
当然,该芯片系统还可以包含其他分立器件,本技术实施例对此不作具体限定。
[0129]
本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在如图2所示的装置200上运行时,使得装置200执行上述方法实施例中第一设备或第二设备执行的各个功能或者步骤。
[0130]
本技术实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述方法实施例中第一设备或第二设备执行的各个功能或者步骤。
[0131]
通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以
上描述的全部或者部分功能。
[0132]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0133]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0134]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0135]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0136]
以上内容,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

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

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

相关文献