CN112559466A - 数据处理方法及装置 - Google Patents

数据处理方法及装置 Download PDF

Info

Publication number
CN112559466A
CN112559466A CN201910913262.XA CN201910913262A CN112559466A CN 112559466 A CN112559466 A CN 112559466A CN 201910913262 A CN201910913262 A CN 201910913262A CN 112559466 A CN112559466 A CN 112559466A
Authority
CN
China
Prior art keywords
data
module
check
storage area
target
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
Application number
CN201910913262.XA
Other languages
English (en)
Other versions
CN112559466B (zh
Inventor
张晓昱
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910913262.XA priority Critical patent/CN112559466B/zh
Publication of CN112559466A publication Critical patent/CN112559466A/zh
Application granted granted Critical
Publication of CN112559466B publication Critical patent/CN112559466B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/176Support for shared access to files; File sharing support
    • G06F16/1767Concurrency control, e.g. optimistic or pessimistic approaches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明公开了一种数据处理方法,包括:获取目标存储区域的目标数据和校验信息,校验信息包括操作过该目标存储区域的多个模块分别对应的校验字段,校验字段包括对应模块最近一次操作该目标存储区域的操作信息;根据校验信息,判断目标数据是否正确,在目标数据不正确时,根据校验信息来对目标数据进行修正;以及对修正后的目标数据进行操作以得到结果数据,将结果数据写回目标存储区域。本发明一并公开了相应的计算设备。

Description

数据处理方法及装置
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据处理方法及装置。
背景技术
随着硬件加速、边缘智能和IoT(Internet of Things,物联网)等技术的发展,越来越多的硬件模块,例如FPGA(Field Programmable Gate Array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,专用集成电路)等,开始与软件进程一起共同承担计算、调度等任务。
当多个软件进程或硬件模块共享同一存储区域的数据时,并发的读写行为会引起数据一致性问题。目前通常采用加锁(Lock)的方式来解决该问题。当某一进程或模块访问存储区域中的数据时,该存储区域会被加锁,其他进程或模块对该存储区域的访问将会进入等待,直至该存储区域被解锁后,其他进程或模块才可以对其进行访问。在这种方式下,某一时刻只有一个进程或模块访问存储区域,多个进程或模块只能串行工作,而无法并行地进行数据处理,这降低了存储区域的访问效率以及数据处理效率。
发明内容
为此,本发明提供一种数据处理方法及装置,以力图解决或至少缓解上面存在的问题。
根据本发明的第一个方面,提供一种数据处理方法,包括:获取目标存储区域的目标数据和校验信息,校验信息包括操作过目标存储区域的多个模块分别对应的校验字段,校验字段包括对应模块最近一次操作目标存储区域的操作信息;根据校验信息,判断目标数据是否正确,在目标数据不正确时,根据校验信息来对目标数据进行修正;以及对修正后的目标数据进行操作以得到结果数据,将结果数据写回目标存储区域。
根据本发明的第二个方面,提供一种数据处理方法,该方法在数据处理系统中执行,数据处理系统包括多个模块,该方法包括:多个模块分别获取目标存储区域的目标数据和校验信息,校验信息包括所述多个模块分别对应的校验字段,校验字段包括模块最近一次操作目标存储区域的操作信息;以及多个模块根据校验信息并行操作目标数据,并将操作目标数据所生成的结果数据写回目标存储区域。
根据本发明的第三个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如上所述的数据处理方法。
根据本发明的第四个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的数据处理方法。
根据本发明的数据处理方案,为目标存储区域设置校验信息,校验信息包括曾操作过目标存储区域的多个模块分别对应的校验字段,校验字段包括对应模块最近一次操作目标存储区域的操作信息。当某一模块对目标存储区域的目标数据进行操作时,可以根据目标存储区域的校验信息来判断目标数据是否正确,以及在目标数据不正确时对目标数据进行修正。
在本发明的技术方案中,通过为各模块分别设置校验字段,能够发现多个模块之间相互独立的随机异步访问所带来的数据一致性问题,并且能够对数据进行修正,以避免某一模块的数据处理结果被覆盖。本发明的技术方案能够在不加锁的条件下保证数据的一致性和完整性,避免了由于加锁而造成的数据访问及数据处理的性能下降。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了现有技术的多模块并发读写所造成的访问冲突的示意图;
图2示出了现有技术的存储区域加锁的读写过程的示意图;
图3示出了根据本发明一个实施例的数据处理方法300的流程图;
图4示出了根据本发明一个实施例的校验信息的示意图;
图5示出了根据本发明一个实施例的采用哈夫曼编码存储增量的示意图;
图6A~6D示出了根据本发明四个实施例的数据处理过程的示意图;
图7示出了根据本发明另一个实施例的校验信息的示意图;
图8示出了根据本发明另一个实施例的数据处理方法800的流程图;
图9示出了根据本发明另一个实施例的数据处理方法900的流程图;
图10示出了根据本发明一个实施例的计算设备1000的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
随着硬件加速、边缘智能和IoT等技术的发展,越来越多的硬件模块,例如FPGA、ASIC等,开始与软件进程一起共同承担计算、调度等任务。当多个软件进程或硬件模块共享同一存储区域的数据时,并发的读写行为会引发数据一致性问题。
例如,在一些应用场景中,采用智能网卡硬件对网络报文数据进行处理和转发,在该场景中,智能网卡和CPU进程可能同时具有某些内存变量的读写权限。例如,智能网卡用于对报文进行转发,其可以统计报文的收发情况,例如统计发送的报文的总数量、发送成功/失败的报文的数量和比例等。CPU用于对报文处理情况进行管理和控制,其也可以读写上述发送报文的总数、发送成功/失败的报文的数量等内存变量,根据这些变量的值来监测信道质量、检查通信异常、调整报文收发策略等。智能网卡、CPU可能同时访问某一存储区域,从而造成内存访问冲突,引发数据一致性问题,使得数据处理结果发生错误。
图1示出了现有技术的多模块并发读写所造成的访问冲突的示意图。如图1所示,在t1时刻,模块A和模块B同时访问存储区域,读取了其中的数据d0。在t2时刻,模块A对读取出的数据d0进行处理,得到处理结果d1=d0+Δd1;同时,模块B对读取出的数据d0进行处理,得到处理结果d2=d0+Δd2。随后,在t3时刻,模块A将处理结果d1回写至相应的存储区域。随后,在t4时刻,模块B将处理结果d2回写至相应的存储区域。
在t4时刻,存储区域中仅保留了模块B的处理结果,模块A的处理结果被覆盖、丢失,当前存储的数据发生错误。当前存储区域的数据为d2=d0+Δd2,而正确值应当为d0+Δd1+Δd2。
目前通常采用加锁的方式来解决多模块并发读写的问题。图2示出了现有技术的存储区域加锁的读写过程的示意图。如图2所示,在t1时刻,模块A对待访问的存储区域加锁,存储区域被加锁后,其他模块例如模块B对该存储区域的访问被阻塞,在模块A对该存储区域进行操作时,模块B无法访问该存储区域。在t2~t4时刻,模块A读取该存储区域中的数据d0,对其进行处理后得到d1=d0+Δd1,并将d1回写至相应的存储区域。随后,模块A对存储区域解锁。解锁后,模块B可以对该存储区域进行访问。在t6~t9时刻,模块B对存储区域加锁,读取存储区域中的数据d1,对其进行处理后得到d2=d1+Δd2,并将d2回写至相应的存储区域。随后,在t10时刻,模块B对存储区域解锁,其他模块可以继续访问该存储区域。
如图2所示,在加锁的情况下,某一存储区域在某一时刻仅能被一个模块访问。针对同一个存储区域,多个模块只能串行工作,无法并行地进行内存访问和数据处理,这降低了访问及数据处理效率。
针对上述问题,本发明提供一种数据处理方案,具体地,提供一种数据处理方法及装置,能够在不加锁的条件下保证数据的一致性和完整性,使得多个模块可以并行地对同一个存储区域进行访问及数据处理,避免了由于加锁而造成的存储访问及数据处理的性能下降。
图3示出了根据本发明一个实施例的数据处理方法300的流程图。方法300在计算设备中执行,例如,由计算设备中的软件模块或硬件模块执行。计算设备例如可以是服务器、工作站等高性能计算机,也可以是桌面电脑、笔记本电脑等个人配置的计算机,还可以是平板电脑、手机、智能可穿戴设备、智能家电、IoT设备等终端设备,但不限于此。
当某一模块要对某一存储区域的数据进行操作时,该模块需要执行方法300,来校验该存储区域中的数据是否正确,若数据正确,则对该数据进行后续操作;若数据不正确,则先对数据进行修正,然后再对修正后的数据进行操作。如图3所示,方法300始于步骤S310。
在步骤S310中,获取目标存储区域的目标数据和校验信息,校验信息包括操作过目标存储区域的多个模块分别对应的校验字段,校验字段包括对应模块最近一次操作目标存储区域的操作信息。
步骤S310由计算设备中的任一软件或硬件模块来执行。软件模块可以是任意应用程序(Application,缩写App),硬件模块可以是采用FPGA、ASIC等芯片实现的定制化硬件,例如智能网卡等,但不限于此。
目标存储区域即为当前模块所访问的存储区域,相应地,目标数据为目标存储区域中所存储的数据。
在本发明的实施例中,为存储区域设置校验信息,校验信息包括曾操作过该存储区域的多个模块分别对应的校验字段,校验字段包括对应模块最近一次操作该存储区域的操作信息。即,每一个模块对应于一个校验字段。每一个模块对所有模块的校验字段具有读权限,即,每一个模块均可以读取所有模块的校验字段。但是,一个模块只对其本身的校验字段具有写权限,即,一个模块只能修改其自身的校验字段的值,而不能修改其他模块的校验字段的值。
图4示出了根据本发明一个实施例的校验信息的示意图。如图4所示,某一存储区域中存储有数据Data,该存储区域曾经被模块A和模块B操作过。当模块A第一次操作该存储区域后,生成模块A对应的校验字段V(A);随后,当模块A每一次操作该存储区域,都会更新其校验字段V(A)的值。类似地,当模块B第一次操作该存储区域后,生成模块B对应的校验字段V(B);随后,当模块B每一次操作该存储区域,都会更新其校验字段V(B)的值。模块A可以对其自身的校验字段V(A)进行读写,但对模块B的校验字段V(B)仅具有读权限。类似地,模块B可以对其自身的校验字段V(B)进行读写,但对模块A的校验字段V(A)仅具有读权限。
需要说明的是,为了更清楚、简洁地描述本发明的技术方案,在图4所示的实施例中,将用于存储数据Data的存储区域以及用于存储校验字段V(A)、V(B)的存储区域紧邻绘制,但本领域技术人员可以理解,将三者紧邻绘制并不表示三者具有相邻的物理地址。在实践中,数据Data、校验字段V(A)、V(B)的物理地址可能相去甚远。
在本发明的实施例中,模块的校验字段包括该模块最近一次操作存储区域的操作信息。操作信息用于记录模块最近一次的操作行为,本发明对操作信息所包括的具体内容不做限制。操作信息例如可以包括模块上一次从存储区域中读取的数值、上一次向存储区域中写入的数值、上一次操作存储区域的时间等,但不限于此。
根据一种实施例,模块的校验字段包括校验值和增量。
校验值为模块最近一次向存储区域写入的数据的映射值。数据的映射值为采用预设的映射函数对该数据进行映射所得到的值。映射函数可以是任意函数或算法,例如任意数学函数、哈希(Hash)算法、MD5算法等,但不限于此。根据一种实施例,映射函数也可以是形如f(x)=x的函数,基于该函数,数据的映射值即为该数据本身。例如,模块A在最近一次对存储区域的操作中,从该存储区域中读取数据d0,对数据d0进行处理,得到d1=d0+Δd1,将d1回写至该存储区域。那么,本次操作的校验值为数据d1的映射值。
增量为模块最近一次向存储区域写入的数据与从该存储区域中读取的数据的差。例如,模块A在最近一次对存储区域的操作中,从该存储区域中读取数据d0,对数据d0进行处理,得到d1=d0+Δd1,将d1回写至该存储区域。那么,本次操作的增量为写入的数据d1与读取的数据d0之差,即Δd1。
根据一种实施例,为了节省存储空间,可以采用优化的存储方式,例如采用哈夫曼编码来存储增量。图5示出了根据本发明一个实施例的采用哈夫曼编码来存储增量的示意图。如图5所示,增量的值有五个,分别为1~5,这五个增量的出现频次分别为10、8、9、2、1,即,频次集合为{10,8,9,2,1}。根据五个增量出现的频次构造哈夫曼树,即:
取集合中最小的两个数1、2作为左右子树构造一个新树,构造出的节点值为3,将3加入集合中,将1、2从集合中删除,得到集合{10,8,9,3};
随后,从集合中取两个最小的数3、8构造新树,构造出的节点值为11,将11加入集合中,将3、8从集合中删除,得到集合{10,11,9};
随后,从集合中取两个最小的数9、10构造新树,构造出的节点值为19,将19加入集合中,将9、10从集合中删除,得到集合{19,11};
最后,将集合中的两个数11、19构造新树,构造出的节点即为根节点,其值为30。至此,哈夫曼树构造完毕,哈夫曼树的结构如图5所示,图5中的阴影节点即为构造出的节点。在该哈夫曼树中,值为1、2、8、9、10的节点分别对应于增量5、4、2、3、1,从根节点开始,左子树编码为0,右子树编码为1,相应地,增量1~5的编码分别为11、01、10、001、000,这样,增量1~5所占用的存储空间共为2+2+2+3+3=12比特(bit)。若采用数值型的数据类型来直接存储增量,例如,采用int8数据类型来存储增量,那么,每一个增量值都要占用8bit的存储空间,1~5五个增量需要占用40bit的存储空间。显然,哈夫曼编码的方式大大减小了存储增量所占用的存储空间。
应当指出,哈夫曼编码仅为优化存储的一种方式,除哈夫曼编码之外,本领域技术人员还可以采用其他方法来优化存储,例如,采用关键字编码方式等,本发明对优化存储所采用的具体方法不做限制。
在本发明的实施例中,为各存储区域设置校验信息,校验信息包括曾操作过该存储区域的多个模块分别对应的校验字段。相应地,在步骤S310中,当某一模块操作目标存储区域时,可以获取目标存储区域的校验信息,目标存储区域的校验信息包括操作过目标存储区域的多个模块的校验字段,每个校验字段包括对应模块最近一次操作目标存储区域的操作信息。
随后,在步骤S320中,根据校验信息,判断目标数据是否正确,在目标数据不正确时,根据校验信息来对目标数据进行修正。
根据一种实施例,可以按照以下步骤1~4来判断目标数据是否正确:
步骤1:将目标数据作为中间数据的初始值,将目标数据的映射值作为中间映射值的初始值,将多个模块构成模块集合。
步骤2:将模块集合中校验值与中间映射值相同的模块确定为在先模块,将在先模块从模块集合中移除,将中间数据与在先模块的增量的差作为中间数据,将中间数据的映射值作为中间映射值。
步骤3:重复步骤2,直至模块集合为空,或模块集合中不存在校验值与中间映射值相同的模块为止。
步骤4:当模块集合为空时,判断目标数据正确。
上述步骤1中定义了两个中间变量,即中间数据temp_data和中间映射值temp_map,并为二者赋初值:
temp_data=obj_data;
temp_map=f(temp_data)=f(obj_data);
其中,obj_data为目标数据,f()为预设的映射函数。
另外,将曾操作过目标存储区域的多个模块组成模块集合S。
在步骤2中,将中间映射值分别与各模块的校验值进行比对,将校验值与中间应设置相同的模块确定为在先模块pre_module。随后,根据在先模块pre_module来更新模块集合S、中间数据temp_data和中间映射值temp_map的值,即:将在先模块从模块集合中移除,将中间数据与在先模块的增量的差作为中间数据,将中间数据的映射值作为中间映射值,该过程的伪代码如下,其中,delta(pre_module)表示在先模块pre_module的增量。
S=S-pre_module;
temp_data=temp_data-delta(pre_module);
temp_map=f(temp_data);
重复步骤2,直至模块集合S为空,或模块集合中不存在校验值与中间映射值相同的模块为止。若终止时,模块集合S为空,则目标数据正确,无需对其进行修正;若终止时,模块集合S不为空,则目标数据错误,需要对目标数据进行修正。
根据一种实施例,可以按照以下步骤来对目标数据进行修正:
执行了步骤1~4后,若模块集合S不为空且模块集合中不存在校验值与中间映射值相同的模块时,表明目标数据错误,需要进行修正。此时,将当前模块集合S中的模块记为冲突模块conf_module。本领域技术人员可以理解,冲突模块可能有一个或多个。
随后,将目标数据obj_data与各冲突模块的增量的和作为修正后的目标数据,即,有
Figure BDA0002215317860000091
其中,i为计数变量,n为冲突模块的数量,delta(conf_modulei)为第i个冲突模块的增量。按照上式进行计算,即可将目标数据obj_data修正为正确值。
在将目标数据修正为正确值后,当前模块可以对目标数据执行预定操作,即,在步骤S320之后,执行步骤S330。
在步骤S330中,对修正后的目标数据进行操作以得到结果数据,将结果数据写回目标存储区域。
根据一种实施例,步骤S330包括:将修正后的目标数据加上预设增量以得到结果数据,将结果数据写入目标存储区域;更新当前模块的校验字段,将校验值更新为结果数据的映射值,将增量更新为预设增量。
图6A~6D示出了根据本发明四个实施例的数据处理过程的示意图,以更清楚地说明本发明的判断目标数据正确性、对目标数据进行修正以及在对修正后的目标数据进行数据处理的过程。
在图6A所示的实施例中,在t1~t4时间段内,模块A、模块B分别对存储区域进行了读写。模块A在t3时刻写入数据d1后,将其校验字段V(A)更新为{f(d1),Δd1},其中,f(d1)为校验值,即数据d1的映射值,Δd1为本次操作的增量。模块B在t4时刻写入数据d2后,将其校验字段V(B)更新为{f(d2),Δd2},其中,f(d2)为校验值,即数据d2的映射值,Δd2为本次操作的增量。
由于在t1~t4时间段内,模块A和模块B进行了并发读写,导致在t4时刻,模块A的处理结果丢失,当前存储的数据d2出现错误,正确值应当为d0+Δd1+Δd2。
在t5时刻,模块A再次对该存储区域进行操作,模块A获取当前存储区域中存储的数据d2,并获取模块A的校验字段V(A)和模块B的校验字段V(B)。
随后,在t6时刻,模块A根据校验字段V(A)、V(B)来判断d2是否正确,并在其不正确时,对其进行修正。具体地,模块A按照以下方法来判断d2是否正确并对其进行修正:
首先,设置模块集合S={模块A,模块B},中间数据的初始值为d2,中间映射值的初始值为数据d2的映射值f(d2)。
随后,将中间映射值f(d2)分别与模块A、模块B的校验值进行比对,由于中间映射值f(d2)与模块B的校验值f(d2)相同,因此,模块B为在先模块。将模块B从集合S中删除,将中间数据更新为中间数据与在先模块B的增量之差,即将中间数据更新为d2-Δd2=d0,将中间映射值更新为中间数据的映射值,即将中间映射值更新为f(d0)。
随后,将更新后的中间映射值f(d0)与模块A的校验值f(d1)进行比对(因为此时模块集合S中仅剩模块A),由于中间映射值f(d0)≠f(d1),因此校验过程结束。由于此时模块集合S={模块A},S不是空集,表明数据d2出现错误,需要对其进行修正。将数据修正为d2与模块A的增量之和,即,修正后的d2=d2+Δd1=d0+Δd2+Δd1,这样,d2便被修正为正确值了。
当d2被修正为正确值后,在t7时刻,模块A对修正后的d2进行处理,得到结果数据d3=d2+Δd3。随后,在t8时刻,模块A将d3回写至存储区域,并将模块A的校验字段更新为V(A)={f(d3),Δd3}。
在图6B所示的实施例中,在t1~t6时间段内,模块A、模块B先后对存储区域中的数据进行了处理,期间不存在访问冲突,在t6时刻,模块B回写的数据d2为正确值。
在t7时刻,模块A再次对该存储区域进行操作,模块A获取当前存储区域中存储的数据d2,并获取模块A的校验字段V(A)和模块B的校验字段V(B)。
随后,在t8时刻,模块A根据校验字段V(A)、V(B)来判断d2是否正确,并在其不正确时,对其进行修正。具体地:
首先,设置模块集合S={模块A,模块B},中间数据的初始值为d2,中间映射值的初始值为数据d2的映射值f(d2)。
随后,将中间映射值f(d2)分别与模块A、模块B的校验值进行比对,由于中间映射值f(d2)与模块B的校验值f(d2)相同,因此,模块B为在先模块。将模块B从集合S中删除,将中间数据更新为中间数据与在先模块B的增量之差,即将中间数据更新为d2-Δd2=d1,将中间映射值更新为中间数据的映射值,即将中间映射值更新为f(d1)。
随后,将更新后的中间映射值f(d1)与模块A的校验值f(d1)进行比对(因为此时模块集合S中仅剩模块A),由于二者相等,因此将模块A确定为在先模块,将模块A从模块集合S中删除,此时模块集合S为空集,校验过程结束,数据d2为正确值。
随后,在t9时刻,模块A对d2进行处理,得到结果数据d3=d2+Δd3。随后,在t10时刻,模块A将d3回写至存储区域,并将模块A的校验字段更新为V(A)={f(d3),Δd3}。
在图6C所示的实施例中,在t1~t5时间段内,模块A、模块B、模块C对存储区域进行了并发读写,导致在t5时刻仅保留了模块C的处理结果,模块A、模块B的处理结果丢失,当前存储的数据d3出现错误,正确值应当为d0+Δd1+Δd2+Δd3。
在t6时刻,模块A再次对该存储区域进行操作,模块A获取当前存储区域中存储的数据d3,并获取模块A的校验字段V(A)、模块B的校验字段V(B)以及模块C的校验字段V(C)。
随后,在t7时刻,模块A根据校验字段V(A)、V(B)、V(C)来判断d3是否正确,并在其不正确时,对其进行修正。具体地:
首先,设置模块集合S={模块A,模块B,模块C},中间数据的初始值为d3,中间映射值的初始值为数据d3的映射值f(d3)。
随后,将中间映射值f(d3)分别与模块A、模块B、模块C的校验值进行比对,由于中间映射值f(d3)与模块C的校验值f(d3)相同,因此,模块C为在先模块。将模块C从集合S中删除,将中间数据更新为中间数据与在先模块C的增量之差,即将中间数据更新为d3-Δd3=d0,将中间映射值更新为中间数据的映射值,即将中间映射值更新为f(d0)。
随后,将更新后的中间映射值f(d0)分别与模块A、模块B的校验值进行比对,由于f(d0)≠f(d1)且f(d0)≠f(d2),因此不存在校验值与中间映射值相同的模块,校验过程结束。此时模块集合S={模块A,模块B},S不是空集,表明数据d3出现错误,需要对其进行修正。将数据修正为d3与模块A的增量Δd1以及模块B的增量Δd2之和,即,修正后的d3=d3+Δd1+Δd2=d0+Δd3+Δd1+Δd2,这样,d3便被修正为正确值了。
当d3被修正为正确值后,在t8时刻,模块A对修正后的d3进行处理,得到结果数据d4=d3+Δd4。随后,在t9时刻,模块A将d4回写至存储区域,并将模块A的校验字段更新为V(A)={f(d4),Δd4}。
在图6D所示的时间段内,在在t1~t6时间段内,模块A与模块B、模块B与模块C对存储区域进行了并发读写,导致在t6时刻仅保留了模块A和模块C的处理结果,模块B的处理结果丢失,当前存储的数据d3出现错误,正确值应当为d0+Δd1+Δd2+Δd3。
在t7时刻,模块A再次对该存储区域进行操作,模块A获取当前存储区域中存储的数据d3,并获取模块A的校验字段V(A)、模块B的校验字段V(B)以及模块C的校验字段V(C)。
随后,在t8时刻,模块A根据校验字段V(A)、V(B)、V(C)来判断d3是否正确,并在其不正确时,对其进行修正。具体地:
首先,设置模块集合S={模块A,模块B,模块C},中间数据的初始值为d3,中间映射值的初始值为数据d3的映射值f(d3)。
随后,将中间映射值f(d3)分别与模块A、模块B、模块C的校验值进行比对,由于中间映射值f(d3)与模块C的校验值f(d3)相同,因此,模块C为在先模块。将模块C从集合S中删除,将中间数据更新为中间数据与在先模块C的增量之差,即将中间数据更新为d3-Δd3=d1,将中间映射值更新为中间数据的映射值,即将中间映射值更新为f(d1)。
随后,将更新后的中间映射值f(d1)分别与模块A、模块B的校验值进行比对,由于中间映射值f(d1)与模块A的校验值f(d1)相同,因此,模块A为在先模块。将模块A从集合S中删除,将中间数据更新为中间数据与在先模块A的增量之差,即将中间数据更新为d1-Δd1=d0,将中间映射值更新为中间数据的映射值,即将中间映射值更新为f(d0)。
随后,将更新后的中间映射值f(d0)与模块B的校验值f(d2)进行比对,由于f(d0)≠f(d2),因此不存在校验值与中间映射值相同的模块,校验过程结束。此时模块集合S={模块B},S不是空集,表明数据d3出现错误,需要对其进行修正。将数据修正为d3与模块B的增量Δd2之和,即,修正后的d3=d3+Δd2=d1+Δd3+Δd2=d0+Δd1+Δd3+Δd2,这样,d3便被修正为正确值了。
当d3被修正为正确值后,在t9时刻,模块A对修正后的d3进行处理,得到结果数据d4=d3+Δd4。随后,在t10时刻,模块A将d4回写至存储区域,并将模块A的校验字段更新为V(A)={f(d4),Δd4}。
根据一种实施例,目标存储区域的校验信息除了包括操作过该存储区域的各模块的校验字段之外,还包括采用预设算法生成的目标数据的校验码。应当指出,预设算法可以是任意算法,相应地,校验码可以是任意长度、任意内容的字符串。例如,校验码可以是采用ECC(Error Checking and Correcting,错误检查和纠正)内存校验算法所生成的ECC编码,或采用CRC(Cyclic Redundancy Check,循环冗余校验)算法生成的CRC码等,但不限于此。应用了ECC编码的、能够实现错误检查和纠正的内存即为ECC内存。
图7示出了根据本发明一个实施例的包括校验码的校验信息的示意图。如图7所示,某一存储区域中存储有数据Data,该存储区域的校验信息包括根据采用ECC算法生成的数据Data的校验码ECC、模块A的校验字段V(A)和模块B的校验字段V(B)。模块A可以对数据Data、校验码ECC及其自身的校验字段V(A)进行读写,但对模块B的校验字段V(B)仅具有读权限。类似地,模块B可以对数据Data、校验码ECC及其自身的校验字段V(B)进行读写,但对模块A的校验字段V(A)仅具有读权限。
需要说明的是,为了更清楚、简洁地描述本发明的技术方案,在图7所示的实施例中,将用于存储数据Data的存储区域以及用于存储校验码ECC、校验字段V(A)、V(B)的存储区域紧邻绘制,但本领域技术人员可以理解,将四者紧邻绘制并不表示四者具有相邻的物理地址。在实践中,数据Data、校验码ECC、校验字段V(A)、V(B)的物理地址可能相去甚远。
图8示出了根据本发明一个实施例的数据处理方法800的流程图,方法800适用于校验信息包括校验码的情形。方法800在计算设备中执行,例如,由计算设备中的软件模块或硬件模块执行。如图8所示,方法800始于步骤S810。
在步骤S810中,获取目标存储区域的目标数据和校验信息,校验信息包括目标数据的校验码和曾操作过目标存储区域的多个模块的校验字段,校验字段包括校验值和增量。校验码、校验字段所包括的具体内容可以参考前文描述,此处不再赘述。
随后,在步骤S820中,计算目标数据的校验码。需要说明的是,此处计算校验码所采用的算法与生成所获取到的校验码所采用的算法相同。例如,若步骤S810中获取到的校验码采用ECC算法生成,则在步骤S820中,亦采用ECC算法来计算目标数据的校验码。
随后,在步骤S830中,判断步骤S820中计算出的校验码与步骤S810中获取到的校验码是否相同,若相同,则执行后续步骤S850;若不同,则执行步骤S840,拒绝本次数据操作。
在步骤S850中,判断步骤S810中获取到的目标数据是否正确。若目标数据正确,则执行步骤S870;若目标数据不正确,则执行步骤S860。
在步骤S860中,根据多个模块的校验字段来对目标数据进行修正。随后,执行步骤S870。
在步骤S870中,将目标数据加上预设增量以得到结果数据,将结果数据写入目标存储区域;将执行本次数据操作的模块的校验值更新为结果数据的映射值,增量更新为预设增量。
步骤S850、S860的具体实施方法可以参考前述步骤S320的相关描述,步骤S870的具体实施方法可以参考前述步骤S330的相关描述,此处不再赘述。
前述数据处理方法300、800描述了单个模块的数据处理过程,即:当某一模块要对目标存储区域中的目标数据进行操作时,先根据该目标存储区域的校验信息来判断目标数据是否正确,若目标数据正确,则对目标数据进行后续操作以得到结果数据,将结果数据写回目标存储区域;若目标数据不正确,则表明目标数据因被多个模块并行访问而产生了数据一致性问题,这时需要根据校验信息来对目标数据进行修正,然后再对修正后的数据进行操作,将结果数据写回目标存储区域。
基于单个模块执行的数据处理方法300、800,本发明进一步提供一种数据处理方法900,方法900在由多个模块组成的数据处理系统中执行。数据处理系统可以是任意数量个软件模块、硬件模块的组合。数据处理系统中的多个模块可以访问同一个目标存储区域,并且每一个模块均可以独立地对目标存储区域中的数据进行操作。如图9所示,方法900始于步骤S910。
在步骤S910中,多个模块分别获取目标存储区域的目标数据和校验信息,校验信息包括多个模块分别对应的校验字段,校验字段包括模块最近一次操作目标存储区域的操作信息。
在步骤S910中,多个模块可以并行地访问目标存储区域,每个模块可以独立地获取目标存储区域的目标数据和校验信息。各模块获取目标存储区域的目标数据和校验信息的具体步骤可以参考前述步骤S310的相关描述,此处不再赘述。
随后,在步骤S920中,多个模块根据校验信息并行操作目标数据,并将操作目标数据所生成的结果数据写回目标存储区域。
在步骤S920中,多个模块可以并行地对目标数据进行操作,并将操作目标数据所生成的结果数据写回目标存储区域。具体地,每个模块均独立地执行前述步骤S320和S330,先根据校验信息来判断目标数据的正确性,在目标数据不正确时,根据校验信息来对目标数据进行修正;随后对修正后的数据进行操作,将生成的结果数据写回目标区域。步骤S320保证了目标数据的一致性,使得多个模块可以并行地对目标数据进行操作,而不会产生错误数据。图10示出了根据本发明一个实施例的计算设备1000的示意图。如图10所示,计算设备1000包括处理器1010和存储器1020。存储器1020中存储有程序指令,当程序指令被处理器1010读取并执行时,使得计算设备1000执行本发明的数据处理方法300或800。
需要说明的是,在本发明的实施例中,操作存储区域的模块包括硬件模块和软件模块。虽然在本说明书的背景技术中描述的是硬件模块与软件之间的存储访问冲突所引发的数据一致性问题,但是,本领域技术人员可以理解,本发明的数据处理方法不仅可以用于解决硬件模块与软件模块之间的访问冲突,还可以用于解决多个硬件模块之间的访问冲突以及多个软件之间的访问冲突。
不过,本发明的数据处理方案在硬件模块与软件模块之间、多个硬件模块之间、多个软件模块之间三种应用场景下的处理效率可能存在差异。由于硬件模块的计算效率较高,因此,将本发明的数据处理方案应用于涉及硬件模块的共享访问场景中(包括硬件模块与软件模块之间的共享访问,和多个硬件模块之间的共享访问),可以在仅增加少许计算量(即根据校验字段来校验目标数据的正确性并对其进行修正的计算量)及计算时间开销的条件下,保证数据的一致性和完整性,避免因加锁而造成的性能下降。
由于软件模块的计算效率相较于硬件模块更慢,因此,若将本发明的数据处理方法应用于多个软件模块之间的共享访问场景中,虽然避免了加锁所带来的访问及处理性能下降,但是亦增加了校验目标数据的正确性并对其进行修正的计算步骤,两相权衡,将本发明的数据处理方案应用于多个软件模块之间的共享访问场景时,其有益效果不及涉及硬件模块的共享访问场景那么明显。因此,本发明优选地应用于涉及硬件模块的共享访问的场景中。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的数据处理方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。

Claims (13)

1.一种数据处理方法,包括:
获取目标存储区域的目标数据和校验信息,所述校验信息包括操作过所述目标存储区域的多个模块分别对应的校验字段,所述校验字段包括对应模块最近一次操作所述目标存储区域的操作信息;
根据所述校验信息,判断所述目标数据是否正确,在所述目标数据不正确时,根据所述校验信息来对所述目标数据进行修正;以及
对修正后的目标数据进行操作以得到结果数据,将所述结果数据写回所述目标存储区域。
2.如权利要求1所述的方法,其中,所述校验字段包括校验值和增量,所述校验值为对应模块最近一次向所述目标存储区域写入的数据的映射值,所述增量为对应模块最近一次向所述目标存储区域写入的数据与从所述目标存储区域中读取的数据的差。
3.如权利要求2所述的方法,其中,所述数据的映射值为采用预设的映射函数对所述数据进行映射所得到的值。
4.如权利要求2所述的方法,其中,所述增量采用哈夫曼编码存储。
5.如权利要求2-4中任一项所述的方法,其中,所述判断所述目标数据是否正确的步骤,包括:
将目标数据作为中间数据的初始值,将目标数据的映射值作为中间映射值的初始值,所述多个模块构成模块集合;
将模块集合中校验值与中间映射值相同的模块确定为在先模块,将所述在先模块从所述模块集合中移除,将中间数据与所述在先模块的增量的差作为中间数据,将中间数据的映射值作为中间映射值;
重复上一步骤,直至模块集合为空,或模块集合中不存在校验值与中间映射值相同的模块为止;
当所述模块集合为空时,所述目标数据正确。
6.如权利要求5所述的方法,其中,所述根据所述校验信息对所述目标数据进行修正的步骤,包括:
当模块集合不为空且模块集合中不存在校验值与中间映射值相同的模块时,将当前模块集合中的模块记为冲突模块;
将所述目标数据与各冲突模块的增量的和作为修正后的目标数据。
7.如权利要求2所述的方法,其中,所述对修正后的目标数据进行操作以得到结果数据,将所述结果数据写回所述目标存储区域的步骤包括:
将修正后的目标数据加上预设增量以得到结果数据,将所述结果数据写入所述目标存储区域;
将执行本次数据操作的模块的校验值更新为所述结果数据的映射值,增量更新为所述预设增量。
8.如权利要求1所述的方法,其中,所述多个模块包括硬件模块和软件模块。
9.如权利要求1所述的方法,其中,所述校验信息还包括采用预设算法生成的所述目标数据的校验码;
所述根据所述校验信息,判断所述目标数据是否正确的步骤包括:
计算所述目标数据的校验码;
若计算出的校验码与获取到的校验码相同,则根据所述多个模块的校验字段来判断所述目标数据是否正确;
若计算出的校验码与获取到的校验码不同,则拒绝本次数据操作。
10.如权利要求9所述的方法,其中,所述校验码为内存ECC编码。
11.一种数据处理方法,在数据处理系统中执行,所述数据处理系统包括多个模块,所述方法包括:
所述多个模块分别获取目标存储区域的目标数据和校验信息,所述校验信息包括所述多个模块分别对应的校验字段,所述校验字段包括模块最近一次操作所述目标存储区域的操作信息;以及
所述多个模块根据所述校验信息并行操作所述目标数据,并将操作目标数据所生成的结果数据写回所述目标存储区域。
12.一种计算设备,包括:
至少一个处理器;和
存储有程序指令的存储器,当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。
13.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。
CN201910913262.XA 2019-09-25 2019-09-25 数据处理方法及装置 Active CN112559466B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910913262.XA CN112559466B (zh) 2019-09-25 2019-09-25 数据处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910913262.XA CN112559466B (zh) 2019-09-25 2019-09-25 数据处理方法及装置

Publications (2)

Publication Number Publication Date
CN112559466A true CN112559466A (zh) 2021-03-26
CN112559466B CN112559466B (zh) 2023-12-29

Family

ID=75029410

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910913262.XA Active CN112559466B (zh) 2019-09-25 2019-09-25 数据处理方法及装置

Country Status (1)

Country Link
CN (1) CN112559466B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102084360A (zh) * 2008-04-06 2011-06-01 弗森-艾奥公司 用于确认从数据存储设备读取正确的数据段的装置、系统和方法
CN102412985A (zh) * 2011-10-31 2012-04-11 烽火通信科技股份有限公司 一种基于操作分离的网管系统对象管理方法
US20150331898A1 (en) * 2014-05-16 2015-11-19 Huawei Technologies Co., Ltd. Method and apparatus for concurrent access of mixed services
US20160359711A1 (en) * 2015-06-05 2016-12-08 Cisco Technology, Inc. Late data detection in data center
CN110059074A (zh) * 2019-03-18 2019-07-26 华迪计算机集团有限公司 一种用于内存数据库的数据处理方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102084360A (zh) * 2008-04-06 2011-06-01 弗森-艾奥公司 用于确认从数据存储设备读取正确的数据段的装置、系统和方法
CN102412985A (zh) * 2011-10-31 2012-04-11 烽火通信科技股份有限公司 一种基于操作分离的网管系统对象管理方法
US20150331898A1 (en) * 2014-05-16 2015-11-19 Huawei Technologies Co., Ltd. Method and apparatus for concurrent access of mixed services
US20160359711A1 (en) * 2015-06-05 2016-12-08 Cisco Technology, Inc. Late data detection in data center
CN110059074A (zh) * 2019-03-18 2019-07-26 华迪计算机集团有限公司 一种用于内存数据库的数据处理方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
H. GAO, W.H. HESSELINK: "A general lock-free algorithm using compare-and-swap", SCIENCEDIRECT *
陈俊;周宽久;贾敏;: "多线程并行程序数据竞争静态检测方法", 计算机工程与设计, no. 05 *
黄建伟;张召;钱卫宁;: "分布式日志结构数据库系统的主键维护方法研究", 华东师范大学学报(自然科学版), no. 05 *

Also Published As

Publication number Publication date
CN112559466B (zh) 2023-12-29

Similar Documents

Publication Publication Date Title
US10031806B2 (en) Efficient repair of erasure coded data based on coefficient matrix decomposition
CN107832062B (zh) 一种程序更新方法及终端设备
US9275096B2 (en) Optimized b-tree
CN111078662B (zh) 一种区块链数据存储方法与装置
US20210109920A1 (en) Method for Validating Transaction in Blockchain Network and Node for Configuring Same Network
KR20060057253A (ko) 통합노드 프로세싱을 이용한 저밀도 패리티 검사 코드복호 방법 및 장치
CN110706101B (zh) 在区块链中并发执行交易的方法和装置
Van Dijk et al. Tagged BDDs: Combining reduction rules from different decision diagram types
CN112559529B (zh) 数据存储方法、装置、计算机设备及存储介质
CN110572164B (zh) Ldpc译码方法、装置、计算机设备及存储介质
CN111125040A (zh) 管理重做日志的方法、装置及存储介质
CN110535476B (zh) Ldpc软译码器软信息存储优化方法、装置、计算机设备及存储介质
CN115408730A (zh) 数据处理方法、芯片、电子设备及存储介质
EP2370899B1 (en) Poison bit error checking code scheme
CN106068499A (zh) 非阻塞命令
CN111247516A (zh) 一种电路结构、系统级芯片SoC、处理数据的方法
US11381259B2 (en) Decoding method and device for turbo product codes, decoder and computer storage medium
CN112559466B (zh) 数据处理方法及装置
CN112732427A (zh) 一种基于Redis集群的数据处理方法、系统和相关装置
US11934835B2 (en) Computer system and method for validation of parallelized computer programs
CN115982310A (zh) 一种自带验证功能的链表生成方法及电子设备
US8473464B2 (en) Method and device for data recovery using bit logging
CN113656507B (zh) 区块链系统中执行交易的方法及装置
US11366719B1 (en) Method, device and computer program product for storage management
US11200146B2 (en) Method and system for counter example guided loop abstraction refinement

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