CN106156126B - 处理数据任务中的数据冲突检测方法及服务器 - Google Patents
处理数据任务中的数据冲突检测方法及服务器 Download PDFInfo
- Publication number
- CN106156126B CN106156126B CN201510163424.4A CN201510163424A CN106156126B CN 106156126 B CN106156126 B CN 106156126B CN 201510163424 A CN201510163424 A CN 201510163424A CN 106156126 B CN106156126 B CN 106156126B
- Authority
- CN
- China
- Prior art keywords
- lock request
- lock
- type
- instant example
- list
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了处理数据任务中的冲突检测方法及服务器,其中一种方法应用于消息中心服务器,包括:响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。本申请实施例中,通过引入锁的第二请求列表以及建立以实例为单位的心跳机制与锁冲突的消息通知机制,有效降低了锁请求的个数,减少了锁机制带来的访问压力,提升了锁的请求响应,还能方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突。
Description
技术领域
本申请涉及互联网数据处理技术领域,特别涉及处理数据任务中的数据冲突检测方法、数据处理服务器及消息中心服务器。
背景技术
随着移动互联网、物联网等应用的飞速发展,全球数据量正在以极快的速度膨胀式增长。大数据时代的信息爆炸,尤其是非结构化数据的爆炸性增长,正在深刻影响着整个数据存储和分析领域。在企业数据分析处理过程中,通常每天执行的数据挖掘任务都会成百上千,甚至达到上万,并且存在大量跨部门的数据分析,虽然有统一的任务调度中心,但调度任务涉及到几万个节点,各个节点关系和任务关系都错综复杂。例如,有依赖关系配置错误,大量手工误输入的SQL脚本的执行请求,大量诸如跨集群的数据复制、垃圾回收、小文件合并等等的后台服务进程。因此,在不同的数据分析处理任务中经常存在SQL脚本执行冲突的问题,例如,报文件不存在错误(FileNotFound)或者数据已经被修改(Data changedwhile reading)等等。
发明内容
为了解决脚本执行冲突导致的数据处理效率低下和计算资源浪费的问题,可以针对具体的数据表或者数据表的具体分区来设置锁类型,例如,当用户A存在SQL脚本执行过程中对数据表分区A的读操作时,则设置该数据表分区A锁定,其他用户无法对该数据表分区A进行操作,直至用户A对数据表分区A的读操作执行完毕。
但是发明人在研究过程中发现,现有技术中设置的锁的粒度到具体的表或者表的具体分区,而通常一个数据表表如果有上万个分区,则需要上万个锁,使得锁的个数很大,锁的管理还包括了加锁、解锁以及锁的心跳,这样就会消耗更多的系统资源;进一步的,现有技术也无法获取到其他产生冲突的SQL脚本的详细信息,例如,跟哪一个SQL脚本冲突了,以及无法确定冲突原因;另外,现有技术中只有读锁,共享写锁和排他写锁这三种类型,锁类型比较单一也使得针对同一个数据表的操作无法支持大并发的读写访问。
基于此,本申请所要解决的技术问题是提供一种处理数据任务中的冲突检测方法,用以尽量避免现有技术在解决SQL脚本执行冲突过程中导致的过多消耗系统资源的技术问题,同时还能定位SQL脚本执行冲突的原因和详细信息,从而支持对于数据库的大并发的读写访问。
本申请还提供了消息中心服务器和数据处理服务器,用以保证上述方法在实际中的实现及应用。
为了解决上述问题,本申请公开了一种处理数据任务中的冲突检测方法,应用于数据处理服务器,包括:
响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本;
依据所述当前SQL脚本生成第一锁请求列表,所述第一锁请求列表包括:所述当前SQL脚本产生的当前实例的标识,第一锁请求对象和第一锁请求类型;其中,所述第一锁请求对象用于表示执行所述当前实例所涉及的初始虚拟路径,所述第一锁请求类型用于表示所述当前实例所涉及的初始操作类型;
将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
本申请还公开了另一种处理数据任务中的冲突检测方法,应用于消息中心服务器,包括:
响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;其中,所述锁请求列表包括:锁请求对象和与所述锁请求对象对应的锁请求类型,所述锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的虚拟路径,所述锁请求类型用于表示在每个所述虚拟路径上都涉及哪些操作类型;
根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述第一锁请求列表中的第一锁请求类型包括:读类型、共享写类型和排他写类型;
相应的,所述响应于数据处理服务器发送的、当前SQL脚本的第一锁请求列表,生成第二锁请求列表,包括:
从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型;其中,所述第一锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的初始虚拟路径;
依据所述初始虚拟路径生成所述第二锁请求对象,以及,将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型;其中,所述第二锁请求类型包括:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型;所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
本申请公开了一种消息中心服务器,包括:
生成第二锁请求列表模块,用于响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;其中,所述锁请求列表包括:锁请求对象和与所述锁请求对象对应的锁请求类型,所述锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的虚拟路径,所述锁请求类型用于表示在每个所述虚拟路径上都涉及哪些操作类型;
检测模块,用于根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述第一锁请求列表中的第一锁请求类型包括:读类型、共享写类型和排他写类型;相应的,所述生成第二锁请求列表模块,包括:
获取锁请求子模块,用于从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型;其中,所述第一锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的初始虚拟路径;
生成子模块,用于依据所述初始虚拟路径生成所述第二锁请求对象;其中,所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集;以及,
转化子模块,用于将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型,其中,所述第二锁请求类型包括:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
本申请还公开了一种数据处理服务器,包括:
获取脚本模块,用于响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本;
生成第一锁请求列表模块,用于依据所述当前SQL脚本生成第一锁请求列表,所述第一锁请求列表包括:所述当前SQL脚本产生的当前实例的标识,第一锁请求对象和第一锁请求类型;其中,所述第一锁请求对象用于表示执行所述当前实例所涉及的初始虚拟路径,所述第一锁请求类型用于表示所述当前实例所涉及的初始操作类型;
发送模块,用于将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
与现有技术相比,本申请包括以下优点:
在本申请实施例中,锁请求对象采用了虚拟路径的形式,即,本实施例中的锁是针对某个路径而设置的,因此,有效减少了锁请求的个数,同时建立以实例为单位的心跳机制,因而减少了锁机制带来的对服务器请求的访问压力;并且,本申请实施例中建立锁冲突的消息通知机制,提升冲突场景下的锁的响应速度;进一步的,还可以在存在冲突的情况下,将冲突的实例标识返回给数据处理服务器,方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突了,用户后续就可以自己协商解决SQL执行冲突的问题。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的处理数据任务中的冲突检测方法实施例1的流程图;
图2是本申请的方法实施例的应用场景的结构图;
图3是本申请的处理数据任务中的冲突检测方法实施例2的流程图;
图4是本申请的消息中心服务器的结构示意图;
图5是本申请的数据处理服务器的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
参考图1,示出了本申请一种处理数据任务中的冲突检测方法实施例1的流程图,本实施例可以应用于数据处理服务器中,本实施例包括以下步骤:
步骤101:响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本。
在本实施例中,数据处理服务器可以响应用户在前端触发的数据处理任务,并和消息中心服务器进行通信。参考图2所示,为本申请方法实施例在实际应用中的场景架构图。其中,数据处理服务器201和消息中心服务器202对于用户来讲都是后台服务器,只是因为两者实现的功能不同而进行了上述区分。
数据处理服务器在接收到用户触发的数据处理任务后,从其中可以提取出当前数据处理任务中携带的当前SQL(结构化查询语言,Structured Query Language),该当前SQL在执行时会产生对应的当前实例。
步骤102:依据所述当前SQL脚本生成第一锁请求列表。
数据处理服务器在获取当前SQL脚本之后,对该SQL脚本进行词法分析与语法分析,从而依据该SQL脚本的信息生成锁接入列表。其中,本实施例中的第一锁请求列表可以包括:当前SQL脚本产生的当前实例的实例标识,第一锁请求对象和第一锁请求类型。其中,第一锁请求对象可以用于表示执行该当前实例所涉及的初始虚拟路径,该初始虚拟路径在应用场景中可以表示为数据库名称或表名称或者表分区信息(一级分区、二级分区信息),例如:/ProjectName/TableName/一级分区/二级分区/…/N级分区。可见,在本实施例中,如果针对一个路径设置锁,则其所有子路径相当于全部设置了同类型的锁。
而第一锁请求类型用于表示所述当前实例所涉及的初始操作类型。本实施例中的初始操作类型共分为3种:读READ、共享写WRITE_SHARED和排他写WRITE_EXCLUSIVE类型。
具体的,第一锁请求列表可以由一个或者多个锁请求单元组成,参考表1所示,为一个锁请求单元的示例性表示:
表1
InstanceId | 实例标识,用于唯一识别一次用户的SQL提交 |
TargetName | 锁请求对象 |
AccessMode | 锁请求类型 |
下面以一个具体实例来说明如何生成第一锁请求列表。以实例标识InstanceId为“20150106023522130gxd5ob”,用户ID为“attest”在Project为“dailytest”的数据库提交如下所示的SQL:“Insert into table dailyrun.srcpart partition(ds=’20150106’,hr=’HZ’)select key,value from src”为例,该SQL可以产生两个锁接入单元,分别如表2和表3所示:
表2
InstanceId | 20150106023522130gxd5ob |
TargetName | /dailyrun/srcpart/ds=20150106/hr=HZ/ |
AccessMode | WRITE_SHARED |
表3
InstanceId | 20150106023522130gxd5ob |
TargetName | /dailytest/src/ |
AccessMode | READ |
其中,表2表示用户attest触发了对“/dailyrun/srcpart/ds=20150106/hr=HZ/”的共享写操作,以及表3可以表示用户attest触发了对“/dailytest/src/”的读操作。
可选的,数据处理服务器还可以元数仓(用于存储元数据的数据库)中增加该InstanceId的详细信息,其中,增加的详细信息可以参考如下所示的表4所示:
表4
在表4中,“InstanceId”为实例标识,“Owner”表示用户标识,“ProjectName”表示数据库名称,“SubmitTime”表示提交时间,“SQL”则为脚本信息。
接着返回图1,进入步骤103:将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。
数据处理服务器在生成第一锁请求列表之后,将该第一锁请求列表发送给与其相连的消息中心服务器,消息中心服务器可以根据第一锁请求列表中的第一锁请求对象和第一锁请求类型,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。具体的,消息中心服务器可以参考第一锁请求列表的信息生成第二锁请求列表,该第二锁请求列表可以包括:第二锁请求对象和与所述第二锁请求对象对应的第二锁请求类型,该第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,该第二锁请求类型用于表示在每个最终虚拟路径上都涉及哪些操作类型。其中,最终虚拟路径为初始虚拟路径的全部子集。进一步的,消息中心服务器再根据预先设置的冲突检测规则、第二锁请求对象和第二锁请求类型,来检测对应的当前实例是否与其他SQL脚本产生的其他实例执行冲突。
可选的,消息中心服务器在检测结果为冲突的情况下,可以获取产生冲突的第二锁访问类型对应的冲突锁请求对象,将所述冲突锁请求对象对应的其他实例的标识添加至所述当前实例的锁依赖列表中,该锁依赖列表表示当前实例的执行依赖于其他实例的执行,即,当前实例的执行时间在所述其他实例执行完毕之后。消息中心服务器可以将所述锁依赖列表中的其他实例的标识返回至所述数据处理服务器,以便所述数据处理服务器等待其他实例的执行并在其他实例执行完毕之后,再触发所述当前实例的执行。并且,消息中心服务器还可以将当前实例的标识添加至其他实例的锁通知列表中,该锁通知列表用于表示在其他实例执行完毕之后,需要通知数据处理服务器触发当前实例的执行。进一步的,在检测结果为不冲突的情况下,消息中心服务器还可以将不冲突的结果返回至所述数据处理服务器,以便数据处理服务器立即执行当前实例。
因此,在数据处理服务器将第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器之后,数据处理服务器还可以包括:
步骤104:响应于消息中心服务器返回冲突检测结果,依据预置的数据冲突策略,触发所述当前实例的执行。
具体的,该步骤104在实施时可以包括:
步骤A1:判断所述冲突检测结果是否表示所述当前实例与其他SQL脚本产生的其他实例是互斥关系,如果是互斥关系,则进入步骤A2,如果不是互斥关系,则进入步骤A3。
数据处理服务器判断消息中心服务器返回的冲突检测结果是否表示当前实例与其他SQL脚本产生的其他实例是互斥关系。
步骤A2:在用户设置了冲突等待的情况下,等待所述其他实例执行完毕之后,触发所述当前实例的执行;在用户未设置冲突等待的情况下,将从元数仓中获取到的所述其他实例的脚本信息返回给用户;所述脚本信息包括:其他实例的提交时间、脚本内容和IP地址。
对于存在互斥关系的当前实例,数据处理服务器判断用户是否设置了冲突等待,如果用户设置了冲突等待,则数据处理服务器可以等到存在互斥关系的其他实例执行完毕之后,再触发当前实例的执行。而如果用户未设置冲突等待,则数据处理服务器不会触发当前实例的执行,而是从元数仓中获取到其他实例的脚本信息(可以参考表4所示)返回给用户,以便用户知道自己的当前实例与哪些SQL脚本的实例冲突了,该脚本信息可以包括其他实例的提交时间、脚本内容和IP地址。
步骤A3:触发所述当前实例的执行。
而如果当前实例与其他实例不存在互斥关系,则数据处理服务器可以立即出发当前实例的执行,以执行用户请求的数据处理任务。
在实际应用中,在数据处理服务器执行当前实例的过程中,数据处理服务器还可以包括:
步骤105:向所述消息中心服务器发送与所述当前实例对应的心跳消息,所述心跳消息用于表示所述当前实例正在执行。
在本步骤中,数据处理服务器还可以向消息中心服务器发送与当前实例对应的心跳消息,该心跳消息以实例为单元向消息中心服务器发送,以表示当前实例正在执行。在本实施例中,一个实例就对应一个心跳消息。
在当前实例执行完毕之后,数据处理服务器还可以包括:
步骤106:向所述消息中心服务器发送注销锁请求,所述注销锁请求用于请求所述消息中心服务器在所述第二锁请求列表中删除所述当前实例对应的第二锁请求对象和第二锁请求类型。
在数据处理服务器执行完当前实例之后,还可以向消息中心服务器发送注销锁请求,消息中心服务器接收到注销锁请求之后,就在第二锁请求列表中删除当前实例对应的第二锁请求对象和第二锁请求类型。
在本实施例中,锁请求对象采用了虚拟路径的形式,因此本实施例中的锁是针对某个路径而设置的,因此,锁请求类型的个数会比现有技术少很多,因而提升了服务器处理数据任务的性能;并且,本申请实施例中将锁请求类型之间的冲突检测在消息中心服务器一侧进行,并由消息中心服务器将检测结果采用消息通知给数据处理服务器,从而减少了数据处理服务器的访问压力;进一步的,还可以在存在冲突的情况下,将冲突的实例标识返回给数据处理服务器,方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突了,用户后续就可以自己协商解决SQL执行冲突的问题。
为了方便本领域技术人员对于本申请实施例中的锁请求对象和锁请求类型有更具体的了解,下面对本申请实施例中的锁进行详细介绍。
在本申请实施例中,锁请求对象是一个路径形式。假设现在需求对路径“/A/B/C”的读请求,则意味着不能对路径“/A”、“/A/B/”和“/A/B/C”,以及“/A/B/C”的所有子路径执行写操作,但并不排斥其他用户对路径“/A/B2”或者“/A/B/C2”进行读或写操作。类似的,如果将对路径“/A/B/C”的读请求修改为排他写请求,则意味着不能对路径“/A”、“/A/B/”、“/A/B/C”以及“/A/B/C”的所有子目录执行排他写操作,并且不能“/A/B/C”以及“/A/B/C”的所有子目录执行读操作,但并不能排除其他用户对“/A/B2”或者“/A/B/C2”进行读或写操作。
具体的,假设用户1在对路径“/A/B/C”执行写操作,用户2在对路径“/A/B”执行读操作,同时用户3在对路径“/A/B/C2”执行写操作,从以上分析来看,用户1与用户2是互斥的,在路径“/A/B”下面有脏的数据,用户1正在修改。而用户1与用户3是相容的,因为路径“/A/B/C”与路径“/A/B/C2”是两个完全不同的目录,虽然都是写操作,但这两个写操作的行为是互相独立的。
在本申请实施例中,为了将锁的个数更加可控,在读取一个表时,不管该表存在多少个分区,都只需要设置一个锁。因此本申请实施例引入写脏“WD”锁,该锁可以告诉对同一个路径进行读操作的用户,在该路径下面有写脏的数据,不能直接执行读操作。进而还设置读脏“RD”锁,去告诉对同一个路径执行写操作的用户,该路径可以写脏。综上,引入锁操作类型如下所示:共享读锁“RS”,共享写锁“WS”,读脏“RD”,写脏“WD”和排它锁“X”。其中,读脏“RD”用于通知其他用户该路径的子路径有读操作,读脏可以表示对应的路径允许读脏,用户不会直接读该路径,而是读该路径的某一个子路径或者子路径的子路径;而写脏“WD”可以用于通知其他用户该路径的子路径有写操作,该路径的某一个子路径有写操作,用户不能直接读该路径,因为该路径有可能存在脏数据。排他锁“X”表示对应的路径的操作是唯一的,不允许存在对该路径的其他任何操作。
也因此,在本申请实施例中,参考表5所示,为锁的关系矩阵示意表:
表5
在表5中,对于已有锁“RD”来讲,如果存在针对同一个路径的锁请求“RD”是可以被允许的,而对于排它锁“X”的锁请求则是不允许的,以此类推,可以从表5中确定任意两个锁之间的互斥关系。
参考图3,示出了本申请一种数据处理任务中的冲突检测方法实施例2的流程图,本实施例可以应用于消息中心服务器中,本实施例包括以下步骤:
步骤301:响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表。
在本实施例中,与消息中心服务器相连的数据处理服务器将生成的第一锁请求列表发送至消息中心服务器,消息中心服务器在接收到第一锁请求列表之后,根据第一锁请求列表的内容生成第二锁请求列表。其中,第二锁请求列表可以包括:第二锁请求对象和与所述第二锁请求对象对应的第二锁请求类型,所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,所述第二锁请求类型用于表示在每个所述最终虚拟路径上都涉及哪些操作类型。其中,最终虚拟路径为初始虚拟路径的全部子集,即,初始虚拟路径和初始虚拟路径下的全部子路径。
相应的,所述响应于数据处理服务器发送的、当前SQL脚本的第一锁请求列表,生成第二锁请求列表,可以包括:
步骤B1:从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型。
在本实施例中,消息中心服务器首先从数据处理服务器发送的第一锁请求列表中获取到第一锁请求对象,以及相对应的读类型、共享写类型或者排他写类型。
步骤B2:依据所述初始虚拟路径生成所述第二锁请求对象,以及,将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型;其中,所述第二锁请求类型包括:与所述最终虚拟路径对应的共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型;所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集。
消息中心服务器再将获取到的第一锁请求类型转换为第二锁请求类型。因为第一锁请求列表中的第一锁请求类型仅仅包括3个:读类型、共享写类型和排他写类型,而第二锁请求列表中的第二锁请求类型一共包括5个:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型,那么消息中心服务器需要根据本申请实施例中的锁的互斥关系(可以参考表5所示),来将第一锁请求类型转化为第二锁请求类型。例如,对于针对路径“/A/B/C”的第一锁请求类型“排他写”的请求,则生成的第二锁请求列表可以参考表6所示:
表6
/A | WD |
/A/B | WD |
/A/B/C | X |
在表6中,表示,对路径“/A/B/C”的排他写类型,可以转换为:对路径“/A”的写脏WD类型,对路径“/A/B”的写脏WD类型,以及对“/A/B/C”的排他锁X类型。
消息中心在生成第二锁请求列表中的过程中,可以去除第二锁请求列表中冗余重复的锁请求对象和锁请求类型。例如,对同一个锁目标路径的重复多次的读写操作,则可以删除那些重复的锁请求对象和锁请求类型,只保留一个即可;再例如,针对同一个锁请求对象的锁请求类型为“X”锁,则可以将该同一个锁请求对象的其他所有非X锁都删除;再例如,还可以删除该同一个锁请求对象的子路径的所有锁。此外,消息中心服务器还可以合并锁对象列表中类似的锁对象,例如,可以预先预置合并个数的阀值,例如5个,如果锁请求对象的直接父路径的个数超过该阀值,则合并所有的锁请求对象,并替换为该直接父路径的锁请求对象。
步骤302:根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。
接着在本步骤中,消息中心服务器就可以参考预先设置的冲突检测规则(即表5所示的各个锁请求之间的互斥关系),依据所述第二锁请求对象和第二锁请求类型检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突,具体的,检测过程可以包括:
步骤C1:获取预先设置好的所述共享读锁、共享写锁、读脏、写脏和排它锁之间的互斥关系。
首先,获取到表5所示的各个第二锁请求类型之间的互斥关系。
步骤C2:依据所述互斥关系,针对同一个第二锁请求对象,判断执行所述当前实例涉及的第二锁访问类型和执行其他实例涉及的第二锁访问类型是否冲突。
参考表5所示的各个第二锁请求类型之间的互斥关系,可以判断出当前实例涉及的第二锁访问类型是否与秩序其他实例涉及的第二锁访问类型冲突。例如,假设当前实例涉及的第二锁访问类型为:对路径“/A”的写脏WD类型,而如果其他实例涉及的第二锁访问类型为:对路径“/A”的读脏RD类型,参考表5可知,WD与RD是可以同时执行的,因此,就不会产生冲突;而如果其他实例涉及的第二锁访问类型为:对路径“/A”的共享读锁RS类型,参考表5可知,WD与RS是不可以同时执行的,因此就会产生冲突。
进一步的,消息中心服务器在检测之后,步骤C2之后还可以包括:
步骤C3:在判断结果为冲突的情况下,获取产生冲突的第二锁访问类型对应的冲突锁请求对象,将所述冲突锁请求对象对应的其他实例的标识添加至所述当前实例的锁依赖列表中,再将所述锁依赖列表中的其他实例的标识返回至所述数据处理服务器,以便所述数据处理服务器在所述其他实例执行之后,再触发所述当前实例的执行。
如果消息中心服务器发现存在相互冲突的第二锁请求(第二锁请求由第二锁请求列表和该列表对应的实例标识组成),则可以获取产生冲突的第二锁访问类型对应的冲突锁请求对象,例如某个路径,再针对该冲突锁请求对象对应的其他实例的标识添加至该当前实例的锁依赖列表中。在当前实例的锁依赖列表中的其他实例的标识都是与当前实例的执行产生冲突的实例。消息中心服务器可以将锁依赖列表中的其他实例的标识通知给数据处理服务器,数据处理服务器就可以在其他实例执行完毕之后,再执行当前实例。
步骤C4:在判断结果为不冲突的情况下,将所述不冲突的结果返回至所述数据处理服务器,以便数据处理服务器立即执行所述当前实例。
而如果判断结果不冲突,或者锁依赖列表中为空,则消息中心服务器可以将不冲突的结果返回给数据处理服务器,从而触发当前实例的立即执行。
在步骤302之后,还可以包括:
步骤303:响应于所述数据处理服务器发送的、与所述当前实例对应的心跳消息,判断所述心跳消息的发送间隔时间是否超过预设的心跳超时阈值,如果是,则从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
如果在当前实例的执行过程中,数据处理服务器向消息中心服务器发送了心跳消息,则消息中心服务器可以记录该心跳消息,并判断数据处理服务器发送心跳消息的发送间隔时间是否超过预设的心跳超时阈值。例如假设心跳消息为5秒钟发送一次,而心跳超时阈值则预先设置为15秒,那么消息中心服务器可以判断数据处理服务器的心跳消息是否超过15秒还未发送,如果是的话,说明当前实例可能已经执行完毕,则消息中心服务器就从第二锁请求列表中删除当前实例下的所有所请求对象和锁请求类型。如果没有超过心跳超时阈值则可以继续记录数据处理服务器发送的心跳信息。
在步骤302之后,还可以包括:
步骤304:响应于所述数据处理服务器发送的、所述当前实例的注销锁请求,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
在本步骤中,如果在当前实例执行完毕之后,数据处理服务器向消息中心服务器发送了当前实例的注销锁请求,则消息中心服务器就可以从第二锁请求列表中删除当前实例对应的所有锁请求对象和所有锁请求类型,还需要在锁依赖列表中删除
可见,在本申请实施例中,锁请求对象采用了虚拟路径的形式,因此本实施例中的锁是针对某个路径而设置的,因此,锁请求类型的个数会比现有技术少很多,因而提升了服务器处理数据任务的性能;并且,本申请实施例中将锁请求类型之间的冲突检测在消息中心服务器一侧进行,并由消息中心服务器将检测结果采用消息通知给数据处理服务器,从而减少了数据处理服务器的访问压力;进一步的,还可以在存在冲突的情况下,将冲突的实例标识返回给数据处理服务器,方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突了,用户后续就可以自己协商解决SQL执行冲突的问题。
对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述本申请一种数据处理任务中的冲突检测方法实施例2所提供的方法相对应,参见图4,本申请还提供了一种消息中心服务器实施例,在本实施例中,该服务器可以包括:
生成第二锁请求列表模块401,用于响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;其中,所述锁请求列表包括:锁请求对象和与所述锁请求对象对应的锁请求类型,所述锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的虚拟路径,所述锁请求类型用于表示在每个所述虚拟路径上都涉及哪些操作类型。
其中,第一锁请求列表中的第一锁请求类型可以包括:读类型、共享写类型和排他写类型;
相应的,所述生成第二锁请求列表模块,具体可以包括:
获取锁请求子模块,用于从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型;其中,所述第一锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的初始虚拟路径;
生成子模块,用于依据所述初始虚拟路径生成所述第二锁请求对象;其中,所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集;以及,
转化子模块,用于将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型,其中,所述第二锁请求类型包括:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型。
检测模块402,用于根据预先设置的冲突检测规则、所述第二锁请求对象和第二锁请求类型,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。
其中,所述检测模块402,具体可以包括:
获取互斥关系子模块,用于获取预先设置好的所述共享读锁、共享写锁、读脏、写脏和排它锁之间的互斥关系;和,判断子模块,用于依据所述互斥关系,针对同一个第二锁请求对象,判断执行所述当前实例涉及的第一锁访问类型和执行其他实例涉及的第二锁访问类型是否冲突。
在不同的实施例中,所述检测模块402还可以包括:
获取锁请求对象子模块,用于在判断结果为冲突的情况下,获取产生冲突的第二锁访问类型对应的冲突锁请求对象;
第一添加子模块,用于将所述冲突锁请求对象对应的其他实例的标识添加至所述当前实例的锁依赖列表中,所述锁依赖列表用于表示所述当前实例的执行时间在所述其他实例执行完毕之后;
第二添加子模块,用于将所述当前实例的标识添加至所述其他实例的锁通知列表中,所述锁通知列表用于表示所述其他实例执行之后需要通知所述当前实例执行;以及,
返回子模块,用于在判断结果为不冲突的情况下,将所述不冲突的结果返回至所述数据处理服务器,以便数据处理服务器立即执行所述当前实例。
在不同的实施例中,所述消息中心服务器还可以包括:
判断模块403,用于响应于所述数据处理服务器发送的、与所述当前实例对应的心跳消息,判断所述心跳消息的发送间隔时间是否超过预设的心跳超时阈值;和,第一删除模块,用于在所述判断模块的结果为是的情况下,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
在不同的实施例中,所述消息中心服务器还可以包括:
第二删除模块404,用于响应于所述数据处理服务器发送的、所述当前实例的注销锁请求,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
在本申请实施例中,锁请求对象采用了虚拟路径的形式,因此本实施例中的锁是针对某个路径而设置的,因此,锁请求类型的个数会比现有技术少很多,因而提升了服务器处理数据任务的性能;并且,本申请实施例中将锁请求类型之间的冲突检测在消息中心服务器一侧进行,并由消息中心服务器将检测结果采用消息通知给数据处理服务器,从而减少了数据处理服务器的访问压力;进一步的,还可以在存在冲突的情况下,将冲突的实例标识返回给数据处理服务器,方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突了,用户后续就可以自己协商解决SQL执行冲突的问题。
与上述本申请一种数据处理任务中的冲突检测方法实施例1所提供的方法相对应,参见图5,本申请实施例还提供了一种数据处理服务器,该数据处理服务器可以包括:
获取脚本模块501,用于响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本。
生成第一锁请求列表模块502,用于依据所述当前SQL脚本生成第一锁请求列表,所述第一锁请求列表包括:所述当前SQL脚本产生的当前实例的标识,第一锁请求对象和第一锁请求类型;其中,所述第一锁请求对象用于表示执行所述当前实例所涉及的初始虚拟路径,所述第一锁请求类型用于表示所述当前实例所涉及的初始操作类型。
发送列表模块503,用于将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突。
在不同的实施例中,所述数据处理服务器还可以包括:
发送心跳消息模块504,用于向所述消息中心服务器发送与所述当前实例对应的心跳消息,所述心跳消息用于表示所述当前实例正在执行。
在不同的实施例中,所述消息中心服务器中保存有依据所述第一锁请求列表生成的第二锁请求列表,所述第二锁请求列表包括第二锁请求对象和第二锁请求类型;则所述数据处理服务器还可以包括:
发送注销请求模块505,用于向所述消息中心服务器发送注销锁请求,所述注销锁请求用于请求所述消息中心服务器在所述第二锁请求列表中删除所述当前实例对应的第二锁请求对象和第二锁请求类型。
在本申请实施例中,锁请求对象采用了虚拟路径的形式,因此本实施例中的锁是针对某个路径而设置的,因此,锁请求类型的个数会比现有技术少很多,因而提升了服务器处理数据任务的性能;并且,本申请实施例中将锁请求类型之间的冲突检测在消息中心服务器一侧进行,并由消息中心服务器将检测结果采用消息通知给数据处理服务器,从而减少了数据处理服务器的访问压力;进一步的,还可以在存在冲突的情况下,将冲突的实例标识返回给数据处理服务器,方便用户查看哪些SQL产生的实例自己的SQL产生的实例执行冲突了,用户后续就可以自己协商解决SQL执行冲突的问题。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的处理数据任务中的冲突检测方法及服务器进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (16)
1.一种处理数据任务中的冲突检测方法,其特征在于,应用于消息中心服务器,包括:
响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;其中,所述锁请求列表包括:锁请求对象和与所述锁请求对象对应的锁请求类型,所述锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的虚拟路径,所述锁请求类型用于表示在每个所述虚拟路径上都涉及哪些操作类型;
根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述第一锁请求列表中的第一锁请求类型包括:读类型、共享写类型和排他写类型;
相应的,所述响应于数据处理服务器发送的、当前SQL脚本的第一锁请求列表,生成第二锁请求列表,包括:
从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型;其中,所述第一锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的初始虚拟路径;
依据所述初始虚拟路径生成所述第二锁请求对象,以及,将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型;其中,所述第二锁请求类型包括:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型;所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
2.根据权利要求1所述的方法,其特征在于,所述根据预先设置的冲突检测规则,依据所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突,包括:
获取预先设置好的所述共享读锁、共享写锁、读脏、写脏和排它锁之间的互斥关系;
依据所述互斥关系,针对同一个第二锁请求对象,判断执行所述当前实例涉及的第二锁访问类型和执行其他实例涉及的第二锁访问类型是否冲突。
3.根据权利要求2所述的方法,其特征在于,还包括:
在判断结果为冲突的情况下,获取产生冲突的第二锁访问类型对应的冲突锁请求对象,将所述冲突锁请求对象对应的其他实例的标识添加至所述当前实例的锁依赖列表中,所述锁依赖列表用于表示所述当前实例的执行时间在所述其他实例执行完毕之后;以及,将所述当前实例的标识添加至所述其他实例的锁通知列表中,所述锁通知列表用于表示所述其他实例执行之后需要通知所述当前实例执行;
在判断结果为不冲突的情况下,将所述不冲突的结果返回至所述数据处理服务器,以便数据处理服务器立即执行所述当前实例。
4.根据权利要求1所述的方法,其特征在于,还包括:
响应于所述数据处理服务器发送的、与所述当前实例对应的心跳消息,判断所述心跳消息的发送间隔时间是否超过预设的心跳超时阈值,如果是,则从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
5.根据权利要求1所述的方法,其特征在于,还包括:
响应于所述数据处理服务器发送的、所述当前实例的注销锁请求,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
6.一种处理数据任务中的冲突检测方法,其特征在于,应用于数据处理服务器,该方法包括:
响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本;
依据所述当前SQL脚本生成第一锁请求列表,所述第一锁请求列表包括:所述当前SQL脚本产生的当前实例的标识,第一锁请求对象和第一锁请求类型;其中,所述第一锁请求对象用于表示执行所述当前实例所涉及的初始虚拟路径,所述第一锁请求类型用于表示所述当前实例所涉及的初始操作类型;
将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
7.根据权利要求6所述的方法,其特征在于,在所述当前实例的执行过程中,还包括:
向所述消息中心服务器发送与所述当前实例对应的心跳消息,所述心跳消息用于表示所述当前实例正在执行。
8.根据权利要求6所述的方法,其特征在于,所述消息中心服务器中保存有依据所述第一锁请求列表生成的第二锁请求列表,所述第二锁请求列表包括第二锁请求对象和第二锁请求类型;
则所述方法还包括:
向所述消息中心服务器发送注销锁请求,所述注销锁请求用于请求所述消息中心服务器在所述第二锁请求列表中删除所述当前实例对应的第二锁请求对象和第二锁请求类型。
9.一种消息中心服务器,其特征在于,包括:
生成第二锁请求列表模块,用于响应于数据处理服务器发送的、当前结构化查询语言SQL脚本的第一锁请求列表,生成第二锁请求列表;其中,所述锁请求列表包括:锁请求对象和与所述锁请求对象对应的锁请求类型,所述锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的虚拟路径,所述锁请求类型用于表示在每个所述虚拟路径上都涉及哪些操作类型;
检测模块,用于根据预先设置的冲突检测规则和所述第二锁请求列表,检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述第一锁请求列表中的第一锁请求类型包括:读类型、共享写类型和排他写类型;相应的,所述生成第二锁请求列表模块,包括:
获取锁请求子模块,用于从所述第一锁请求列表中获取第一锁请求对象,以及每个第一锁请求对象涉及的读类型、共享写类型和/或排他写类型;其中,所述第一锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的初始虚拟路径;
生成子模块,用于依据所述初始虚拟路径生成所述第二锁请求对象;其中,所述第二锁请求对象用于表示执行所述当前SQL脚本产生的当前实例所涉及的最终虚拟路径,且所述最终虚拟路径为所述初始虚拟路径的全部子集;以及,
转化子模块,用于将所述第一锁请求类型转化为与第二锁请求对象对应的第二锁请求类型,其中,所述第二锁请求类型包括:共享读锁类型、共享写锁类型、读脏类型、写脏类型和排它锁类型;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
10.根据权利要求9所述的服务器,其特征在于,所述检测模块,包括:
获取互斥关系子模块,用于获取预先设置好的所述共享读锁、共享写锁、读脏、写脏和排它锁之间的互斥关系;
判断子模块,用于依据所述互斥关系,针对同一个第二锁请求对象,判断执行所述当前实例涉及的第二锁访问类型和执行其他实例涉及的第二锁访问类型是否冲突。
11.根据权利要求10所述的服务器,其特征在于,还包括:
获取锁请求对象子模块,用于在判断结果为冲突的情况下,获取产生冲突的第二锁访问类型对应的冲突锁请求对象;
第一添加子模块,用于将所述冲突锁请求对象对应的其他实例的标识添加至所述当前实例的锁依赖列表中,所述锁依赖列表用于表示所述当前实例的执行时间在所述其他实例执行完毕之后;第二添加子模块,用于将所述当前实例的标识添加至所述其他实例的锁通知列表中,所述锁通知列表用于表示所述其他实例执行之后需要通知所述当前实例执行;
返回子模块,用于在判断结果为不冲突的情况下,将所述不冲突的结果返回至所述数据处理服务器,以便数据处理服务器立即执行所述当前实例。
12.根据权利要求9所述的服务器,其特征在于,还包括:
判断模块,用于响应于所述数据处理服务器发送的、与所述当前实例对应的心跳消息,判断所述心跳消息的发送间隔时间是否超过预设的心跳超时阈值;
第一删除模块,用于在所述判断模块的结果为是的情况下,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
13.根据权利要求9所述的服务器,其特征在于,还包括:
第二删除模块,用于响应于所述数据处理服务器发送的、所述当前实例的注销锁请求,从所述第二锁请求列表中删除所述当前实例对应的所有锁请求对象和所有锁请求类型。
14.一种数据处理服务器,其特征在于,包括:
获取脚本模块,用于响应于用户触发的当前数据处理任务,获取所述当前数据处理任务中的当前结构化查询语言SQL脚本;
生成第一锁请求列表模块,用于依据所述当前SQL脚本生成第一锁请求列表,所述第一锁请求列表包括:所述当前SQL脚本产生的当前实例的标识,第一锁请求对象和第一锁请求类型;其中,所述第一锁请求对象用于表示执行所述当前实例所涉及的初始虚拟路径,所述第一锁请求类型用于表示所述当前实例所涉及的初始操作类型;
发送模块,用于将所述第一锁请求列表发送至与所述请求数据处理服务器相连的消息中心服务器,以便所述消息中心服务器根据所述第一锁请求列表生成第二锁请求列表,并根据预先设置的冲突检测规则和所述第二锁请求列表检测所述当前实例是否与其他SQL脚本产生的其他实例执行冲突;
其中,所述初始虚拟路径在应用场景中表示为数据库名称或表名称或表分区信息。
15.根据权利要求14所述的服务器,其特征在于,还包括:
发送心跳消息模块,用于向所述消息中心服务器发送与所述当前实例对应的心跳消息,所述心跳消息用于表示所述当前实例正在执行。
16.根据权利要求14所述的服务器,其特征在于,所述消息中心服务器中保存有依据所述第一锁请求列表生成的第二锁请求列表,所述第二锁请求列表包括第二锁请求对象和第二锁请求类型;
则所述服务器还包括:
发送注销请求模块,用于向所述消息中心服务器发送注销锁请求,所述注销锁请求用于请求所述消息中心服务器在所述第二锁请求列表中删除所述当前实例对应的第二锁请求对象和第二锁请求类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510163424.4A CN106156126B (zh) | 2015-04-08 | 2015-04-08 | 处理数据任务中的数据冲突检测方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510163424.4A CN106156126B (zh) | 2015-04-08 | 2015-04-08 | 处理数据任务中的数据冲突检测方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106156126A CN106156126A (zh) | 2016-11-23 |
CN106156126B true CN106156126B (zh) | 2019-10-11 |
Family
ID=57336280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510163424.4A Active CN106156126B (zh) | 2015-04-08 | 2015-04-08 | 处理数据任务中的数据冲突检测方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106156126B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3607464A1 (en) | 2017-04-21 | 2020-02-12 | Huawei Technologies Co., Ltd. | Data locking method based on alternating row and column locks |
CN110019057B (zh) * | 2017-09-27 | 2021-10-22 | 华为技术有限公司 | 请求处理方法及装置 |
CN111367202B (zh) * | 2018-12-26 | 2022-12-13 | 华为云计算技术有限公司 | 监控实例的方法、监控节点和监控集群 |
CN110222046B (zh) * | 2019-04-28 | 2023-11-03 | 北京奥星贝斯科技有限公司 | 列表数据的处理方法、装置、服务器和存储介质 |
CN113032407A (zh) * | 2019-12-24 | 2021-06-25 | 顺丰科技有限公司 | 互斥功能的处理方法、装置、存储介质和计算机设备 |
CN112035489B (zh) * | 2020-09-17 | 2023-09-22 | 中国银行股份有限公司 | 基于并行机制的任务冲突检测方法、装置及系统 |
CN113467960B (zh) * | 2021-05-28 | 2024-02-27 | 济南浪潮数据技术有限公司 | 基于共享锁的多路径存储方法、系统、终端及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101091181A (zh) * | 2004-10-05 | 2007-12-19 | 尤尼西斯公司 | 保存和恢复互锁树数据库 |
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN101702176A (zh) * | 2009-11-25 | 2010-05-05 | 南开大学 | 一种基于局部路径锁的xml数据并发控制方法 |
CN104391931A (zh) * | 2014-11-21 | 2015-03-04 | 浪潮电子信息产业股份有限公司 | 一种云计算中海量数据高效索引方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070162508A1 (en) * | 2004-11-08 | 2007-07-12 | Mazzagatti Jane C | Updating information in an interlocking trees datastore |
-
2015
- 2015-04-08 CN CN201510163424.4A patent/CN106156126B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101091181A (zh) * | 2004-10-05 | 2007-12-19 | 尤尼西斯公司 | 保存和恢复互锁树数据库 |
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN101702176A (zh) * | 2009-11-25 | 2010-05-05 | 南开大学 | 一种基于局部路径锁的xml数据并发控制方法 |
CN104391931A (zh) * | 2014-11-21 | 2015-03-04 | 浪潮电子信息产业股份有限公司 | 一种云计算中海量数据高效索引方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106156126A (zh) | 2016-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106156126B (zh) | 处理数据任务中的数据冲突检测方法及服务器 | |
CN107633016B (zh) | 数据处理方法及装置和电子设备 | |
Zaharia et al. | Fast and interactive analytics over Hadoop data with Spark | |
US20170279840A1 (en) | Automated event id field analysis on heterogeneous logs | |
CN104503891B (zh) | 对jvm线程进行在线监控的方法和装置 | |
CN102968374B (zh) | 一种数据仓库测试方法 | |
CN110795257A (zh) | 处理多集群作业记录的方法、装置、设备及存储介质 | |
CN104834599B (zh) | Web安全检测方法和装置 | |
CN108289034A (zh) | 一种故障发现方法和装置 | |
EP3188051B1 (en) | Systems and methods for search template generation | |
CN107786527B (zh) | 实现服务发现的方法及设备 | |
EP3373139A1 (en) | Lock mode determination service | |
US10812322B2 (en) | Systems and methods for real time streaming | |
CN108287854B (zh) | 一种流计算中数据持久化的方法和系统 | |
US20160041859A1 (en) | Synchronization testing of active clustered servers | |
Zheng et al. | Big data storage and management in SaaS applications | |
CN112579307A (zh) | 一种物理锁资源的分配检测方法、装置及电子设备 | |
US20150120697A1 (en) | System and method for analysis of a database proxy | |
CN112214505A (zh) | 数据同步方法、装置、计算机可读存储介质及电子设备 | |
Sun et al. | Expert system for automatic microservices identification using API similarity graph | |
US10033737B2 (en) | System and method for cross-cloud identity matching | |
JP2012094049A (ja) | インシデント管理システムおよびインシデント管理プログラム | |
Zhou et al. | A runtime verification based trace-oriented monitoring framework for cloud systems | |
CN116662426A (zh) | 数据库连接的建立方法、装置、设备及介质 | |
Faridoon et al. | Big Data Storage Tools Using NoSQL Databases and Their Applications in Various Domains: A Systematic Review. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |