CN113342539A - 数据处理方法、装置、电子设备和存储介质 - Google Patents

数据处理方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN113342539A
CN113342539A CN202110605117.2A CN202110605117A CN113342539A CN 113342539 A CN113342539 A CN 113342539A CN 202110605117 A CN202110605117 A CN 202110605117A CN 113342539 A CN113342539 A CN 113342539A
Authority
CN
China
Prior art keywords
data
processing
request
counter
current value
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.)
Pending
Application number
CN202110605117.2A
Other languages
English (en)
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.)
Beijing Dajia Internet Information Technology Co Ltd
Original Assignee
Beijing Dajia Internet Information Technology Co 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 Beijing Dajia Internet Information Technology Co Ltd filed Critical Beijing Dajia Internet Information Technology Co Ltd
Priority to CN202110605117.2A priority Critical patent/CN113342539A/zh
Publication of CN113342539A publication Critical patent/CN113342539A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开关于数据处理方法、装置、电子设备和存储介质。所述方法包括:接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。

Description

数据处理方法、装置、电子设备和存储介质
技术领域
本公开涉及数据管理领域,尤其涉及一种数据处理方法、装置、电子设备和存储介质。
背景技术
对于数据库中存储的数据,通常可以进行增加、删除、修改等操作。以多种业务层级对应的多层级数据为例,不同层级对应的线程对相应层级的数据进行上述操作可能会产生脏数据,从而影响业务***稳定性。例如,数据库可以按照项目-任务组-任务-子任务等从高到低的层级顺序存储业务数据,若高层级线程A(如项目线程)在删除某任务组数据(该任务组的相关数据,下同)时,低层级线程B(如该任务组的内部线程)正在该任务组中创建任务,则线程B创建任务成功后,可能查询不到新建任务所在的任务组,因为该任务组已被线程A删除,导致该新建任务的任务数据成为脏数据。
针对这一问题,相关技术中采用分布式锁加以解决,例如由低层级线程B对任务创建操作对应的项目数据添加排它锁,从而在低线程B创建任务的时间段内排除其他线程针对该项目数据的操作,以避免产生脏数据。然而,若同一实现还存在低线程C、低线程D等请求操作同一项目组内的多个项目数据,则因为上述排它锁的存在,其他低层级线程只能等待低线程B操作完成才能够依次进行操作,从而导致数据库的数据处理效率降低,极大影响了业务***的吞吐量。
发明内容
本公开提供了数据处理方法、装置、电子设备和存储介质,以至少解决相关技术中的技术问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提出一种数据处理方法,包括:
接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;
在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;
响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
可选的,还包括:
在所述第二数据被设置有排它锁的情况下,终止针对所述任一第一处理请求的响应过程;或者,
在所述第二数据被设置有排它锁的情况下,等待第一时长后重新检查所述第二数据是否被设置有排它锁,若在针对所述排它锁的检查次数达到第一次数时,所述第二数据仍被设置有排它锁,则终止针对所述任一第一处理请求的响应过程。
可选的,还包括:
在接收到针对所述第二数据的第二处理请求的情况下,为所述第一数据和第二数据设置排它锁;
若所述计数器的当前值等于所述计数初始值,则响应于所述第二处理请求处理所述第二数据;
若所述计数器的当前值大于所述计数初始值,则终止响应所述第二处理请求,或者等待直至所述计数器的当前值等于所述计数初始值时,响应于所述第二处理请求处理所述第二数据;
在处理所述第二数据完成后释放为所述第一数据和第二数据设置的排它锁。
可选的,还包括:
在终止针对任一请求的响应过程后,向所述任一请求的发起方返回针对所述任一请求的响应失败消息。
可选的,还包括:
在所述计数器的当前值大于所述计数初始值的情况下,若所述当前值对应的多个第一处理请求分别用于请求处理多个第一数据,则响应于所述多个第一处理请求分别处理所述多个第一数据;
若所述当前值对应的多个第一处理请求用于请求处理同一第一数据,则按照所述多个第一处理请求的接收顺序依次响应于所述多个第一处理请求处理该第一数据。
可选的,所述计数初始值为0,所述预设数值为1。
可选的,针对任一数据的处理包括下述至少之一:
***新增数据、删除已有数据、更改已有数据。
根据本公开实施例的第二方面,提出一种数据处理装置,包括:
请求接收模块,被配置为接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;
数值增加模块,被配置为在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;
数值减少模块,被配置为响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
可选的,还包括:
第一终止模块,被配置为在所述第二数据被设置有排它锁的情况下,终止针对所述任一第一处理请求的响应过程;或者,
第二终止模块,被配置为在所述第二数据被设置有排它锁的情况下,等待第一时长后重新检查所述第二数据是否被设置有排它锁,若在针对所述排它锁的检查次数达到第一次数时,所述第二数据仍被设置有排它锁,则终止针对所述任一第一处理请求的响应过程。
可选的,还包括:
排它锁设置模块,被配置为在接收到针对所述第二数据的第二处理请求的情况下,为所述第一数据和第二数据设置排它锁;
第一处理模块,被配置为若所述计数器的当前值等于所述计数初始值,则响应于所述第二处理请求处理所述第二数据;
第二处理模块,被配置为若所述计数器的当前值大于所述计数初始值,则终止响应所述第二处理请求,或者等待直至所述计数器的当前值等于所述计数初始值时,响应于所述第二处理请求处理所述第二数据;
排它锁释放模块,被配置在处理所述第二数据完成后释放为所述第一数据和第二数据设置的排它锁。
可选的,还包括:
消息返回模块,被配置为在终止针对任一请求的响应过程后,向所述任一请求的发起方返回针对所述任一请求的响应失败消息。
可选的,还包括:
分别处理模块,被配置为在所述计数器的当前值大于所述计数初始值的情况下,若所述当前值对应的多个第一处理请求分别用于请求处理多个第一数据,则响应于所述多个第一处理请求分别处理所述多个第一数据;
顺序处理模块,被配置为若所述当前值对应的多个第一处理请求用于请求处理同一第一数据,则按照所述多个第一处理请求的接收顺序依次响应于所述多个第一处理请求处理该第一数据。
可选的,所述计数初始值为0,所述预设数值为1。
可选的,针对任一数据的处理包括下述至少之一:
***新增数据、删除已有数据、更改已有数据。
根据本公开实施例的第三方面,提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述第一方面中任一实施例所述的数据处理方法。
根据本公开实施例的第四方面,提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述第一方面中任一实施例所述的数据处理方法。
根据本公开实施例的第五方面,提出一种计算机程序产品,包括计算机程序和/或指令,所述计算机程序和/或指令被处理器执行时实现上述第一方面中任一实施例所述的数据处理方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
根据本公开的实施例,接收针对逻辑层级低于第二数据的逻辑层级的第一数据的任一第一处理请求,在第二数据未被设置排它锁的情况下,按照该第一处理请求对第二数据的计数器的当前值增加预设数值,进而响应于该请求处理第一数据,并在处理完成后,为上述计数器的当前值减少前述预设数值,其中,在计数器的当前值等于预设的计数初始值的情况下,上述第二数据能够被处理。
可见,通过为逻辑层级较高的第二数据设置计数器,并且在计数器的当前值等于预设的计数初始值的情况下才处理第二数据,所以不会同时处理第一数据和第一数据,从而有效避免了脏数据的产生。可以理解的是,逻辑层级较高的第二数据下可能存在多个逻辑层级较低的第一数据,而且可能在短时间内接收到针对同一第二数据下的第一数据多个第一处理请求。因此,可以同时处理同一第二数据下的多个第一数据,从而有效提升了数据库的数据处理效率,进而有助于数据库所对应业务***的吞吐量。另外,因为在接收到任一第一请求的情况下均会为第二数据的计数器添加预设数值,所以只要存在尚未被响应完成的第一处理请求,第二数据的计数器的当前值就不会等于预设的计数初始值,第二处理请求就不会被响应,因此各个第一请求对应的第一数据均不会产生脏数据。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是一示例性实施例提供的一种多层级架构的示意图;
图2是根据本公开的实施例示出的一种数据处理方法的流程图;
图3是根据本公开的实施例示出的一种多层级架构中第一数据的处理方法流程图;
图4是根据本公开的实施例示出的一种多层级架构中第二数据的处理方法流程图;
图5是根据本公开的实施例示出的一种数据处理方法的交互流程图;
图6是根据本公开的实施例示出的一种数据处理装置的示意框图;
图7是根据本公开的实施例示出的另一种数据处理装置的示意框图;
图8是根据本公开的实施例示出的一种电子设备的结构图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
对于数据库中存储的数据,通常可以进行增加、删除、修改等操作。以多种业务层级对应的多层级数据为例,不同层级对应的线程对相应层级的数据进行上述操作可能会产生脏数据,从而影响业务***稳定性。例如,数据库可以按照项目-任务组-任务-子任务的层级存储业务数据,若高层级线程A在删除任务组数据的同时,低层级线程B正在该任务组中创建任务,则可能导致线程B创建任务成功后,却查询不到该新建任务所在的任务组,因为实际上该任务组已经被线程A删除,从而对业务***的稳定性产生不利影响。
针对这一问题,相关技术中采用分布式锁加以解决。例如由低层级线程B对任务创建操作对应的项目数据添加排它锁,从而在低线程B创建任务的时间段内排除其他线程针对该项目数据的操作,以避免产生脏数据。然而,若同一实现还存在低线程C、低线程D等请求操作同一项目组内的多个项目数据,则因为上述排它锁的存在,其他低层级线程只能等待低线程B操作完成才能够依次进行操作,从而导致数据库的数据处理效率降低,极大影响了业务***的吞吐量。
为此,本公开提出一种数据处理方法,通过为逻辑层级较高的第二数据设置计数器,并且在计数器的当前值等于预设的计数初始值的情况下才处理第二数据,所以不会同时处理第一数据和第一数据,从而有效避免了脏数据的产生。可以理解的是,逻辑层级较高的第二数据下可能存在多个逻辑层级较低的第一数据,而且可能在短时间内接收到针对同一第二数据下的第一数据多个第一处理请求。因此,可以同时处理同一第二数据下的多个第一数据,从而有效提升了数据库的数据处理效率,进而有助于数据库所对应业务***的吞吐量。
图1是一示例性实施例提供的一种多层级架构的示意图,在该架构中,可以包括层级1、层级2、层级3等多个逻辑层级。其中,逻辑层级的高低是相对的,例如层级2相对于层级1是低层级,而相对于层级3则是高层级;层级1和层级2相对于层级3均为高层级;层级2和层级3相对于层级1均为低层级。为描述简洁,下文中的“层级”即表征“逻辑层级”、“高层级”即表征“相对较高的逻辑层级”、“低层级”即表征“相对较低的逻辑层级”,特此说明。位于高层级中的任一高层级对象可以包括位于低层级中的若干个低层级对象,例如位于层级1中的项目1可以包括位于层级2中的任务组M1、任务组M2和任务组M3;类似的,任务组M1可以包括位于层级3中的任务M11和任务M12、任务组M2可以包括位于层级3中的任务M21、任务组M3可以包括位于层级3中的任务M31和任务M32等,不再一一赘述。
在上述多层级架构中,项目、项目组、任务组等各个对象的对象数据也可以按照各个对象在该架构的位置(即该对象与其他对象之间的逻辑关系)存储在数据库中。例如,可以在任务组M1的项目组数据的索引信息(如Key值)中记录项目P1的项目标识和任务组M1的任务组标识,其中,上述项目标识或任务组标识可以为编号、名称、项目文件地址等形式,本公开并不对此进行限制。任一对象的对象数据可以包括该对象的对象名称、成员信息、用户数据、运行日志等。
对应于对象之间的层级关系,对象数据也具有相应的层级关系,例如任务组M1的任务组数据相对于项目P1的项目数据为低层级数据,同时相对于任务M11和任务M12的任务数据为高层级数据;任务组M1的任务组数据以及任务M11和任务M12的任务数据相对于项目P1的项目数据为低层级数据;项目P1的项目数据和任务组M1的任务组数据相对于任务M11和任务M12的任务数据为高层级数据,不再一一赘述。可见,各个对象数据之间的层级关系与各个对象在多层级架构之间的逻辑关系一一对应,即任一两个对象之间的逻辑关系与二者的对象数据之间的逻辑关系相同。
数据库中除存储各个对象的对象数据外,还可以存储各个对象在相应的多层级架构中所处位置的位置信息,或者各个对象数据在(多层级架构对应的)多层级数据结构中的结构信息,该位置信息或结构信息可以用于表征各个对象在多层级架构中的相对位置关系,进而可以用于表征各个对象的对象数据在多层级数据结构中的相对位置关系。仍以图1所示的多层级架构为例,数据库中可以保存项目P1下的各个任务组、各个任务组下的各个任务的位置信息,例如,该位置信息可以为按照图类数据结构绘制的图(Graph),或者,因为图1所示的多层级架构类似于树形结构,所以数据库中也可以保存该树形结构的路由信息,具体形式可以参见下述实施例的记载,此处暂不赘述。
需要说明的是,上述结构信息可以分别保存或者集中保存:如可以将任一对象的对象数据和结构信息保存在该对象对应的存储空间中;或者为提升数据查询效率,也可以将各个对象的对象数据分别保存在不同的存储空间,并将各个对象的结构信息(以列表等形式)集中保存在某一存储空间,从而可以通过集中保存的结构信息快速查询任一对象数据在多层级数据结构中所处的位置,提升数据查询速度。
此外,上述数据库可以为MySQL、SqlServe、Oracler等关系型数据库(StructuredQuery Language,SQL),也可以为Cassandra、MongoDB、CouchDB等非关系型数据库(Notonly SQL,NoSQL),本公开并不对此进行限制。
需要说明的是,上述层级关系仅表征各个对象或对象数据之间的逻辑关系,而任一对象的对象数据在数据库中实际保存时,可以按照表(Table)、列(Column)、字段(Field)、行(Row)等多种维度进行保存。相应的,在本公开方案所涉及的针对任一对象数据(低层级数据或高层级数据)的处理操作过程中,按照该对象数据的逻辑层级进行处理,而并不关注该对象数据在数据库中的实际保存方式。换言之,本方案关注针对对象数据在逻辑层面的处理,而对数据库在对象数据的处理过程中的具体操作并不进行限制。
图2是根据本公开的实施例示出的一种数据处理方法的流程图。如图2所示,该方法应用于服务器。本公开实施例以服务器为数据库为例进行说明,可以包括以下步骤202-204。
步骤202,接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级。
上述第一数据的数据信息表明第一数据的逻辑层级低于第二数据的逻辑层级,即第一数据位于第二数据所处逻辑层级的下层,即第二数据包括第一数据。即第一数据相当于前述的低层级数据,而第二数据相当于前述的高层级数据。当然,同一第二数据下可以包括多个第二数据,而本方案仅关注针对其中任一第一数据发起的任一第一处理请求。例如对应于图1所述的逻辑层级,项目P1的项目数据下可以包括三个任务组(即任务组M1、任务组M2和任务组M3)分别对应的三个任务组数据(即任务组数据1、任务组数据M2和任务组数据M3),本方案所述的“任一第一处理请求”即为针对其中任一任务组数据发起的处理请求。针对数据库中任一数据的处理请求,可以由数据库管理员、数据库用户等对该数据具有操作权限的操作方发起。当然,为保证针对数据的操作合法性,数据库在接收到的任一处理请求后,可以先根据操作权限、操作类型等对处理请求的合法性进行验证,并仅在验证通过的情况下响应该请求。
另外,第一数据的数据信息可以包括第一数据在多层级数据结构中的结构信息等,例如在多级数据结构为类似于图1所示的树状结构的情况下,该结构信息可以为对应于该树状结构的路由信息。如图1对应的任务数据M12的路由信息可以为“P1/M1/M12”,即表明该任务数据M12处于任务组数据M1下,M12的逻辑层级低于M1的逻辑层级,且该任务组数据M1处于项目数据P1下,M1的逻辑层级低于P1的逻辑层级,其他数据与此类似,不再赘述。
本公开方案所涉及的排它锁(exclusive lock,或称X锁、写锁)与相关技术中的排它锁类似,即当根据某一线程A发出的某一第二处理请求为高层级数据设置排它锁后,其他线程发出的针对该高层级数据的任意请求(读取请求或写入请求)均不会得到有效响应,从而保证该线程A具有针对高层级数据的排他性处理权限。换言之,在任一数据被数据库响应于任一处理请求而设置排他锁的情况下,数据库无法响应于其它请求对该数据以及该数据下的低层级数据进行处理。
因此在本实施例中,数据库在接收到针对第一数据的任一第一处理请求后,可以先判断该第一数据所在的第二数据是否被已经被设置有排它锁,再根据判断结果进行相应的处理:在第二数据未被设置排它锁的情况下,可以转入步骤204进行处理,此处暂不赘述。否则,在第二数据被设置有排它锁的情况下,数据库可以终止针对该第一处理请求的响应过程,以在请求无法被及时有效响应的情况下,能够尽快向发起方返回失败结果,避免发起方的长时间等待。
然而,对于发起第一处理请求的发起方来说,其通常更希望数据里能够顺利完成针对第一数据的处理(即希望第一处理请求被有效响应),以获得处理结果。因此为尽量实现对第一处理请求的有效响应,数据库可以在第二数据被设置有排它锁的情况下,等待第一时长后重新检查第二数据是否被设置有排它锁:若再次检查时发现第二数据的排它锁已经被释放,则可以响应第一处理请求对第一数据进行相应的处理。当然,上述再次检查可以重复多次,即每隔第一时长对第一数据检查一次。为充分保证第一处理请求被有效响应,数据库可以重复进行上述检查,直至第二数据的排它锁被释放。但是,长时间的多次检查可能导致发起方的等待时间较长,甚至在数据库故障的情况下可能导致上述检查陷入死循环而白白浪费发起方的等待时间。为此,可以预先设置第一次数(即对第二数据排它锁的检查设置检查次数上限),从而在针对排它锁的检查次数达到第一次数时,若第二数据仍被设置有排它锁,则终止针对任一第一处理请求的响应过程,以避免发起方的等待时间过长,也有助于提升数据库的请求响应效率。其中,在方案实践中,上述第一时长和第一次数可以根据数据库性能、当前负载、第一处理请求的请求类型等进行设置,如设置第一时长为5ms、100ms、30ms等,设置第一次数为2次、10次、5次等,本公开实施例并不对此进行限制。
步骤204,在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值。
在本实施例中,数据库中的任一第二数据可以被设置有计数器,该计数器的计数值对应于数据库正在处理的针对该第二数据下的第一数据的处理请求的数量。该计数器在任一时刻的当前值,用于表征数据库已接收但尚未响应完毕的(针对该第二数据下的第一数据发起的)第一处理请求的请求数量。可以理解的是,因为第一数据和第二数据的数据层级的“高”和“低”是相对的,所以多层级数据结构中的任一数据可能为第一数据、也可能为第二数据。仍以图1所示的多层级架构为例,若数据库接收到针对任务组数据M1的处理请求,则该数据即为第一数据、项目数据P1即为第二数据,此时可以为项目数据P1设置计数器;若数据库接收到针对任务数据M11的处理请求,则该数据即为第一数据、任务组数据M1即为第二数据,此时可以为任务组数据M1设置计数器。可见,因为多层级数据结构中(出最低层级数据之外)的任一数据均可能为第二数据,所以数据库可以根据接收到的第一请求为任一数据设置计数器,因此能够根据第一请求灵活设置计数器,进而可以针对各个第二数据设置排它锁,从而便于满足多样化的数据处理需求。可见,数据库中的任一第二数据均可以被设置上述计数器,以用于记录各个第二数据对应的尚未被响应完毕的第一处理请求。因为本方案涉及到的第一处理请求为请求的发起方针对第二数据下的第一数据发起的处理请求,所以为描述简介,下文中数据库接收到的任一第一处理请求即表征数据库接收到的针对第二数据下的第一数据发起的处理请求。
第二数据的计数器可以被预先设置计数初始值,数据库在接收到第一个第一处理请求后,可以在该计数初始值的基础上为计数器增加预设数值,此后,每接收到一个第一处理请求即对该计数器的当前值增加预设数值;而每完成针对一个第一处理请求的响应过程(即根据该第一处理请求处理第一数据完成或终止针对第一处理请求的响应过程),即对该计数器的当前值减少上述预设数值,以保证计数器的当前值与第一处理请求数量的对应。
在一实施例中,第二处理请求的计数器的计数初始值可以为任意数值,如可以为0,而相应的预设数值可以为任意正数,如可以为1、2、3等,从而根据第一处理请求的数量从0开始对计数器取值进行增减。以预设数值为1为例,接收到第一处理请求时,将计数器的当前值加1;在该第一处理请求处理操作完成后,将该计数器的当前值减1。此时,计数器在任一时刻的当前值即为数据库已接收但尚未响应完毕的针对第二数据下的第一数据的第一处理请求的数量。
步骤206,响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
在本实施例中,数据库按照任一第一处理请求为第二数据的计数器的当前值增加上述预设数值后,即可响应于该请求处理第一数据,并在处理完成(即第一处理请求已经被有效响应)后,为计数器的当前值减少预设数值,以保证计数器的当前值与数据库尚未响应完毕的第一处理请求的数量之间的对应。
在一实施例中,上述计数器在初始值的基础上依次累加预设数值,计数器的当前值能够表征当前时刻待响应的针对第二数据所包含的第一数据的处理请求的个数。在计数器的当前值大于所述计数初始值的情况下,表明当前存在至少一个第一处理请求尚未响应完毕(未开始响应或者正在被响应),因此可以在当前时刻的第一处理请求数量为多个的情况下,分别响应各个请求。具体的,若当前值对应的多个第一处理请求分别用于请求处理上述第二数据下的多个第一数据,各第一数据可以是相同的第一数据,例如数据1;也可以是不同的第一数据,例如数据1、2,则响应于各个第一处理请求分别处理各个第一数据,以保证各个第一数据的同步高效处理,提成数据库的数据处理效率。而若当前值对应的多个第一处理请求用于请求处理第二数据下的同一第一数据,则可以先确定多个第一处理请求的接收顺序,然后按照这一接收顺序依次响应多个第一处理请求处理该第一数据。
在一实施例中,数据库还可以接收发起方对第二数据发起的第二处理请求,为保证针对第二数据的处理过程(即响应该第二处理请求的过程)不导致请求冲突从而避免产生脏数据,数据库可以在接收到该请求之后,为第二数据和该第二数据中的全部第一数据均设置相应的排它锁,进而确定第二数据的计数器的当前值,并根据该当前值进行后续操作。例如,若计数器的当前值等于该计数器的计数初始值,则表明当前时刻该第二数据下并不存在正在被数据库处理的第一数据,因此数据库可以响应于上述第二处理请求处理第二数据。否则,若计数器的当前值大于该计数器的计数初始值,则表明当前时刻该第二数据下存在正在被数据库处理的第一数据,因此数据库当前时刻无法对第二数据进行处理,故可以终止响应第二处理请求,或者等待,直至计数器的当前值等于计数初始值时,再尝试响应于第二处理请求处理第二数据。可见,无论上述何种处理方式,数据库都是在没有处理第一数据的情况下响应于第二处理请求处理第二数据,从而处理第二数据的过程与处理第二数据下的第一数据的过程并不会产生冲突,不会产生脏数据。当然,在处理第二数据完成后,数据库可以释放为第一数据和第二数据设置的上述排它锁,以保证后续请求的正常响应。
需要说明的是,在上述实施例中,数据库接收第一处理请求和接收第二处理请求之间并不存在必然的先后顺序,因而本公开对于数据库响应第一处理请求和第二处理请求的先后顺序也并不进行限制。正因为数据库可以在接收第一处理请求之间、响应第一处理请求的过程中、或者对第一处理请求响应终止后接收到第二处理请求,所以在接收到针对第二数据的第二处理请求的情况下,第二数据计数器的当前值可能为计数初始值(表明尚未接收到任何第一处理请求,或者接收到的第一处理请求均已响应完成)或者大于计数初始值(表明当前存在第一处理请求尚未响应完成)。
由上述实施例可见,针对任一第一数据或者任一第二数据的处理过程(即响应任一第一处理请求或者任一第二处理请求的过程)中,均有可能正常处理或者终止处理,因此数据库可以向请求的发起方返回相应的告知信息。例如,在成功响应任一处理请求完成对相应数据的处理后,数据库可以向该请求的发起方(即前述请求的发起方,如某线程、某设备、某应用程序、某用户等)返回相应的处理结果,如修改后数据、写入回执等。而在终止针对任一请求的响应过程后,数据库可以向该请求的发起方返回针对请求的响应失败消息,以便该发起方及时知晓响应情况,保证第一处理请求响应的透明度。
其中,针对第一数据或第二数据等任一数据的处理可以有多种形式。例如,可以为增加操作,即在数据中***新增数据,如针对任务组M1的第一处理请求可以用于在任务组M1下新建任务M13,此时数据库可以在任务组M13的任务组数据中***任务M13的任务数据。或者也可以为删除操作,即删除已有数据,如针对任务M13的第一处理请求可以用于在任务组M1中删除任务M13,此时数据库可以在任务组M13的任务组数据中删除任务M13的任务数据。或者还可以为移动操作,即更改数据已有数据,如针对任务M11的第一处理请求用于将任务数据M11从任务组数据M1下移动至任务组数据M2下,此时数据库可以将任务M11的归属对象由任务组M1更改为任务组M2,从而实现针对任务数据M11这一已有数据的更改。
进一步的,在终止针对第二处理请求的响应过程的情况下,可以向第二处理请求的发起方(如某线程、某设备、某应用程序、某用户等)返回针对该请求的处理失败消息,以便相应各方及时知晓响应情况,保证第二处理请求响应的透明度。
根据本公开的实施例,数据库接收针对逻辑层级低于第二数据的逻辑层级的第一数据的任一第一处理请求,在第二数据未被设置排它锁的情况下,按照该第一处理请求对第二数据的计数器的当前值增加预设数值,进而响应于该请求处理第一数据,并在处理完成后,为上述计数器的当前值减少前述预设数值,其中,在计数器的当前值等于预设的计数初始值的情况下,上述第二数据能够被处理。
可见,通过为逻辑层级较高的第二数据设置计数器,并且在计数器的当前值等于预设的计数初始值的情况下才处理第二数据,所以不会同时处理第一数据和第一数据,从而有效避免了脏数据的产生。可以理解的是,逻辑层级较高的第二数据下可能存在多个逻辑层级较低的第一数据,而且可能在短时间内接收到针对同一第二数据下的第一数据多个第一处理请求。因此,可以同时处理同一第二数据下的多个第一数据,从而有效提升了数据库的数据处理效率,进而有助于数据库所对应业务***的吞吐量。另外,因为在接收到任一第一请求的情况下均会为第二数据的计数器添加预设数值,所以只要存在尚未被响应完成的第一处理请求,第二数据的计数器的当前值就不会等于预设的计数初始值,第二处理请求就不会被响应,因此各个第一请求对应的第一数据均不会产生脏数据,从而有效解决了相关技术中存在的上述问题。
下面以图1所示多层级架构为基础,结合图3-图5,以第一数据为任务数据M11、第二数据为任务组数据M1、任务组数据M1所对应计数器的计数初始值取0、相应的预设数值取1为例,对数据库响应第一处理请求和第二处理请求的过程进行详细说明。
图3是根据本公开的实施例示出的一种多层级架构中第一数据的处理方法流程图,先结合图3对针对第一处理请求的响应过程进行说明。如图3所示,该过程可以包括下述步骤301-309。
步骤301,数据库接收针对第一数据的第一处理请求。
在一实施例中,数据库可以在任一时刻接收来自某线程、某设备、某应用程序、某用户等发起方发起的第一处理请求。第一处理请求可以对应于数据库所连接业务***中的业务行为,如用户对自身用户信息的更改、与其他用户进行在线交互、针对其他用户发布的作品进行点赞、转发、评论等操作;或者,第一处理请求也可以对应于业务***的结构调整行为,如业务***的后台人员在任务组M1中***任务M13、删除任务组M1中的任务M12、将任务组M1下的任务M12移动至任务组M2等。
上述行为可能导致行为相关数据发生变化,所以第一处理请求可以用于指示数据库对其中存储的第一数据进行处理。数据库接收到该第一处理请求后,即开始针对该第一处理请求的响应过程。
步骤302,检查第一数据所归属的第二数据是否被设置排它锁。
数据库在接收到第一处理请求后,可以先确定第一处理请求对应的待处理的第一数据。若第一数据为当前多层级架构下的最高层级数据(如项目P1的项目数据),则可以设置针对第一数据的排它锁,然后根据第一处理请求处理该第一数据,以实现对该第一处理请求的响应。反之,若第一数据为当前多层级架构下的低层级数据(只要第一数据不是最高层级数据,则第一数据归属于更高层级的数据,因此相对于最高层级数据,该第一数据为低层级数据),则可以进一步确定该第一数据所归属的第二数据,如在第一数据为任务组数据M1的情况下,可以进一步确定相应的第二数据为项目P1的项目数据(即项目数据P1),或者在第一数据为任务数据M11的情况下,可以进一步确定相应的第二数据包括项目数据P1和任务组数据M1。
当第一数据所归属的第二数据被设置排它锁时,表明与第二数据相关的数据(如第二数据、低于第二数据逻辑层级的数据、高于第二数据逻辑层级的数据)被数据库响应于处理请求而锁定。由排它锁的前述特征可知,在任一第二数据被数据库响应于第一处理请求设置有排它锁的情况下,其包含的所有第一数据的操作权限(例如增加、删除、修改等权限)被锁定至该第一处理请求,而其他任何请求均无法针对该第二数据包含的所有第一数据实施操作。数据库在确定出第一数据所归属的第二数据后,检查该第二数据是否已经被设置有排它锁:若已被设置排它锁,则转入步骤303;否则,若未被设置排它锁,则转入步骤306。
步骤303,判断针对排它锁的检查次数是否小于第一次数n1。
步骤304,等待第一时长T1。
此时,为保证对第一处理请求作出有效响应,并实现用户对于此时第一数据和第二数据之间冲突的无感知,可以多次重试(或称自旋)。具体的,可以先判断当前的检查次数是否小于第一次数n1:若当前检查次数小于n1,则表明当前对于排它锁的检查次数尚未达到第一次数n1,因此可以转入步骤304,并在等待第一时长T1返回步骤302再次进行检查;否则,若当前次数大于等于n1,则表明当前对于排它锁的检查次数已经达到第一次数n1,但仍然存在针对第二数据的排它锁,所以为避免单一请求的响应过程耗时过长,可以转入步骤305,终止针对第一处理请求的响应过程。
其中,上述第一时长T1和第一次数n1可以为预设的固定值,如T1=50ms,n1=4次等;或者,为保证请求的响应过程更加符合数据库的实际情况,可以根据数据库的当前待响应请求总数、针对第一数据的第一处理请求数量、数据库的当前资源占用率、请求类型等实际情况确定当前时刻的第一时长T1和第一次数n1。例如,可以预先设置确定规则,如设置第一时长T1与数据库的当前资源占用率呈正相关、第一次数n1与当前待响应请求总数和/或针对第一数据的第一处理请求数量呈负相关等,本公开并不对此进行限制。
当然,上述步骤302-304的反复检查过程是可选的,实际上,也可以在步骤302确定出第二数据被设置有排它锁的情况下,转入步骤305(图中未示出),以加快第一处理请求的响应速度,避免第一处理请求的发起方等待时间过长。
步骤305,终止针对第一处理请求的响应过程,并向请求的发起方返回处理失败消息。
在终止针对第一处理请求的响应过程后,可以向该请求的发起方返回处理失败消息,该消息中可以包含失败相关信息,如请求接收时刻、终止时刻、请求对应的待处理数据的数据状态等,本公开并不对此进行限制。
步骤306,为第二数据对应的计数器当前值加1。
此时,第二数据未被设置排它锁,即表明当前数据库并未响应于第二处理请求处理第二数据,因此可以根据第一处理请求针对第一数据实施处理操作(即响应第一处理请求)。
为保证响应于第一处理请求的过程中不将第二数据的操作权限分配至这一过程中接收到的第二处理请求,数据库可以使用为第二数据设置的计数器避免第二数据和第一数据之间的操作冲突。具体的,数据库可以为第二数据的计数器的当前值加1,并在处理任务数据M11完成后再为计数器的当前值减1,从而保证只要数据库正在响应第一处理请求对第一数据进行处理,第二数据对应的计数器的当前值就不为0,进而就不会在此时对第一数据进行处理,从而避免操作冲突产生脏数据。
需要说明的是,数据库可以在首次写入第二数据时为其设置计数器,例如,数据库可以为多层级数据结构中的各个数据添加计数器当前值字段,该字段的取值即表明各个数据所对应计数器的当前值(当然,对于最低层级的数据,可以不设置该字段),从而数据库接收到针对任一第二数据下的第一数据的第一请求后,均可以对该第二数据的计数器当前值字段的字段取值进行判断。或者,数据库也可以在首次接收到针对第二数据下的第一数据的第一请求时,为第二数据设置计数器。例如数据库在写入任务组数据M1时可以不为其设置计数器,直至首次接收到针对任务数据M11或者任务M12的第一请求的情况下,再为任务组数据M1设置计数器并将计数器当前值设置为1(计数初始值为0)。
另外,在接收到针对任一第一数据的第一请求后,数据库需要对该第一数据对应的各个第二数据的计数器的当前值进行更新。如前所述,在第一数据为任务数据M11的情况下,第二数据包括项目数据P1和任务组数据M1,相应的,数据库在接收到针对任务数据M11的第一请求的情况下,可以分别为任务组数据M1和项目数据P1的计数器当前值加1。需要说明的是,虽然任务组数据M2、任务组数据M3和任务组数据M1属于同一层级,但任务数据M11并不处于任务组数据M2和任务组数据M3下(即二者并非当前的第二数据),所以数据库可以不为任务组数据M2和任务组数据M3的计数器当前值加1。当然,若任务组数据M2和/或任务组数据M3与任务组数据M1之间存在关联关系(如任务组M3的值为任务组M1的值和任务组M3的值之和),也可以对任务组数据M2和/或任务组数据M3的计数器当前值加1。换言之,在对第二数据的计数器当前值进行更新的同时,还对与第二数据处于同一层级的哪些数据的计数器进行更新,可以根据数据之间的具体数据关系进行灵活设置,本公开对此并不进行限制。
进一步的,在首次写入第二数据时即设置计数器的情况下,或者在首次接收到针对第二数据下的第一数据的第一请求时设置计数器,并再次接收到针对第二数据下的任一第一数据的第一请求的情况下,数据库无需再为该第二数据设置计数器(实际上,同一个第二数据在任一时刻仅需要设置一个计数器),而只需更新该第二数据的计数器的当前值即可。
步骤307,按照第一处理请求处理任务数据M11。
在一实施例中,针对任务数据M11实施的处理操作可以包括多种形式,例如,在任务数据M11中***新数据(***)、删除任务数据M11中的原有数据(删除)、将任务数据M11下某任务中的原有数据移动至其他任务(移动,如将任务M11中的某数据移动至任务M12中作为任务数据M12)等,不再赘述。
需要说明的是,第二数据对应的计数器的当前值可能大于1,即数据库在接收到某第一处理请求时,已经接收到针对该请求对应的第二数据所包含的第一数据的其他第一处理请求,并且该请求尚未被响应完毕,因此可以针对当前各个第一处理请求之间的关系对各个第一处理请求进行响应。
假设任务组数据M1对应的计数器的当前值为3,相应的三个第一请求分别记为第一请求1,第一请求2和第一请求3。在一实施例中,若三者针对的待处理数据分别为任务数据M11、任务数据M12和任务数据M13,则此时数据库可以同时按照第一请求1处理任务数据M11、按照第一请求2处理任务数据M12并按照第一请求3处理任务数据M13,即实现对这三个第一请求的并行处理。显然,相对于三个请求依次获取针对任务组数据M1的排他锁并处理,显著扩大了数据库的请求吞吐量。
在另一实施例中,若第一请求1,第一请求2和第一请求3针对的待处理数据分别为任务数据M11、任务数据M11和任务数据M12,则此时数据库可以先确定第一请求1和第一请求2的接收顺序,然后按照该接收顺序依次响应两第一请求处理任务数据M11;在依次根据两第一请求处理任务数据M11的同时,数据库还可以根据第一请求3处理任务数据M12。
在又一实施例中,若第一请求1,第一请求2和第一请求3针对的待处理数据均为为任务数据M11,则此时数据库可以按照三者的接收顺序依次响应三个第一请求处理任务数据M11。
步骤308,为第二数据对应的计数器当前值减1。
可以理解的是,由于第一处理请求可能有多个且各个第一处理请求的响应时间段并不完全一致,因此,步骤308中减1之后的计数器取值和步骤306中加1之前的计数器取值可能并不相同(因为在步骤307的执行过程中可能接收其他第一处理请求或处理完成其他第一处理请求对应的待处理数据),换言之,第二数据对应的计数器的取值是动态变化的,本公开并不对此进行限制。
步骤309,终止针对第一处理请求的响应过程,并向请求的发起方返回处理结果。
至此,已完成针对第一处理请求的完整处理过程,即已完成针对第一处理请求的响应,因此可以向第一处理请求的发起方返回相应的处理结果。另外,还可以将上述操作产生的数据变更信息发送至相关各方,如在数据库为MySQL数据库的情况下,可以将步骤307对应的binlog日志发送至maxwell解析器,以便对该日志进行解析并进行后续处理,如生成队列消息等,具体过程不再赘述。
图4是根据本公开的实施例示出的一种多层级架构中第二数据的处理方法流程图,下面结合图4对针对第二处理请求的响应过程进行说明。如图4所示,该过程可以包括下述步骤:
步骤401,数据库接收针对第二数据的第二处理请求。
在本实施例中,数据库也可以在任一时刻接收来自某线程、某设备、某应用程序、某用户等发起方发起的第二处理请求。与第一处理请求类似的,第二处理请求也可以对应于数据库所连接业务***中的业务行为或者业务***的结构调整行为,不再赘述。上述行为可能导致行为相关数据发生变化,所以第二请求可以用于指示数据库对其中存储的第二数据进行处理。数据库接收到该第二处理请求后,即开始针对该第二处理请求的响应过程。
步骤402,为第二数据设置排它锁。
数据库在接收到第二处理请求后,可以先确定第二处理请求对应的待处理的第二数据。若第二数据为当前多层级架构下的最低层级数据(如任务M11的任务数据),则数据库可以设置针对第二数据的排它锁,然后根据第二处理请求处理该第二数据,以实现是对第二处理请求的响应。反之,若第二数据为当前多层级架构下的高层级数据(在第二处理请求对应的待处理的数据包含更低层级的数据的情况下,即将该数据确定为第二数据),数据库可以为该第二数据以及该第二数据下的全部数据设置排它锁,拒绝响应于其他任何请求针对该第二数据或该第二数据下的任一数据实施操作。
步骤403,检查第二数据对应的计数器的当前值是否为0。
对于任一第二数据,在其对应的计数器的当前值不为0的情况下,其所包含的至少一个第一数据的操作权限被第一处理请求占用,此时数据库无法响应于其他任何请求(包括针对该第二数据的第二处理请求)针对该第二数据进行处理。因此,数据库可以在设置针对该数据第二数据的排它锁后,检查该第二数据对应的计数器的当前值:若当前值不为0,则转入步骤404;否则,若当前值为0,则转入步骤407。
步骤404,判断针对计数器的当前值的检查次数是否小于第二次数n2。
步骤405,等待第二时长T2。
此时,为保证对第二处理请求作出有效响应,并实现用户对于此时第一数据和第二数据之间冲突的无感知,可以多次重试。具体的,可以转入步骤404以判断当前的检查次数是否小于第二次数n2:若当前检查次数小于n2,则表明当前对于计数器的当前值的检查次数尚未达到第二次数n2,因此可以在转入步骤405等待第二时长T2后,返回步骤403再次进行检查;否则,若当前次数大于等于n2,则表明当前对于计数器的当前值的检查次数已经达到第二次数n2,但仍然存在针对第二数据所包含第一数据的第一处理请求尚未被响应完毕,所以为避免单一请求的响应过程耗时过长从而减少请求的发起方的等待时长,可以转入步骤406,终止针对第二处理请求的响应过程。
其中,与前述第一时长T1和第一次数n1类似的,本实施例中的第二时长T2和第二次数n2也可以为预设的固定值,如T2=100ms,n2=3次等;或者也可以根据数据库的当前待响应请求总数、针对第一数据的第一处理请求数量、数据库的当前资源占用率、请求类型等实际情况确定当前时刻的第二时长T2和第二次数n2。例如,可以预先设置确定规则,如设置第二时长T2与数据库的当前资源占用率呈正相关、第二次数n2与当前待响应请求总数和/或针对第一数据的第二处理请求数量呈负相关等,本公开并不对此进行限制。
当然,上述步骤403-405的反复检查过程是可选的,实际上,也可以在步骤403确定第二数据对应的计数器的当前值不为0的情况下,转入步骤406(图中未示出),以加快第二处理请求的响应速度,大幅减少请求的发起方的等待时长。
步骤406,终止针对第二处理请求的响应过程,并向请求的发起方返回处理失败消息。
在终止针对第二处理请求的响应过程后,可以向该请求的发起方返回处理失败消息,该消息中可以包含失败相关信息,如请求接收时刻、终止时刻、请求对应的第二数据的数据状态等,本公开并不对此进行限制。
步骤407,按照第二处理请求处理任务组数据M1。
针对任务组数据M1实施的处理操作可以包括多种形式,例如,在任务组数据M1中***任务数据M13(***)、删除任务组数据M1中的任务数据M12(删除)、将任务组数据M1下的任务数据M12移动至任务组数据M2(移动)等,不再赘述。
步骤408,终止针对第二处理请求的响应过程,并向请求的发起方返回处理结果。
至此,已完成针对第二处理请求的完整处理过程,即以完成针对第二处理请求的响应,因此可以向第二处理请求的前述发起方返回相应的处理结果。另外,还可以将上述操作产生的数据变更信息发送至相关各方,如在数据库为MySQL数据库的情况下,可以将步骤407对应的binlog日志发送至maxwell解析器,以便对该日志进行解析并进行后续处理,如生成队列消息等。
409,释放为任务组数据M1(即第二数据)设置的排它锁。
在处理第二数据完成后,数据库可以释放为第一数据和第二数据设置的上述排它锁,以保证后续请求的正常响应。可以理解的是,在第二数据下包含第一数据的情况下,如任务组数据M1下包含任务数据M11和任务数据M12,则上述步骤402中设置的排它锁是为任务组数据M1、任务数据M11和任务数据M12分别设置的,因此该步骤中应当释放全部排它锁,以保证后续针对任务组数据M1的第一请求或第二请求,以及针对任务数据M11或任务数据M12的第一请求的正常响应。
图5是根据本公开的实施例示出的一种数据处理方法的交互流程图,下面结合图5对新增任务M13的第一处理请求和删除任务组M1的第二处理请求的响应过程进行说明。如图5所示,该过程可以包括下述步骤:
步骤501,第一进程获取任务新增请求并发送至数据库。
在本实施例中,为体现为第二数据设置的排它锁、第二数据对应的计数器以及针对数据实施的处理操作,将数据库所包含的“排它锁”、“计数器”和“处理操作”视为不同的执行主体绘制图5,但三者的实际执行主体均应当被理解为数据库,特此说明。
另外需要说明的是,与数据库存在连接关系的设备可以创建针对数据库的处理进程,以通过该进程与数据库之间的交互过程,实现对数据库所管理数据的读/写操作。可以理解的是,任一设备中运行的处理进程是由该设备的操作***所创建的。通常情况下,设备可以通过不同的进程对数据库中的数据进行不同类型的操作。在本实施例中,步骤501中发起任务新增请求(请求写入任务数据)的为第一进程,步骤506中发起任务组删除请求(请求删除任务组数据)的为第二进程,显然,上述第一进程和第二进程可以为不同的进程,甚至可以分别运行在不同的设备中,换言之,针对第一数据(即下述任务数据M13)和第二数据(即下述任务组数据M1)的处理请求之间可以相互独立。其中,上述任一进程所在的设备可以为业务服务器、CDN(Content Delivery Network,内容分发网络)服务器、用户终端等,本公开实施例对此并不进行限制。
步骤502,数据库通过至少一次检查以确定任务组数据M1是否存在排它锁。
步骤503,数据库为任务组数据M1所对应计数器的当前值加1。
步骤504,数据库在任务组数据M1中***新增任务数据M13。
步骤505,数据库为任务组数据M1所对应计数器的当前值减1,并返回任务创建成功消息。
上述步骤502-505的具体执行过程可以参见图3所对应前述实施例的相应步骤,此处不再赘述。
步骤506,第二进程获取任务新增请求并发送至数据库。
在一实施例中,步骤501和步骤506分别涉及的第一线程和第二线程可以为两个不同的线程。
步骤507,数据库为任务组数据M1设置排它锁。
步骤508,数据库至少一次检查第二数据对应的计数器的当前值。
步骤509,数据库在任务组数据M1中删除任务数据M13,并返回任务删除成功消息。
上述步骤506-509的具体执行过程可以参见图4所对应前述实施例的相应步骤,此处不再赘述。其中,若在步骤502中多次检查仍然存在排它锁,则可以结束针对任务新增请求的响应过程(即不执行步骤502-506),并相应的向第一进程返回创建失败消息;或者,在步骤504中由于任何原因导致创建任务M13失败的情况下,可以结束针对任务新增请求的响应过程(即不执行步骤506),并相应的向第一进程返回创建失败消息。
类似的,在步骤508中多次(检查此处超出预设的次数阈值)检查第二数据所对应计数器的当前值仍然大于0的情况下,可以结束针对删除任务组请求的响应过程(即不执行步骤509-510),并相应的向第二进程返回删除失败消息;或者,在步骤509中由于任何原因导致删除任务组M1失败的情况下,可以结束针对删除任务组请求的响应过程(即不执行步骤510),并相应的向第二进程返回删除失败消息。
本实施例中,作为一示例性实施方式,可以先接收并响应任务新增请求再接收并响应删除任务组请求(即先执行步骤501-505再执行步骤506-510);或者,作为另一示例性实施方式,也可以先接收并响应删除任务组请求再接收并响应任务新增请求(即先执行步骤506-510再执行步骤501-505)。换言之,“步骤501-505”与“步骤506-510”并不存在必然的先后顺序,可以根据实际情况进行调整。另外,实际使用时还可以适当调整某些具体步骤,此处不再赘述。
与前述数据处理方法的实施例相对应地,本公开还提出了数据处理装置的实施例。
图6是根据本公开的实施例示出的一种数据处理装置的示意框图。本实施例所示的数据处理装置可以适用于数据库,所述数据库包括但不限于MySQL、SqlServe、Oracler等关系型数据库,也可以为Cassandra、MongoDB、CouchDB等非关系型数据库,本公开并不对此进行限制。
如图6所示,所述数据处理装置可以包括:
请求接收模块601,被配置为接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;
数值增加模块602,被配置为在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;
数值减少模块603,被配置为响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
对于图6所示的数据处理装置,可选的,还可以包括其他一个或多个单元。可参见图7所示的另一种数据处理装置,如图7所示:
可选的,还包括:
第一终止模块704,被配置为在所述第二数据被设置有排它锁的情况下,终止针对所述任一第一处理请求的响应过程;或者,
第二终止模块705,被配置为在所述第二数据被设置有排它锁的情况下,等待第一时长后重新检查所述第二数据是否被设置有排它锁,若在针对所述排它锁的检查次数达到第一次数时,所述第二数据仍被设置有排它锁,则终止针对所述任一第一处理请求的响应过程。
可选的,还包括:
排它锁设置模块706,被配置为在接收到针对所述第二数据的第二处理请求的情况下,为所述第一数据和第二数据设置排它锁;
第一处理模块707,被配置为若所述计数器的当前值等于所述计数初始值,则响应于所述第二处理请求处理所述第二数据;
第二处理模块708,被配置为若所述计数器的当前值大于所述计数初始值,则终止响应所述第二处理请求,或者等待直至所述计数器的当前值等于所述计数初始值时,响应于所述第二处理请求处理所述第二数据;
排它锁释放模块709,被配置在处理所述第二数据完成后释放为所述第一数据和第二数据设置的排它锁。
可选的,还包括:
消息返回模块710,被配置为在终止针对任一请求的响应过程后,向所述任一请求的发起方返回针对所述任一请求的响应失败消息。
可选的,还包括:
分别处理模块711,被配置为在所述计数器的当前值大于所述计数初始值的情况下,若所述当前值对应的多个第一处理请求分别用于请求处理多个第一数据,则响应于所述多个第一处理请求分别处理所述多个第一数据;
顺序处理模块712,被配置为若所述当前值对应的多个第一处理请求用于请求处理同一第一数据,则按照所述多个第一处理请求的接收顺序依次响应于所述多个第一处理请求处理该第一数据。
可选的,所述计数初始值为0,所述预设数值为1。
可选的,针对任一数据的处理包括下述至少之一:
***新增数据、删除已有数据、更改已有数据。
本公开的实施例还提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的数据处理方法。
本公开的实施例还提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的数据处理方法。
本公开的实施例还提出一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的数据处理方法。
图8是根据本公开的实施例示出的一种电子设备的示意框图。例如,电子设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图8,电子设备800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件818。
处理组件802通常控制电子设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述数据处理方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在电子设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为电子设备800的各种组件提供电力。电源组件806可以包括电源管理***,一个或多个电源,及其他与为电子设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在电子设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当电子设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜***或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当电子设备800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件818发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和***接口模块之间提供接口,上述***接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为电子设备800提供各个方面的状态评估。例如,传感器组件814可以检测到电子设备800的打开/关闭状态,组件的相对定位,例如所述组件为电子设备800的显示器和小键盘,传感器组件814还可以检测电子设备800或电子设备800一个组件的位置改变,用户与电子设备800接触的存在或不存在,电子设备800方位或加速/减速和电子设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
图像采集组件816可以用于采集被摄对象的图像数据,以形成关于被摄对象的图像,并可以对该图像进行必要的处理。该图像采集组件816可以包括相机模组,相机模组中的图像传感器(Sensor)通过镜头感应来自被摄对象的光线,将得到的感光数据提供给图像信号处理器(ISP,Image Signal Processing),由后者根据感光数据生成对应于被摄对象的图像。其中,上述图像传感器可以为CMOS传感器或CCD传感器,当然,也可以为红外传感器、深度传感器等;相机模组可以内置在电子设备800中,也可以为电子设备800的外接模组;上述ISP可以内置在相机模组中,也可以外挂在上述电子设备中(不在相机模组内)。
通信组件818被配置为便于电子设备800和其他设备之间有线或无线方式的通信。电子设备800可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件818经由广播信道接收来自外部广播管理***的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件818还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在本公开一实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述数据处理方法。
在本公开一实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由电子设备800的处理器820执行以完成上述数据处理方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
需要说明的是,在本公开中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本公开实施例所提供的方法和装置进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。

Claims (10)

1.一种数据处理方法,其特征在于,包括:
接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;
在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;
响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述第二数据被设置有排它锁的情况下,终止针对所述任一第一处理请求的响应过程;或者,
在所述第二数据被设置有排它锁的情况下,等待第一时长后重新检查所述第二数据是否被设置有排它锁,若在针对所述排它锁的检查次数达到第一次数时,所述第二数据仍被设置有排它锁,则终止针对所述任一第一处理请求的响应过程。
3.根据权利要求1所述的方法,其特征在于,还包括:
在接收到针对所述第二数据的第二处理请求的情况下,为所述第一数据和第二数据设置排它锁;
若所述计数器的当前值等于所述计数初始值,则响应于所述第二处理请求处理所述第二数据;
若所述计数器的当前值大于所述计数初始值,则终止响应所述第二处理请求,或者等待直至所述计数器的当前值等于所述计数初始值时,响应于所述第二处理请求处理所述第二数据;
在处理所述第二数据完成后释放为所述第一数据和第二数据设置的排它锁。
4.根据权利要求2或3所述的方法,其特征在于,还包括:
在终止针对任一请求的响应过程后,向所述任一请求的发起方返回针对所述任一请求的响应失败消息。
5.根据权利要求1所述的方法,其特征在于,还包括:
在所述计数器的当前值大于所述计数初始值的情况下,若所述当前值对应的多个第一处理请求分别用于请求处理多个第一数据,则响应于所述多个第一处理请求分别处理所述多个第一数据;
若所述当前值对应的多个第一处理请求用于请求处理同一第一数据,则按照所述多个第一处理请求的接收顺序依次响应于所述多个第一处理请求处理该第一数据。
6.根据权利要求1所述的方法,其特征在于,所述计数初始值为0,所述预设数值为1。
7.一种数据处理装置,其特征在于,包括:
请求接收模块,被配置为接收针对第一数据的任一第一处理请求,所述第一数据的数据信息表明所述第一数据的逻辑层级低于第二数据的逻辑层级;
数值增加模块,被配置为在所述第二数据未被设置排它锁的情况下,按照所述任一第一处理请求对所述第二数据的计数器的当前值增加预设数值;
数值减少模块,被配置为响应于所述任一第一处理请求处理所述第一数据,并在处理完成后,为所述计数器的当前值减少所述预设数值,其中,在所述计数器的当前值等于预设的计数初始值的情况下,所述第二数据能够被处理。
8.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至6中任一项所述的数据处理方法。
9.一种计算机可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至6中任一项所述的数据处理方法。
10.一种计算机程序产品,包括计算机程序和/或指令,其特征在于,所述计算机程序和/或指令被处理器执行时实现权利要求1至6中任一项所述的数据处理方法。
CN202110605117.2A 2021-05-31 2021-05-31 数据处理方法、装置、电子设备和存储介质 Pending CN113342539A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110605117.2A CN113342539A (zh) 2021-05-31 2021-05-31 数据处理方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110605117.2A CN113342539A (zh) 2021-05-31 2021-05-31 数据处理方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN113342539A true CN113342539A (zh) 2021-09-03

Family

ID=77473614

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110605117.2A Pending CN113342539A (zh) 2021-05-31 2021-05-31 数据处理方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN113342539A (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060031427A1 (en) * 2004-06-10 2006-02-09 Kapil Jain Configuration commit database approach and session locking approach in a two-stage network device configuration process
CN1774699A (zh) * 2003-04-24 2006-05-17 国际商业机器公司 共享资源的并发访问
US20160335311A1 (en) * 2015-05-13 2016-11-17 International Business Machines Corporation Opportunistic wait-triggered elastic commit
US20170351551A1 (en) * 2016-06-07 2017-12-07 Oracle International Corporation Concurrent distributed graph processing system with self-balance
CN108446181A (zh) * 2018-03-26 2018-08-24 武汉斗鱼网络科技有限公司 对资源限制访问的方法、装置及终端设备
CN108573013A (zh) * 2017-12-08 2018-09-25 北京金山云网络技术有限公司 请求处理方法、装置、电子设备及计算机可读存储介质
CN111488255A (zh) * 2020-03-27 2020-08-04 深圳壹账通智能科技有限公司 多线程并发监控方法、装置、设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1774699A (zh) * 2003-04-24 2006-05-17 国际商业机器公司 共享资源的并发访问
US20060031427A1 (en) * 2004-06-10 2006-02-09 Kapil Jain Configuration commit database approach and session locking approach in a two-stage network device configuration process
US20160335311A1 (en) * 2015-05-13 2016-11-17 International Business Machines Corporation Opportunistic wait-triggered elastic commit
US20170351551A1 (en) * 2016-06-07 2017-12-07 Oracle International Corporation Concurrent distributed graph processing system with self-balance
CN108573013A (zh) * 2017-12-08 2018-09-25 北京金山云网络技术有限公司 请求处理方法、装置、电子设备及计算机可读存储介质
CN108446181A (zh) * 2018-03-26 2018-08-24 武汉斗鱼网络科技有限公司 对资源限制访问的方法、装置及终端设备
CN111488255A (zh) * 2020-03-27 2020-08-04 深圳壹账通智能科技有限公司 多线程并发监控方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN107370772B (zh) 账号登录方法、装置及计算机可读存储介质
RU2667027C2 (ru) Способ и устройство категоризации видео
CN108304475B (zh) 数据查询方法、装置及电子设备
CN105955766A (zh) 应用预加载方法及装置
CN113094378B (zh) 数据处理方法、装置、电子设备和存储介质
CN112506553B (zh) 服务网格的数据面容器的升级方法、装置及电子设备
CN106339260B (zh) 基于Jenkins平台的任务分配方法及装置
CN111258952B (zh) 一种数据存储控制方法、装置及存储介质
US20150350120A1 (en) Method and device for managing instant message
CN104360875B (zh) 隐私模式启动方法和装置
CN112286632B (zh) 云平台、云平台管理方法、装置、电子设备及储存介质
CN111638938B (zh) 虚拟机的迁移方法、装置、电子设备及存储介质
CN110913276B (zh) 数据处理的方法、装置、服务器、终端及存储介质
CN113342539A (zh) 数据处理方法、装置、电子设备和存储介质
CN110908814A (zh) 消息处理方法、装置、电子设备及存储介质
CN116048757A (zh) 任务处理方法、装置、电子设备和存储介质
CN114066370A (zh) 库存服务调用方法、装置、设备、存储介质及程序产品
CN111988669B (zh) 视频交互数据的处理方法、装置、电子设备和存储介质
CN112883314B (zh) 一种请求处理方法及装置
CN112102081B (zh) 生成区块链的方法、装置、可读存储介质及区块链网络
CN113760225B (zh) 流程流转方法、装置、设备及存储介质
CN111625536B (zh) 一种数据访问方法及装置
CN112346968B (zh) 一种多媒体文件清晰度的自动化检测方法及装置
CN117033263A (zh) 访问监测方法、装置、电子设备及存储介质
CN115510107A (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