CN114942966A - 基于分布式数据库的数据处理方法、装置和电子设备 - Google Patents
基于分布式数据库的数据处理方法、装置和电子设备 Download PDFInfo
- Publication number
- CN114942966A CN114942966A CN202210814636.4A CN202210814636A CN114942966A CN 114942966 A CN114942966 A CN 114942966A CN 202210814636 A CN202210814636 A CN 202210814636A CN 114942966 A CN114942966 A CN 114942966A
- Authority
- CN
- China
- Prior art keywords
- timestamp
- mixing
- target
- commit
- target data
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2322—Optimistic concurrency control using timestamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种基于分布式数据库的数据处理方法、装置、电子设备以及相关产品,涉及分布式数据库领域。该方法应用于分布式集群中任一节点,以当前节点为例:在接收到携带第一操作的请求之后,确定第一操作的当前状态,以及进入第一操作的当前状态的混合时间戳;根据第一操作确定待处理的目标数据行;根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式。由于每个混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定,混合时钟或混合时间戳可以在并发多事务场景中有效区分每个事务和每个状态。因此,基于具有明确的区分作用的混合时间戳,可以在事务处理过程中保证事务一致性和事务隔离性。
Description
技术领域
本申请涉及分布式数据库领域,具体而言,本申请涉及一种基于分布式数据库的数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
在分布式数据领域,如何协调多终端发起的事务,以保证事务一致性和隔离性是目前急需解决的技术问题。
目前,存在以下两种应对方式:
第一种方式,在分布式集群中使用全局的时间戳生成服务生成每项事务的时间戳,并根据该时间戳来确定事务的执行顺序,从而实现事务一致性和隔离性。
第二种方式,在分布式集群中,使用精确的GPS定时时钟(全球定位系统的定时服务,Global Positioning System)或者原子时钟提供时钟偏移较小的分布式时钟服务,并通过预设接口(如,truetimeAPI)为每项事务获取精确的时间,并根据时间顺序来确定事务的执行顺序,从而实现事务一致性和隔离性。
然而这两种方式要么可能会带来额外的时间延迟,要么需要昂贵且非普遍的硬件配置,并非理想的技术手段。
发明内容
本申请实施例的目的在于提供一种基于分布式数据库的数据处理方法、装置和电子设备,以解决上述技术问题之一。为了实现该目的,本申请实施例提供的方案如下:
一方面,提供了一种基于分布式数据库的数据处理方法,该方法包括:
确定第一操作的当前状态,以及进入当前状态的混合时间戳;其中,混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定;根据第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,目标数据行隶属于至少一个节点;根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式。
可选地,当前节点配置有生成物理时间戳的本机物理时钟,以及生成第一混合时间戳的混合时钟;确定进入当前状态的混合时间戳,包括:
获取当前的第一混合时间戳和物理时间戳,并比对物理时间戳与第一混合时间戳的物理时钟部分的数值的大小;若比对结果为相等,以自增方式更新第一混合时间戳的逻辑时钟部分的数值;若比对结果为大于,更新第一混合时间戳的物理时钟部分的数值为物理时间戳,以及以赋零值的方式更新第一混合时间戳的逻辑时钟部分的数值;确定进入当前状态的混合时间戳为更新的第一混合时间戳。
可选地,第一操作为目标提交操作;根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式,包括:
若目标数据行隶属于一个节点,且当前状态为提交状态,处理方式包括:针对目标数据行进行更新操作,并将进入目标提交操作的提交状态的第二混合时间戳确定为与更新操作相应的数据行的提交混合时间戳;若目标数据行隶属于至少两个节点,且当前状态为预提交状态,处理方式包括:根据进入目标提交操作的预提交状态的第三混合时间戳确定对目标数据行的处理方式。
可选地,根据进入目标提交操作的预提交状态的第三混合时间戳确定对目标数据行的处理方式,包括:
获取在至少两个节点上进入目标提交操作的预提交状态的第三混合时间戳,并从中筛选出最大的提交时间戳;将最大的提交时间戳作为进入目标提交操作的提交状态的第四混合时间戳,确定处理方式包括:针对目标数据行进行更新操作,并将第四混合时间戳确定为与更新操作相应的数据行的提交混合时间戳。
可选地,若接收到与用户终端相连接的节点发送的携带第五混合时间戳的任一请求,该方法还包括:
若第五混合时间戳大于当前的第一混合时间戳,更新当前的第一混合时间戳为第五混合时间戳。
可选地,混合时间戳还包括对应的状态标志;第一操作为目标读操作,以及当前状态为开始状态;根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式,包括:
若目标数据行的提交混合时间戳对应的状态标志为地址标志,获取操作目标数据行的第二操作,并根据第二操作和/或进入目标读操作的开始状态的第六混合时间戳确定对目标数据行的处理方式;若目标数据行的提交混合时间戳对应的状态标志为时间标志,根据第六混合时间戳确定对目标数据行的处理方式。
可选地,根据第二操作和/或进入目标读操作的开始状态的第六混合时间戳确定对目标数据行的处理方式,包括:
若目标读操作与第二操是同一事务中的操作,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作可见。
若目标读操作与第二操不是同一事务中的操作,且若第二操作为写操作或者若第二操作为处于开始状态的提交操作,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作不可见;若第二操作为处于预提交状态的提交操作,处理方式包括:响应于读信号,根据所述第六混合时间戳确定对所述目标数据行的处理方式。若目标读操作与第二操不是同一事务中的操作,且若所述第二操作为处于提交状态的提交操作,所述处理方式包括:根据所述第六混合时间戳确定对所述目标数据行的处理方式。
可选地,所述根据所述第六混合时间戳确定对所述目标数据行的处理方式,包括:
确定所述第六混合时间戳与所述目标数据行的提交混合时间戳的差值;若所述差值的绝对值不大于预设阈值,所述处理方式包括:重启所述目标读操作,以重新确定对所述目标数据行的处理方式;若所述差值的绝对值大于预设阈值,且所述差值大于零,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作可见;若所述差值的绝对值大于预设阈值,且所述差值小于零,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作不可见。
可选地,若所述处理方式包括设置所述目标数据行所记录的数据对所述目标读操作不可见,该方法还包括:
获取所述目标数据行关联的历史数据行;根据第六混合时间戳与关联的历史数据行的提交混合时间戳设置关联的历史数据行所记录的数据是否对目标读操作可见。
可选地,该方法还包括:
统计每个节点上处于活跃状态的操作,并从处于活跃状态的操作中筛选出进入相应操作的开始状态的混合时间戳为最小的第三操作;确定进入第三操作的开始状态的混合时间戳为第七混合时间戳;根据第七混合时间戳删除符合删除条件的历史数据行。
另一方面,本申请实施例还提供了一种基于分布式数据库的数据处理装置,应用于当前节点,当前节点为分布式集群中任一节点;该装置包括:
第一确定模块,用于确定第一操作的当前状态,以及进入当前状态的混合时间戳;其中,混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定。
第二确定模块,用于根据第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,目标数据行隶属于至少一个节点。
第三确定模块,用于根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式。
另一方面,本申请实施例还提供了一种电子设备,该电子设备包括:
存储器、处理器及存储在存储器上的计算机程序,处理器执行计算机程序以实现本申请实施例提供的一种基于分布式数据库的数据处理方法的步骤。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现本申请实施例提供的一种基于分布式数据库的数据处理方法的步骤。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现本申请实施例提供的一种基于分布式数据库的数据处理方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例提供的一种基于分布式数据库的数据处理方法,应用于分布式集群中任一节点。以当前节点为例,在接收到携带第一操作的请求之后,确定第一操作的当前状态,并确定进入第一操作的当前状态的混合时间戳。由于混合时间戳既包括物理时钟部分,还包括逻辑时钟部分,即便处于并发多操作的情形下,依然可以为每个操作的当前状态分配不同的混合时间戳,进而通过所分配的混合时间戳将每个操作进行有效区分。基于具有明确的区分作用的混合时间戳可对事务处理过程中的读操作、写操作、提交操作以及数据行进行有效区分,为确保事务一致性和隔离性提供可行性基础。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种基于分布式数据库的数据处理方法的流程示意图;
图2a为本申请实施例提供的一个混合时间戳的结构示意图;
图2b为本申请实施例提供的一个数据行的结构示意图;
图2c为本申请实施例提供的一个二阶段提交过程的流程示意图;
图3a为本申请实施例提供的一种基于分布式数据库的数据处理装置的结构示意图;
图3b为本申请实施例提供的一种基于分布式数据库的数据处理装置的结构示意图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在分布式数据领域,如何进行事务管理一直是热门的方向。在管理过程中,一般采用版本控制机制来协调各项事务。另外,由于需要处理的数据达到一定量级时,会采用多个物理服务器对数据进行分布式存储(每个物理服务器节点对应一个数据库)。其中,数据的一种存储方式为数据行形式进行存储。
其中,针对物理服务器上的数据行的操作具体可以包括:增加数据行、修改数据行、删除数据行和查询数据行。其中,将增/改/删数据行的操作理解为针对数据行的写操作,将查询数据行理解为针对数据行读操作。
事务一致性:在一个或多个事务之间之后,原来一致的数据和数据库仍然是一致的。如,在针对分布式节点中多个数据行进行写操作之后,若多个数据行的逻辑一致,则表示保持了事务一致性。若多个数据行的逻辑不一致,则表示未保持事务一致性。
事务隔离性:当多个用户向数据库发起访问,比如操作同一张表时,数据库为每一个用户开启的事务不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。如,当前节点上并行一个包括读操作的事务A和包括写操作的事务B时,事务A的读操作所读的数据行正被事务B的写操作处理,若该数据行对于事务A不可读,表示事务A和B之间存在隔离性;若该数据行对于事务A可读,表示事务A和B之间不存在隔离性。
因此,在进行事务管理时,如何保持事务一致性和隔离性,则成为急需解决的技术问题。
目前,实现事务一致性和隔离性的方案有两种,分别为第一种方式和第二种方式。具体如背景技术所言,现有的方案至少还存在以下问题:
(1)针对于第一种方式而言,使用全局时间戳,则会出现一次事务带来两次从全局的时间戳生成服务上获取时间戳的网络交互。其中,如果事务的操作仅在本节点上,即不是跨节点的分布式事务,也还是需要通过网络交互从全局的时间戳生成服务上获取时间戳,而这会带来额外的延迟。
(2)针对于第二种方式而言,使用定制硬件的物理时钟,如:GPS和原子时钟(昂贵且非普遍的硬件配置),不适用于由通用硬件搭建的分布式数据库。
因此,如何基于现有的条件(如,由配置有普通硬件的物理服务器搭建的分布式数据库),且不以牺牲操作的延迟性来实现事务的一致性和隔离性,仍为需要改进的技术问题。为了解决现有方案中至少一个问题,本申请实施例提供了一种基于分布式数据库的数据处理方法、装置以及电子设备,该方案基于混合的逻辑时钟,以及分布式事务二阶段提交手段,通过该方案可以实现在现有硬件的基础上,协调好各个事务中每项操作的处理过程,从而实现保持事务一致性和隔离性的目的。
本申请实施例提供的基于分布式数据库的数据处理方法可以由一个设备集群中任意电子设备执行,如可以由分布式集群中的物理服务器执行,该分布式集群中至少有两个物理服务器。可选地,物理服务器可以提供各种云服务,如云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务。在本申请实施例中,可以将分布式集群中的物理服务器理解为分布式集群的节点,即每个服务器为一个节点。可选地,与分布式集群交互的用户终端可以为任一电子设备,如智能手机、平板电脑、笔记本电脑、台式计算机、智能穿戴设备和车载终端等。
需要说明的是,每个物理服务器上的数据行可以为各种表中的数据行。例如,在银行业务中,包括客户的账户表、客户的信息表、每个账户的信息表。又或者,在产品业务中,包括A区域库存表、A区域出货表、A区域退货表、B区域库存表、B区域出货表、B区域退货表等。对此,本申请对此并不进行限定。
其中,在版本机制中,物理服务器还进行了事务的隔离级别的设定。如,RR(repeated-read)隔离级别:基于RR隔离级别,进入每个读/写操作的开始状态的时间为进入相应操作的开始状态的时间。RC(read-committed)隔离级别:基于RR隔离级别,进入每个读/写操作的开始状态的时间为进入相应事务的开始状态的时间。现有技术中,还存在其他的事务隔离级别的设定,可以根据相应隔离级别来设定进入每个操作的开始状态的具体时间,或者进入其他状态的具体时间。为描述简便,在此不再赘述。
为了更好的理解隔离级别和事务操作的关系,以RR隔离级别和RC隔离级别,本申请实施例还提供了事务t1的示例来进行详细的说明。
begin;//开始事务;
select*from accout;//第一次读操作;
update account set balance=balance+10where account_id=1;//第一次写操作;
select*from accout;//第二次读操作;
commit;//提交操作。
其中,事务t1总共包括5条SQL语句,每条语句从用户终端依次发送至相应的物理服务器。下面结合事务的隔离级别的设置,以及物理服务器接收到相应的SQL语句,来确定物理服务器所能执行的操作。
当物理服务器接收到“begin;”语句时:不能确定事务t1的类型。
当物理服务器接收到第一次读操作时:基于RR级别确定进入第一次读操作的开始状态的时间为start_time1,基于RC级别确定进入第一次读操作的开始状态的时间为start_time2;可以确定事务t1的类型为读事务;
当物理服务器接收到第一次写操作时:基于RR级别确定进入第一次写操作的开始状态的时间为start_time1,基于RC级别确定进入第一次写操作的开始状态的时间为start_time3;可以确定事务t1的类型为读写事务。
当物理服务器接收到第二次读操作时:基于RR级别确定进入第二次读操作的开始状态的时间为start_time1,基于RC级别确定进入第二次读操作的开始状态的时间为start_time4;可以确定事务t1的类型依旧为读写事务。
当物理服务器接收到“commit;”语句时:针对第一次写操作进行数据提交操作。由于第一次写操作仅涉及一个数据行,可以直接确定进入提交操作的提交时间start_time5。若第一次写操作涉及到不同节点上多个数据行时,则需要在多个节点中协商start_time5。
另外,还可以存在事务t2和事务t3。
事务t2为读事务,具体地:
begin;select*from accout;//读操作
commit;
事务t3为写事务,具体地:
begin;
update account set balance=balance+10where account_id=1;//写操作
commit;
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
本申请实施例中提供了一种基于分布式数据库的数据处理方法,应用于当前节点,该当前节点为分布式集群中任一节点。如图1所示,该方法包括步骤S110~S130。
S110,确定第一操作的当前状态,以及进入当前状态的混合时间戳;其中,混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定;
可选地,分布式集群中任一节点都可以跟用户终端建立连接,以处理第一操作。其中,目标数据行可以为分布式集群中任一节点上的数据行。
其中,混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定,分别包括物理时钟部分的数值和逻辑时钟部分的数值。可选地,混合时间戳中的物理时钟部分的数值的单位可以为毫秒级;混合时间戳中的逻辑时钟部分的数值为普通数值,该普通数值可以为非负整数范围中的数值。可选地,每个混合时间戳还对应一个状态标志,在进行存储时,混合时间戳与相应的状态标志共同存储。其中,若数据行处于静态中(如,存储在硬盘中,处于非操作状态),该状态标志为时间标志,且混合时间戳实质为时间数据;若数据行处于非静态状态(如,存储在动态内存中,数据行处于操作的状态),该状态标志为地址标志,且混合时间戳实质为地址指针。
如图2a所示的一个混合时间戳的具体存储示例,该存储的混合时间戳,包括3个部分的内容,依次为:状态标志,长度为2比特,用于存放该混合时间戳的状态标志;物理时钟部分,46比特,用于存放混合时钟的物理时钟部分的数值;逻辑时钟部分,16比特,用于存放混合时钟的逻辑时钟部分的数值。
可选地,当前节点配置有生成物理时间戳的本机物理时钟,以及生成第一混合时间戳的混合时钟。其中,分布式集群的其他每个节点也有相同的时钟配置。
可选地,在初始化当前节点时,创建一个空的混合时间戳(物理时钟部分的数值和逻辑时钟部分的数值均为空)。获取当前的物理时间戳,并赋值给该空的混合时间戳的物理时钟部分,并赋零值给该空的混合时间戳的逻辑时钟部分。将经过赋值处理的空的混合时间戳作为第一混合时间戳。在后续过程中,还可以对该第一混合时间戳进行更新。
可选地,本机物理时钟可以为当前节点上配置的有硬件设备支持的时钟或者配置的时钟服务,如由石英晶振谐振器支持的系统时钟。其中,石英晶振就是用石英材料做成的石英晶振谐振器,安装于电子设备上时,可为电子设备提供稳定的频率,系统时钟的单位时间来源于该频率。石英晶振具有抗干扰和性能良好的特性,广泛应用于各种电子设备中,如作为分布式集群中节点的物理服务器中。相较于其他的有硬件设备支持的时钟(如原子时钟)或者配置的时钟服务(如GPS定时服务),由于石英晶振的价格更加实惠,由石英晶振支持的系统时钟的方式显得更经济。应当指出,本机物理时钟还可以来源于其他经济实惠的时钟服务。
可选地,在确定第一操作的当前状态时,还可以根据如下步骤Sa1~Sa3来确定进入当前状态的混合时间戳。
Sa1,获取当前的第一混合时间戳和物理时间戳,并比对物理时间戳与第一混合时间戳的物理时钟部分的数值的大小。
具体地,在确定第一操作的状态时,获取当前节点的当前时刻的第一混合时间戳和物理时间戳,并比对物理时间戳与该第一混合时间戳的物理时钟部分的数值的大小。
Sa2,根据不同的比对结果,对第一混合时间戳进行更新。
若比对结果为相等,以自增方式更新第一混合时间戳的逻辑时钟部分的数值;确定进入当前状态的混合时间戳为更新的第一混合时间戳。
具体地,在第一混合时间戳的现有的逻辑时钟部分的数值的基础上,增加预设数值。可选地,该预设数值可以为任一数值,如数值1。
示例性地,当前节点接收到并发的10项操作,并需要分别确定进入该10项操作的当前状态的混合时间戳。其中,该10项操作包括:操作1、操作2……操作10,而且第一混合时间戳的物理时钟部分的数值为A、逻辑时钟部分的数值为B。在为每个操作的当前状态确定混合时间戳时,采用增1的方式确定逻辑时钟部分的数值。具体地,操作1的当前状态相应的逻辑数值为B+1,操作2的当前状态相应的逻辑数值为B+2……操作10的当前状态相应的逻辑数值为B+10。也就是说,进入操作1的当前状态的混合时间戳由A和(B+1)确定,进入操作2的当前状态的混合时间戳由A和(B+2)确定,进入操作10的当前状态的混合时间戳由A和(B+10)确定。因此,即便处于并发多操作的状态下,进入每个操作的当前状态的混合时间戳是不同的。
若比对结果为大于,更新第一混合时间戳的物理时钟部分数值为物理时间戳,以及以赋零值的方式更新第一混合时间戳的逻辑时钟部分的数值;确定进入当前状态的混合时间戳为更新的第一混合时间戳。
具体地,将第一混合时间戳的现有的物理时钟部分替换为物理时间戳,并赋零值给第一混合时间戳的现有的逻辑时钟部分,得到更新的第一混合时间戳。
可以理解的是,在当前时刻,该更新的第一混合时间戳就是最新的第一混合时间戳。示例性地,可以将最新的第一混合时间戳的获取方式设置为通过预设接口获取,如currentHLC()。具体地,当前节点在调用currentHLC()时,可获得当前时刻的最新的第一混合时间戳。
在现有技术中,若在一个时间段(如,在更新物理时钟的一个单位时间内),当前节点接收到多个携带具体操作的请求,即接收到并发操作,若按照物理时间戳为每个操作的当前状态分配时间戳,则会分配到一致的时间戳,导致每个操作的当前状态的区别不大。而本申请实施例提供的方案,可以通过调整逻辑时钟部分的数值,来为每个操作的当前状态分配不同的混合时间戳,从而有效区分每个操作的当前状态。而对每个操作的当前状态进行区分,为在进行包括读操作、写操作或提交操作处理时,保证事务一致性和隔离性提供可行性基础。
S120,根据第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,目标数据行隶属于至少一个节点。
具体地,目标数据行可以理解为第一操作所需要处理的数据行。其中,每个节点中存储的数据行分为两类,历史数据行和活跃数据行。其中,第一操作中携带有表征数据行特征的唯一的数据标识。历史数据行和活跃数据行之间通过表征数据行特征的数据标识建立关系,历史数据行记录该相同数据标识对应的历史数据,而活跃数据行记录该相同数据标识对应的最新的数据。其中,第一操作所携带的表征数据行特征的数据标识,在没有特别说明的情况下,主要用于获取该数据标识相应的活跃数据行。
其中,该记录提交时间的提交混合时间戳为提交该数据行时的提交时间戳。
如图2b所示的3个数据行示例,每个数据行由3部分组成:该行的混合时间戳(对应上述提交混合时间戳,如混合时间戳1,混合时间戳2,混合时间戳3),长度为8字节;指向该数据行的上一个历史数据行的标识,长度为4字节(如“200行”中的“201”,表示“200行”的上一历史数据行为“201行”);该行记录的数据,数据的长度和内容可以自定义。其中,处于“200行”所标识位置的数据行的历史数据行为处于“201行”所标识的位置,处于“201行”所标识位置的数据行的历史数据行为处于“202行”所标识的位置。其中,3个数据行对应同一个数据标识。
S130,根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式。
本申请实施例提供的一种基于分布式数据库的数据处理方法,应用于分布式集群中任一节点。以当前节点为例,在接收到携带第一操作的请求之后,确定第一操作的当前状态,并确定进入第一操作的当前状态的混合时间戳。由于混合时间戳既包括物理时钟部分,还包括逻辑时钟部分,即便处于并发多操作的情形下,依然可以为每个操作的当前状态分配不同的混合时间戳,进而通过所分配的混合时间戳将每个操作进行有效区分。基于具有明确的区分作用的混合时间戳可对事务处理过程中的读操作、写操作、提交操作以及数据行进行有效区分,为确保事务一致性和隔离性提供可行性基础。
在上述实施例中,示例性说明携带第一操作的请求的类型,但是针对不同的操作和事务的当前状态,所提供的处理方式存在不同。接下来,将根据第一操作为读操作和提交操作分别进行详细的阐述。
在一个可选的实施例中,第一操作为目标提交操作。其中,进入目标提交操作的当前状态可以为进入目标提交操作的开始状态,以及提交状态或预提交状态。另外,目标数据行隶属节点的数量也影响到事务处理。因此,步骤S130可以包括如下Sb1和S2。
Sb1,若目标数据行隶属于一个节点,且当前状态为提交状态,处理方式包括:针对目标数据行进行更新操作,并将进入目标提交操作的提交状态的第二混合时间戳确定为与更新操作相应的数据行的提交混合时间戳。
具体地,在确定目标数据行隶属于一个节点之后。当前节点开始执行提交操作:首先,在当前节点上确定进入目标提交操作的提交状态的第二混合时间戳;其次,由当前节点通知目标数据行所隶属的节点针对目标数据行提交更新内容,将进入提交状态的第二混合时间戳确定为更新内容相应的提交时间戳。
可选地,确定目标数据行所隶属节点的方式有很多,包括:根据目标提交操作携带的目标数据行的数据标识,根据数据标识相应的活跃数据行或者历史数据行所属表的表标识,携带该表标识的表所属节点,从而确定目标数据行所属节点。应当指出,确定目标数据行的隶属节点的方式有很多,为描述简便,在此不一一列举。
Sb2,若目标数据行隶属于至少两个节点,且当前状态为预提交状态,处理方式包括:根据进入目标提交操作的预提交状态的第三混合时间戳确定对目标数据行的处理方式。
可选地,该至少两个节点可以包括当前节点,也可以不包括当前节点。
其中,Sb2具体可以包括:获取在至少两个节点上进入目标提交操作的预提交状态的第三混合时间戳,并从中筛选出最大的提交时间戳;
将最大的提交时间戳作为进入目标提交操作的提交状态的第四混合时间戳,确定处理方式包括:针对目标数据行进行更新操作,并将第四混合时间戳确定为与更新操作相应的数据行的提交混合时间戳。
具体地,当前节点向至少两个节点中非当前节点的其他节点发送预提交统计请求;任一其他节点接收到预提交统计请求之后,确定进入目标提交操作的预提交状态的第三混合时间戳并将该混合时间戳作为反馈数据,反馈给当前节点;当前节点接收到其他节点发送的反馈数据之后,确定了至少两个节点中每个节点上进入目标提交操作的预提交状态的第三混合时间戳。
接下来,当前节点从进入目标提交操作的预提交状态的至少两个第三混合时间戳中,筛选出最大的提交时间戳,以作为进入目标提交操作的提交状态的第四混合时间戳。当前节点还向该至少两个节点中除当前节点之外的其他节点发送携带第四混合时间戳的第二提交请求;该其他节点接收到第二请求之后,提交更新内容,并将第四混合时间戳确定为该更新内容相应的提交时间戳。
需要说明的是,任一节点在执行提交操作时,需注意以下两方面:一方面,该节点需要将目标提交操作携带的数据标识对应的活跃数据行设置为历史数据行,也即,将目标数据行设置为历史数据行。另一方面,该节点需要根据目标提交操作携带的数据标识针对更新内容创建新的活跃数据行(即更新内容相应的数据行),并将更新内容相应的提交时间戳作为新的活跃数据行的提交混合时间戳。其中,若写操作为删除数据行的操作,则不需要创建活跃数据行。
可选地,在发送预提交统计请求之前,向至少两个节点中其他节点发送更新请求,该更新请求中携带有进入目标提交操作的开始状态的第八混合时间戳。该其他节点接收到更新请求之后,将该更新请求携带的混合时间戳确定为进入目标提交操作的开始状态的第八混合时间戳。也即,该过程即为至少两个节点针对进入目标提交操作的开始状态的第八混合时间戳进行了统一。
在一个可选的实施例中,若接收到与用户终端相连接的节点发送的携带第五混合时间戳的任一请求,该方法还包括:
若第五混合时间戳大于当前的第一混合时间戳,更新当前的第一混合时间戳为第五混合时间戳。
示例性地,如当前节点在接收到携带第四混合时间戳的第二提交请求,需要比对第五混合时间戳和当前的第一混合时间戳的大小。若比对结果为不大于,无需对当前的第一混合时间戳进行处理。若比对结果为小于,需要对当前的第一混合时间戳进行处理。
由于在节点上进行事务处理时,存在部分节点的第一混合时间戳落后于其他节点的情况,此时,需要将该部分节点的第一混合时间戳进行更新,以统一每个节点的第一混合时间戳。
为了更清楚地理解当前节点如何基于写操作执行提交操作,本申请实施例还提供了一个具体的实施示例。该示例的背景为:基于用户终端,小明向小红转账100元。那么用户终端需要协同当前节点进行如下操作:更新小明的账户为“减少100元”,更新小红的账户为“增加100元”。用户终端发起一项事务t4,事务t4的具体内容如下:
begin;
updateaccountbalance=balance-100wherename=‘小明’;
update account balance=balance+100where name=‘小红’;
commit;
其中,可将该关键语句中字段‘小明’和字段‘小红’理解为目标提交操作中表征数据行特征的数据标识。若确定小明和小红的账户都在节点1(可对应上述实施例中目标数据行隶属于一个节点的情形)上,未发生转账操作之前,节点1中关于小明和小红的账户的详情如下表1所示。
表1
在表1中,行的标识对应数据行在表中真实的行位置,如“行100”为相应表的第100行,“行10”为相应表的第10行;表中所示的提交混合时间戳仅为示例性数值,数值越大,说明对应的混合时间戳越大,如110005对应的时间戳是大于110000对应的时间戳。其中,行的标识为“行10”、“行9”的数据行为历史数据行,行的标识为“行100”、“行110”的数据行为活跃数据行。
当前节点在接收到上述关键语句时,执行相应的操作,以使记录的小明和小红的账户数据得到更新。更新后的节点1中新增了两个数据行,分别为“行210”和“行211”,具体如下表2所示。
表2
若确定小明和小红的账户在节点1和节点2(可对应上述实施例中,目标数据行隶属于至少两个节点的情形)上,需在节点1和节点2之间协调如何提交更新,该更新过程可以参考图2c所示的流程,该流程包括步骤S1001~S1003。本示例中,以节点0作为协调者并用来标识分布式集群中任一节点,将节点1和节点2作为目标提交操作的参与者。
S1001,目标提交操作的协调者和参与者针对进入目标提交操作的开始状态的时间进行了统一。
具体地,由协调者获取进入目标提交操作的开始状态的时间ts1,并将携带ts1的更新请求发送至参与者;每个参与者在接收到ts1之后,将进入目标提交操作的开始状态的时间更新为ts1。
其中,确定参与者在更新之后,向协调者发送更新成功的反馈。
S1002,协调者发起预提交统计。
具体地,由协调者向参与者发送预提交统计请求,以获取在每个参与者中进入目标提交操作的预提交状态的时间ts2。参与者确定ts2,并向协调者反馈ts2。统计完多个ts2之后(本示例中,为两个),从多个ts2中确定最大的ts2,并作为进入目标提交操作的提交状态的ts3。
S1003,参与者根据ts3进行提交操作。
协调者在确定ts3之后,向每个参与者发送携带ts3的第二提交请求,以督促参与者根据ts3提交更新内容。具体地,参与者将当前的活跃数据行列为历史数据行,并为更新内容创建新的活跃数据行,以及将ts3作为该新的活跃数据行的提交混合时间戳。
需要说明的是,ts1可以对应上述实施例中为进入目标提交操作的开始状态的第八混合时间戳。ts2可以对应上述实施例中第三混合时间戳。ts3可以对应上述实施例中的第四混合时间戳。
S1001~S1003为针对包括至少两个参与者的目标提交操作的提交过程,也可以称作二阶段提交过程。针对包括一个参与者的目标提交操作的提交过程,也可以称作一阶段提交过程。其中,对于一阶段提交过程,直接根据协调者确定的进入目标提交操作的提交状态的第二混合时间戳,并由单个参与者来执行提交操作。
接下来针对第一操作为读操作进行具体的阐述。
在一个可选的实施例中,第一操作为目标读操作。每个混合时间戳还包括对应的状态标志,如:目标数据行的提交混合时间戳就包括对应的状态标志。进入目标读操作的当前状态为进入目标读操作的开始状态。在本实施例中,S130具体可以包括步骤Sb3和Sb4中任一种情形。
Sb3,若目标数据行的提交混合时间戳对应的状态标志为地址标志,获取操作目标数据行的第二操作,并根据第二操作和/或进入目标读操作的开始状态的第六混合时间戳确定对目标数据行的处理方式。其中,确定处理方式的过程包括如下步骤Sb3-1~Sb3-2。
Sb3-1,当目标读操作与第二操是同一事务中的操作时,处理方式包括:设置目标数据行所记录的数据对目标读操作可见。
具体地,若目标读操作和第二操作同一事务中的操作,操作目标数据行的第二操作相应的事务中任一操作,都可以访问目标数据行。以上述事务ts1为示例,第二操作可以对应第一次写操作,第一操作可以对应第二次读操作。
其中,第二操作可以为写操作,也可以为提交操作。
Sb3-2,当目标读操作与第二操不是同一事务中的操作时,可根据第二操作的类型和/或状态来进行判断。
可选地,若第二操作为写操作或者若第二操作为处于开始状态的提交操作,处理方式包括:设置目标数据行所记录的数据对目标读操作不可见。
可选地,若第二操作为处于预提交状态的提交操作,处理方式包括:响应于读信号,根据第六混合时间戳确定对目标数据行的处理方式。具体地,若确定为预提交状态的提交操作,为目标读操作注册读信号,一旦目标数据行从上锁状态变成解锁状态,则发送读信号;当前节点在接收到读信号之后,可继续根据第六混合时间戳确定对目标数据行的处理方式。
可选地,若第二操作为处于提交状态的提交操作,处理方式包括:根据第六混合时间戳确定对目标数据行的处理方式。
可选地,在事务的初始化阶段,节点为每项事务分配了一个唯一编号。其中,一项事务包括多个操作,如读操作、写操作、提交操作。可以根据事务编号来判断任意两项操作是否为同一个事务。
Sb4,若目标数据行的提交混合时间戳对应的状态标志为时间标志,根据第六混合时间戳确定对目标数据行的处理方式。
具体地,确定第六混合时间戳与目标数据行的提交混合时间戳的差值,然后根据该差值与预设阈值的大小关系判断处理方式。判断结果如下:
可选地,若差值的绝对值不大于预设阈值,处理方式包括:重启目标读操作,以重新确定对目标数据行的处理方式;
可选地,若差值的绝对值大于预设阈值,且差值大于零,处理方式包括:设置目标数据行所记录的数据对目标读操作可见;
可选地,若差值的绝对值大于预设阈值,且差值小于零,处理方式包括:设置目标数据行所记录的数据对目标读操作不可见。
可选地,该预设阈值可以理解为根据经验设置的误差值,因此,该误差值可以为以毫秒为单位的时间,如1ms。
在上述实施例中出现了目标数据行对目标读操作不可见的情况,如何回应目标读操作也是事务管理过程中的重要问题。
在一个可选的实施例中,若处理方式包括设置目标数据行所记录的数据对第一操作不可见,该方法还包括:
获取目标数据行关联的历史数据行;根据第六混合时间戳与关联的历史数据行的提交混合时间戳设置关联的历史数据行所记录的数据是否对目标读操作可见。
具体地,目标数据行可以有关联的多个历史数据行,并且每个数据行上有记录上一个数据版本所对应的历史数据行的行标识。根据目标数据行中记录的行标识确定所关联的上一个历史数据行,并判断该历史数据行的数据是否可见。若该历史数据行的数据不可见,则获取该历史数据行所关联的数据行并进行可见性判断,直至最后一个历史数据行。
也就是说,在判断目标数据行不可读的条件下,可以依照时间的顺序从最新的数据版本到最老的数据版本依次判断,若判断其中一个历史数据行可见,则反馈该历史数据行的数据。即在判断活跃数据行不可见的情况下,还可以判断历史数据行是否可见,解决了如何回应目标读操作的问题。
由于不断进行写操作、提交操作,节点中多了很多的冗余数据,这对节点的存储资源是一种浪费。
在一种可选的实施例中,该方法还包括:
统计每个节点上处于活跃状态的操作,并从处于活跃状态的操作中筛选出相应的进入开始状态的混合时间戳为最小的第三操作;确定进入第三操作的开始状态的混合时间戳为第七混合时间戳;根据第七混合时间戳删除符合删除条件的历史数据行。
其中,根据第七混合时间戳删除对第三操作符合删除条件的历史数据行,具体可以针对每个节点上每一组具有相同数据标识的数据行执行以下操作:
筛选出该组数据行中相应的提交混合时间戳小于第七混合时间戳的数据行;基于第七混合时间戳与每个筛选出的数据行的提交混合时间戳,确定该筛选出的数据行的数据是否对第三操作可见,若不可见,删除该筛选出的数据行。
本申请实施例还提供了一种基于分布式数据库的数据处理装置,应用于当前节点,该当前节点为分布式集群中任一节点。如图3a所示,该装置300包括:
第一确定模块310,用于确定第一操作的当前状态,以及进入当前状态的混合时间戳;其中,混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定。
第二确定模块320,用于根据第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,目标数据行隶属于至少一个节点。
第三确定模块330,用于根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式。
在一个可选的实施例中,当前节点配置有生成物理时间戳的本机物理时钟,以及生成第一混合时间戳的混合时钟;第一确定模块310在确定进入当前状态的混合时间戳中,具体用于:
获取当前的第一混合时间戳和物理时间戳,并比对物理时间戳与第一混合时间戳的物理时钟部分的数值的大小;若比对结果为相等,以自增方式更新第一混合时间戳的逻辑时钟部分的数值;若比对结果为大于,更新第一混合时间戳的物理时钟部分的数值为物理时间戳,以及以赋零值的方式更新第一混合时间戳的逻辑时钟部分的数值;确定进入当前状态的混合时间戳为更新的第一混合时间戳。
在一个可选的实施例中,第一操作为目标提交操作;第三确定模块330在根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式中,具体用于:
若目标数据行隶属于一个节点,且当前状态为提交状态,处理方式包括:针对目标数据行进行更新操作,并将进入目标提交操作的提交状态的第二混合时间戳确定为与更新操作相应的数据行的提交混合时间戳;
若目标数据行隶属于至少两个节点,且当前状态为预提交状态,处理方式包括:根据进入目标提交操作的预提交状态的第三混合时间戳确定对目标数据行的处理方式。
可选地,第三确定模块330在根据进入目标提交操作的预提交状态的第三混合时间戳确定对目标数据行的处理方式中,具体用于:
获取在至少两个节点上进入目标提交操作的预提交状态的第三混合时间戳,并从中筛选出最大的提交时间戳;将最大的提交时间戳作为进入目标提交操作的提交状态的第四混合时间戳,确定处理方式包括:针对目标数据行进行更新操作,并将第四混合时间戳确定为与更新操作相应的数据行的提交混合时间戳。
可选地,如图3b所示装置300还包括更新模块340,,若接收到与用户终端相连接的节点发送的携带第五混合时间戳的任一请求,更新模块340还用于:
若第五混合时间戳大于当前的第一混合时间戳,更新当前的第一混合时间戳为第五混合时间戳。
在一个可选的实施例中,混合时间戳还包括对应的状态标志;第一操作为目标读操作,以及当前状态为开始状态;第三确定模块330在根据进入当前状态的混合时间戳和/或目标数据行的提交混合时间戳确定对目标数据行的处理方式中,具体用于:
若目标数据行的提交混合时间戳对应的状态标志为地址标志,获取操作目标数据行的第二操作,并根据第二操作和/或进入目标读操作的开始状态的第六混合时间戳确定对目标数据行的处理方式;若目标数据行的提交混合时间戳对应的状态标志为时间标志,根据第六混合时间戳确定对目标数据行的处理方式。
可选地,第三确定模块330在根据第二操作和/或进入目标读操作的开始状态的第六混合时间戳确定对目标数据行的处理方式中,具体用于:
当目标读操作与第二操是同一事务中的操作时,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作可见。
当目标读操作与第二操不是同一事务中的操作时:
若第二操作为写操作或者若第二操作为处于开始状态的提交操作,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作不可见;以及若第二操作为处于预提交状态的提交操作,处理方式包括:响应于读信号,根据所述第六混合时间戳确定对所述目标数据行的处理方式;以及若所述第二操作为处于提交状态的提交操作,所述处理方式包括:根据所述第六混合时间戳确定对所述目标数据行的处理方式。
可选地,第三确定模块330在根据第六混合时间戳确定对目标数据行的处理方式中,具体用于:
确定第六混合时间戳与目标数据行的提交混合时间戳的差值;若差值的绝对值不大于预设阈值,处理方式包括:重启目标读操作,以重新确定对目标数据行的处理方式;若差值的绝对值大于预设阈值,且差值大于零,处理方式包括:设置目标数据行所记录的数据对目标读操作可见;若差值的绝对值大于预设阈值,且差值小于零,处理方式包括:设置目标数据行所记录的数据对目标读操作不可见。
可选地,若处理方式包括设置目标数据行所记录的数据对目标读操作不可见,第三确定模块330还可以用于:
获取目标数据行关联的历史数据行;根据第六混合时间戳与关联的历史数据行的提交混合时间戳设置关联的历史数据行所记录的数据是否对目标读操作可见。
可选地,如图3b所示该装置还包括删除模块350,删除模块350可以用于:
统计每个节点上处于活跃状态的操作,并从处于活跃状态的操作中筛选出进入相应操作的开始状态的混合时间戳为最小的第三操作;确定进入第三操作的开始状态的混合时间戳为第七混合时间戳;根据第七混合时间戳删除符合删除条件的历史数据行。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现一种基于分布式数据库的数据处理方法的步骤,与相关技术相比可实现:在现有的硬件条件下,保证处理过程中事务一致性和隔离性。
在一个可选实施例中提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
其中,电子设备包括但不限于:分布式集群中任一物理服务器。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (14)
1.一种基于分布式数据库的数据处理方法,其特征在于,应用于当前节点,所述当前节点为分布式集群中任一节点;所述方法包括:
确定第一操作的当前状态,以及进入所述当前状态的混合时间戳;其中,所述混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定;
根据所述第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,所述目标数据行隶属于至少一个节点;
根据进入所述当前状态的混合时间戳和/或所述目标数据行的提交混合时间戳确定对所述目标数据行的处理方式。
2.根据权利要求1所述的方法,其特征在于,所述当前节点配置有生成物理时间戳的本机物理时钟,以及生成第一混合时间戳的混合时钟;所述确定进入所述当前状态的混合时间戳,包括:
获取当前的第一混合时间戳和物理时间戳,并比对所述物理时间戳与所述第一混合时间戳的物理时钟部分的数值的大小;
若比对结果为相等,以自增方式更新所述第一混合时间戳的逻辑时钟部分的数值;
若比对结果为大于,更新所述第一混合时间戳的物理时钟部分的数值为所述物理时间戳,以及以赋零值的方式更新所述第一混合时间戳的逻辑时钟部分的数值;
确定进入所述当前状态的混合时间戳为更新的第一混合时间戳。
3.根据权利要求1所述的方法,其特征在于,所述第一操作为目标提交操作;所述根据进入所述当前状态的混合时间戳和/或所述目标数据行的提交混合时间戳确定对所述目标数据行的处理方式,包括:
若所述目标数据行隶属于一个节点,且所述当前状态为提交状态,所述处理方式包括:针对所述目标数据行进行更新操作,并将进入所述目标提交操作的提交状态的第二混合时间戳确定为与所述更新操作相应的数据行的提交混合时间戳;
若所述目标数据行隶属于至少两个节点,且所述当前状态为预提交状态,所述处理方式包括:根据进入所述目标提交操作的预提交状态的第三混合时间戳确定对所述目标数据行的处理方式。
4.根据权利要求3所述的方法,其特征在于,所述根据进入所述目标提交操作的预提交状态的第三混合时间戳确定对所述目标数据行的处理方式,包括:
获取在所述至少两个节点上进入目标提交操作的预提交状态的第三混合时间戳,并从中筛选出最大的提交时间戳;
将所述最大的提交时间戳作为进入所述目标提交操作的提交状态的第四混合时间戳,确定所述处理方式包括:针对所述目标数据行进行更新操作,并将所述第四混合时间戳确定为与所述更新操作相应的数据行的提交混合时间戳。
5.根据权利要求1所述的方法,其特征在于,若接收到与所述用户终端相连接的节点发送的携带第五混合时间戳的任一请求,所述方法还包括:
若所述第五混合时间戳大于当前的第一混合时间戳,更新所述当前的第一混合时间戳为所述第五混合时间戳。
6.根据权利要求1所述的方法,其特征在于,所述混合时间戳还包括对应的状态标志;所述第一操作为目标读操作,以及所述当前状态为开始状态;所述根据进入所述当前状态的混合时间戳和/或所述目标数据行的提交混合时间戳确定对所述目标数据行的处理方式,包括:
若目标数据行的提交混合时间戳对应的状态标志为地址标志,获取操作所述目标数据行的第二操作,并根据所述第二操作和/或所述进入目标读操作的开始状态的第六混合时间戳确定对所述目标数据行的处理方式;
若目标数据行的提交混合时间戳对应的状态标志为时间标志,根据所述第六混合时间戳确定对所述目标数据行的处理方式。
7.根据权利要求6所述的方法,其特征在于,所述根据所述第二操作和/或所述进入目标读操作的开始状态的第六混合时间戳确定对所述目标数据行的处理方式,包括:
当目标读操作与第二操是同一事务中的操作时,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作可见;
当目标读操作与第二操不是同一事务中的操作时:
若第二操作为写操作或者若第二操作为处于开始状态的提交操作,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作不可见;以及若第二操作为处于预提交状态的提交操作,处理方式包括:响应于读信号,根据所述第六混合时间戳确定对所述目标数据行的处理方式;以及若所述第二操作为处于提交状态的提交操作,所述处理方式包括:根据所述第六混合时间戳确定对所述目标数据行的处理方式。
8.根据权利要求6或者7所述的方法,其特征在于,所述根据所述第六混合时间戳确定对所述目标数据行的处理方式,包括:
确定所述第六混合时间戳与所述目标数据行的提交混合时间戳的差值;
若所述差值的绝对值不大于预设阈值,所述处理方式包括:重启所述目标读操作,以重新确定对所述目标数据行的处理方式;
若所述差值的绝对值大于预设阈值,且所述差值大于零,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作可见;
若所述差值的绝对值大于预设阈值,且所述差值小于零,所述处理方式包括:设置所述目标数据行所记录的数据对所述目标读操作不可见。
9.根据权利要求8所述的方法,其特征在于,若所述处理方式包括设置所述目标数据行所记录的数据对所述目标读操作不可见,所述方法还包括:
获取所述目标数据行关联的历史数据行;
根据第六混合时间戳与所述关联的历史数据行的提交混合时间戳设置所述关联的历史数据行所记录的数据是否对所述目标读操作可见。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
统计每个节点上处于活跃状态的操作,并从处于活跃状态的操作中筛选出进入相应操作的开始状态的混合时间戳为最小的第三操作;
确定进入第三操作的开始状态的混合时间戳为第七混合时间戳;
根据第七混合时间戳删除符合删除条件的历史数据行。
11.一种基于分布式数据库的数据处理装置,其特征在于,应用于当前节点,所述当前节点为分布式集群中任一节点;所述装置包括:
第一确定模块,用于确定第一操作的当前状态,以及进入所述当前状态的混合时间戳;其中,所述混合时间戳由包括物理时钟和逻辑时钟的混合时钟确定;
第二确定模块,用于根据所述第一操作确定待处理的目标数据行;其中,每个数据行包括记录提交时间的提交混合时间戳和记录的数据,所述目标数据行隶属于至少一个节点;
第三确定模块,用于根据进入所述当前状态的混合时间戳和/或所述目标数据行的提交混合时间戳确定对所述目标数据行的处理方式。
12.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-10任一项所述方法的步骤。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10任一项所述方法的步骤。
14.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210814636.4A CN114942966A (zh) | 2022-07-11 | 2022-07-11 | 基于分布式数据库的数据处理方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210814636.4A CN114942966A (zh) | 2022-07-11 | 2022-07-11 | 基于分布式数据库的数据处理方法、装置和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114942966A true CN114942966A (zh) | 2022-08-26 |
Family
ID=82911258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210814636.4A Pending CN114942966A (zh) | 2022-07-11 | 2022-07-11 | 基于分布式数据库的数据处理方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114942966A (zh) |
-
2022
- 2022-07-11 CN CN202210814636.4A patent/CN114942966A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9934263B1 (en) | Big-fast data connector between in-memory database system and data warehouse system | |
EP3791285A1 (en) | Multi-master architectures for distributed databases | |
CN103246659B (zh) | 键值数据查询的方法和装置 | |
CN109766330B (zh) | 数据分片方法、装置、电子设备及存储介质 | |
CN107464151B (zh) | 高并发业务的订单数据处理方法及装置 | |
EP3869434A1 (en) | Blockchain-based data processing method and apparatus, device, and medium | |
CN103390041A (zh) | 一种基于中间件提供数据服务的方法和系统 | |
CN111143382B (zh) | 数据处理方法、系统和计算机可读存储介质 | |
CN110162512B (zh) | 一种日志检索方法、装置及存储介质 | |
CN110018884B (zh) | 分布式事务处理方法、协调装置、数据库及电子设备 | |
CN111061758B (zh) | 数据存储方法、装置及存储介质 | |
CN110134503B (zh) | 一种集群环境下的定时任务处理方法、装置及存储介质 | |
CN111858676A (zh) | 一种数据处理的方法及装置 | |
CN113515545B (zh) | 数据查询方法、装置、系统、电子设备以及存储介质 | |
CN112671950B (zh) | 基于区块链的域名处理方法、装置、电子设备和存储介质 | |
WO2019100853A1 (zh) | 分页查询方法及装置和电子设备 | |
CN113094434A (zh) | 数据库同步方法、系统、装置、电子设备及介质 | |
CN107025257B (zh) | 一种事务处理方法及装置 | |
CN110381150B (zh) | 区块链上的数据处理方法、装置、电子设备及存储介质 | |
CN114942966A (zh) | 基于分布式数据库的数据处理方法、装置和电子设备 | |
CN116186082A (zh) | 基于分布式的数据汇总方法、第一服务器和电子设备 | |
CN112035471B (zh) | 一种事务处理方法及计算机设备 | |
CN112785302B (zh) | 报文统计方法、装置、电子设备及可读存储介质 | |
WO2018145739A1 (en) | Methods, client and server relating to a distributed database | |
CN112860694B (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 |