CN111475585B - 数据处理方法、装置和系统 - Google Patents

数据处理方法、装置和系统 Download PDF

Info

Publication number
CN111475585B
CN111475585B CN202010570909.6A CN202010570909A CN111475585B CN 111475585 B CN111475585 B CN 111475585B CN 202010570909 A CN202010570909 A CN 202010570909A CN 111475585 B CN111475585 B CN 111475585B
Authority
CN
China
Prior art keywords
transaction
data structure
identifier
transaction information
stored
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
Application number
CN202010570909.6A
Other languages
English (en)
Other versions
CN111475585A (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 Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing 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 Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202010570909.6A priority Critical patent/CN111475585B/zh
Publication of CN111475585A publication Critical patent/CN111475585A/zh
Application granted granted Critical
Publication of CN111475585B publication Critical patent/CN111475585B/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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • 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/25Integrating or interfacing systems involving database management systems

Landscapes

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

Abstract

本申请公开了一种数据处理方法、装置和系统。其中,该方法包括:确定分布式数据库中当前存储的数据对应的第一事务;获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。本申请解决了相关技术中分布式数据库中无法实现分布式事务的一致性读的技术问题。

Description

数据处理方法、装置和系统
技术领域
本申请涉及数据库领域,具体而言,涉及一种数据处理方法、装置和系统。
背景技术
目前,MySQL是广泛使用的开源数据库,为了避免用户使用出现问题,需要提供一致性的读事务。例如,以对账场景为例,要求读取到的数据必须是一致的,也即,一笔交易对于当前事务可见,或者对于当前事务不可见,不能出现收款方数额增加,但是扣款方数额未减少的情况。但是,对于分布式事务,无法实现分布式部署的多个MySQL节点的一致性读。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种数据处理方法、装置和系统,以至少解决相关技术中分布式数据库中无法实现分布式事务的一致性读的技术问题。
根据本申请实施例的一个方面,提供了一种数据处理方法,包括:确定分布式数据库中当前存储的数据对应的第一事务;获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
根据本申请实施例的另一方面,还提供了一种数据处理装置,包括:第一确定模块,用于确定分布式数据库中当前存储的数据对应的第一事务;第一获取模块,用于获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;第二确定模块,用于基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
根据本申请实施例的另一方面,还提供了一种数据处理系统,包括:分布式部署的多个数据节点,用于存储数据;处理节点,用于确定多个数据节点中当前存储的数据对应的第一事务,获取存储的第一事务的第一事务信息,并基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态,第二事务为当前对多个数据节点中存储的数据进行读取操作的事务。
根据本申请实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述的数据处理方法。
根据本申请实施例的另一方面,还提供了一种计算机终端,包括:存储器和处理器,处理器用于运行存储器中存储的程序,其中,程序运行时执行上述的数据处理方法。
在本申请实施例中,在确定分布式数据库中当前存储的数据对应的第一事务之后,可以获取存储的第一事务的第一事务信息,并基于第一事务信息,确定当前存储的数据是否对第二事务可见。容易注意到的是,由于存储有分布式事务的提交时间戳和/或事务状态,且通过提交时间戳和/或事务状态可以实现可见性判断的目的,从而实现分布式事务跨多个MySQL节点的一致性读,进而解决了相关技术中分布式数据库中无法实现分布式事务的一致性读的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的一种用于实现数据处理方法的计算机终端(或移动设备)的硬件结构框图;
图2是根据本申请实施例的一种数据处理方法的流程图;
图3a是根据本申请实施例的一种可选的事务PREPARE过程中事务信息存储的流程图;
图3b是根据本申请实施例的一种可选的事务COMMIT过程中事务信息存储的流程图;
图3c是根据本申请实施例的一种可选的事务BEGIN过程中事务信息存储的流程图;
图4是根据本申请实施例的一种可选的数据版本可见性判断的流程图;
图5是根据本申请实施例的一种可选的视图创建的流程图;
图6是根据本申请实施例的一种可选的数据移除的流程图;
图7是根据本申请实施例的一种可选的数据清除的流程图;
图8是根据本申请实施例的一种数据处理装置的示意图;以及
图9是根据本申请实施例的一种数据处理系统的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
InnoDB:可以是指MySQL的默认存储引擎。
事务(Transaction):可以是由多条SQL语句组成的一个执行单元,具有原子性、一致性、隔离性、持久性等4个特性。
MVCC(Multi-Version Concurrency Control,多版本并发控制):可以是指数据库常用的并发控制机制,每条数据保存多个版本,事务的读请求总是读取对其可见的版本,不会阻塞写请求。
一致性读(Consistent Read):在MVCC中,事务可见的数据可以看作数据库在某一时刻的一个“快照”或“视图”,本申请中的一致性可以是指:给定快照S,对于任何事务T,其可以对S可见,也可以对S不可见,但是不会出现T操作的部分数据对S可见,部分数据不可见的情况。
时间戳(Timestamp):通常可以是一个64位整数,用于比较判定事件之间的时间先后关系。
读取时间戳(Snapshot Timestamp,snapshot_seq):可以是指事务的读取时间戳,按照该时间戳判断数据版本的可见性。
提交时间戳(Commit Timestamp,commit_seq):可以是指事务的提交时间戳,该时间戳可以作为数据的时间戳。
实施例1
根据本申请实施例,提供了一种数据处理方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现数据处理方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为BUS总线的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的数据处理方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的数据处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图1所示的计算机设备(或移动设备)可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算机设备(或移动设备)中的部件的类型。
在上述运行环境下,本申请提供了如图2所示的数据处理方法。图2是根据本申请实施例的一种数据处理方法的流程图。如图2所示,该方法包括如下步骤:
步骤S202,确定分布式数据库中当前存储的数据对应的第一事务。
上述步骤中的分布式数据库可以包括多个MySQL节点,但不仅限于此,也可以是分布式部署的其他类型的数据库。为了实现分布式事务的一致性读,每条数据保存有多个版本,上述步骤中的当前存储的数据可以是InnoDB中存储的数据版本,第一事务可以是指写入该数据版本的事务。
在一种可选的实施例中,在InnoDB中,每条数据版本上带有写入该记录的事务的事务ID(R.trx_id),因此,对于每一条从InnoDB中读取的数据版本T,可以获取相应的trx_id来确定写入该数据版本的事务。
步骤S204,获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态。
目前,实现MVCC的可见性判断通常有两条方案,第一种方案为活跃事务列表,也即,排除掉在当前事务开启时已经在进行的事务(视其为不可见);第二种方案为基于时间戳进行比较,也即,比较当前进行的事务的读取时间戳S.snapshot_seq和数据版本的提交时间戳T.commit_seq,当T.commit_seq < S.snapshot_seq时,确定数据版本对该事务可见。本申请实施例可以采用上述第二种方案实现数据的可见性判断。
需要说明的是,时间戳的实现可以采用现有的全局时间戳服务(GlobalTimestamp Service,GTS)、混合时间戳(Hybrid Logic Clock,HLC)等,本申请对此不作具体限定。
由于在InnoDB中,数据版本上带有事务ID,但是,并未包含提交时间戳commit_seq,在本申请实施例中,可以预先存储trx_id到commit_seq或事务状态的映射关系,从而通过trx_id获取到存储的commit_seq或事务状态。例如,可以在内存中存储上述映射关系,但不仅限于此。
上述步骤中的事务状态可以包括如下之一:运行状态(RUNNING)、准备提交状态(PREPARED)、提交完成状态(COMITTED)和回滚状态(ROLLBACKING),其中,运行状态表示事务正在运行,还未开始提交,对其他事务不可见;准备提交状态表示事务已经完成PREPARE、尚未提交,该事务的commit_seq还不确定,无法确定该事务是否对其他事务可见;提交完成状态表示事务已经完成提交,该事务的commit_seq已确定,可以确定该事务是否对其他事务可见;回滚状态表示事务正在回滚,仅仅出现在事务回滚过程中,对其他事务不可见。
在一种可选的实施例中,在从InnoDB中获取到写入该数据版本的R.trx_id之后,可以基于R.trx_id获取到commit_seq或事务状态。
步骤S206,基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
上述步骤中的第二事务可以是当前正在运行的读操作请求。
在一种可选的实施例中,可以基于commit_seq或事务状态,确定该数据版本是否对其他事务(也即第二事务)可见,其中,如果事务状态是运行状态和回滚状态,则确定该数据版本对第二事务不可见;如果事务状态是准备提交状态,则可以阻塞等待,直到完成提交,确定commit_seq之后进行判断;如果事务状态是提交完成状态,则可以基于commit_seq和snapshot_seq的比较结果,确定该数据版本是否对第二事务可见。
基于本申请上述实施例提供的方案,在确定分布式数据库中当前存储的数据对应的第一事务之后,可以获取存储的第一事务的第一事务信息,并基于第一事务信息,确定当前存储的数据是否对第二事务可见。容易注意到的是,由于存储有分布式事务的提交时间戳和/或事务状态,且通过提交时间戳和/或事务状态可以实现可见性判断的目的,从而实现分布式事务跨多个MySQL节点的一致性读,进而解决了相关技术中分布式数据库中无法实现分布式事务的一致性读的技术问题。
本申请上述实施例中,获取存储的第一事务的第一事务信息包括:判断第一数据结构中是否存储有第一事务信息;如果第一数据结构中存储有第一事务信息,则从第一数据结构中读取第一事务信息;如果第一数据结构中未存储有第一事务信息,则判断第二数据结构中是否存储有第一事务信息;如果第二数据结构中存储有第一事务信息,则从第二数据结构中读取第一事务信息。
为了避免一个数据结构内存储数据过多,导致性能下降,可以构建两个数据结构共同维护事务信息,其中,第一数据结构(commit_seq_cache)可以是数组数据结构,并将数组的下标作为trx_id;第二数据结构(commit_seq_evicted_map)可以是哈希表、红黑树等映射数据结构,可以存储trx_id到commit_seq或事务状态的映射,在本申请实施例中,以第一数据结构为环形缓冲(Ring Buffer),第二数据结构为哈希表为例进行说明,但不仅限于此。
需要说明的是,大多数事务信息存储在commit_seq_cache中,而不会进入commit_seq_evicted_map中,因此总体性能较高。少数情况下(例如,一个事务持续了较长时间),由于trx_id较小,超出了数组的左边界,因此,可以将该事务的事务信息从commit_seq_cache转移到commit_seq_evicted_map中保存,此过程被称为移除(evict)。进一步地,随着时间的推移,该事物的事务信息会从commit_seq_evicted_map中彻底清除,此过程被称为清除(purge)。
在一种可选的实施例中,由于大多数事务信息存储在commit_seq_cache中,因此,可以首先基于trx_id在commit_seq_cache中进行查询,如果commit_seq_cache中存在该trx_id,则可以读取相应的事务信息;如果commit_seq_cache中不存在该trx_id,则可以进一步基于trx_id在commit_seq_evicted_map中进行查询,如果commit_seq_evicted_map中存在该trx_id,则可以读取相应的事务信息;如果commit_seq_evicted_map中不存在该trx_id,则确定该事务的事务信息已被彻底清除,无法获取。
本申请上述实施例中,在第一事务对分布式数据库进行操作的过程中,该方法还包括:获取第一事务的第二事务信息,其中,第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构。
上述步骤中的第二事务信息可以是第一事务的事务状态发生变化时,获取到的事务信息。
在一种可选的实施例中,事务在对分布式数据库进行操作的过程中,在不同的时间会处于不同的状态,为了能够准确对数据的可见性进行判断,需要对事务状态进行存储。
本申请上述实施例中,基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构包括:在第二事务状态不是提交完成状态的情况下,将第二事务状态存储至第一数据结构或第二数据结构;在第二事务状态是提交完成状态的情况下,将提交完成状态和第二提交时间戳存储至第一数据结构或第二数据结构。
在一种可选的实施例中,在事务已经完成提交之前,无法确定commit_seq,因此,可以仅存储事务状态,而在事务已经完成提交之后,可以存储提交完成状态和commit_seq。需要说明的是,在提交完成状态下,还可以仅存储commit_seq,以节省存储空间。
本申请上述实施例中,将第二事务信息存储至第一数据结构或第二数据结构包括:判断第一事务的第一标识是否大于第一事务标识,其中,第一事务标识为从第一数据结构中移除的最后一个事务信息对应的标识;如果第一标识大于第一事务标识,则基于第二事务信息,对第一数据结构中第一标识对应的事务信息进行更新;如果第一标识小于或等于第一事务标识,则基于第二事务信息,对第二数据结构中第一标识对应的事务信息进行更新。
上述步骤中的第一标识可以是第一事务的事务ID(trx_id)。第一事务标识(max_evicted_trx_id)可以是指最后一个被evict(即从commit_seq_cache中移除)的事务ID。
在一种可选的实施例中,如果第一标识trx_id大于max_evicted_trx_id,则表明该事务的事务信息未被evict,因此,可以在commit_seq_cache中记录trx_id的事务信息;如果第一标识trx_id小于或等于max_evicted_trx_id,则表明该事务的事务信息被evict,因此,可以在commit_seq_evicted_map中记录trx_id的事务信息。
下面结合如图3a和图3b对本申请上述实施例进行详细说明,如图3a所示,对于事务PREPARE,可以判断trx_id是否大于max_evicted_trx_id,如果是,则在commit_seq_cache中记录trx_id的事务状态为PREPARED;如果不是,则在commit_seq_evicted_map中记录trx_id的事务状态为PREPARED。如图3b所示,对于事务COMMIT,可以判断trx_id是否大于max_evicted_trx_id,如果是,则在commit_seq_cache中记录trx_id的时间戳为commit_seq;如果不是,则在commit_seq_evicted_map中记录trx_id的时间戳为commit_seq。并且,在记录完成之后,可以唤醒所有等待本事务的视图。
本申请上述实施例中,当第一事务开始对分布式数据库进行操作时,该方法还包括:判断第一数据结构是否存在剩余空间;如果第一数据结构存在剩余空间,则获取第一事务的第一标识,并将第一标识和运行状态对应存储至第一数据结构;如果第一数据结构不存在剩余空间,则对第一数据结构中的事务信息进行清除,并将第一标识和运行状态对应存储至第一数据结构。
在一种可选的实施例中,如果commit_seq_cache中存在剩余空间,则可以继续存储事务信息;如果commit_seq_cache中不存在剩余空间,则可以对commit_seq_cache进行evict,evict完成后,继续存储事务信息。
下面结合如图3c对本申请上述实施例进行详细说明,如图3c所示,对于事务BEGIN,可以判断commit_seq_cache是否存在剩余空间,如果是,则向commit_seq_cache的trx_id对应的位置写入事务状态RUNNING;如果否,则进行evict,然后向commit_seq_cache的trx_id对应的位置写入事务状态RUNNING。
本申请上述实施例中,基于第一事务信息,确定当前存储的数据是否对第二事务可见包括:获取第二事务对应的视图,其中,视图用于表征分布式数据库中存储的对第二事务可见的数据,视图中至少包含有读取时间戳;判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳;如果第一事务状态是提交完成状态,且提交时间戳小于读取时间戳,则确定当前存储的数据对第二事务可见;如果第一事务状态是运行状态或回滚状态,或提交时间戳大于或等于读取时间戳,则确定当前存储的数据对第二事务不可见。
上述步骤中的视图可以是指第二事务开始对分布式数据库进行读操作时,创建的一个分布式数据库在该时刻的“快照”或“视图”。视图S中包含读取时间戳(snapshot_seq)、最大事务ID(max_trx_id)、最小事务ID(min_evicted_trx_id)等信息,其中,min_evicted_trx_id可以是指commit_seq_evicted_map中尚存的最小的事务ID,作为视图S的事务ID下界。
在一种可选的实施例中,如果事务状态是运行状态和回滚状态,则确定该数据版本对第二事务不可见;如果事务状态是提交完成状态,则进一步判断commit_seq是否小于snapshot_seq,如果小于,则确定该数据版本对第二事务可见;如果大于,则确定该数据版本对第二事务不可见。
本申请上述实施例中,在第一事务状态为准备提交状态的情况下,等待第一事务状态更新为提交完成状态,并确定当前存储的数据是否对第二事务可见。
在一种可选的实施例中,如果事务状态是准备提交状态,则可以阻塞等待,直到完成提交,确定commit_seq之后进行判断。
本申请上述实施例中,视图中还包含有第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,在判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳之前,该方法还包括:判断第一事务的第一标识是否大于第一预设标识;如果第一标识大于第一预设标识,则确定当前存储的数据对第二事务不可见;如果第一标识小于或等于第一预设标识,则判断第一标识是否小于第二预设标识;如果第一标识小于第二预设标识,则确定当前存储的数据对第二事务可见;如果第一标识大于或等于第二预设标识,则判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳。
上述步骤中的第一预设标识可以是视图S中包含的最大事务ID(max_trx_id),第二预设标识可以是最小事务ID(min_evicted_trx_id)。
在一种可选的实施例中,如果第一标识R.trx_id > max_trx_id,则表明第一事务开启时,第二事务已经在运行,因此,可以确定该数据版本对第二事务不可见;如果R.trx_id < min_evicted_trx_id,则表明第一事务在第二事务开启前已完成操作,因此,可以确定该数据版本对第二事务可见;否则,可以确定第一事务的事务信息存储在commit_seq_cache或commit_seq_evicted_map中,需要基于存储的事务信息确定该数据版本的可见性。
本申请上述实施例中,视图中还包含有活跃事务列表,其中,在未存储有第一事务信息的情况下,该方法还包括:判断第一事务是否存储在活跃事务列表中;如果第一事务存储在活跃事务列表中,则确定当前存储的数据对第二事务可见;如果第一事务未存储在活跃事务列表中,则确定当前存储的数据对第二事务不可见。
上述步骤中的活跃事务列表(evicted_active_trx_ids)存储有会被视图使用的数据对应的事务ID。
在一种可选的实施例中,如果第一事务的第一标识R.trx_id在S.evicted_active_trx_ids中,则表明该数据版本会被视图使用,因此,可以确定该数据版本对第二事务可见;如果R.trx_id不在S.evicted_active_trx_ids中,则表明该数据版本不会被视图使用,因此,可以确定该数据版本对第二事务不可见。
下面结合图4对本申请一种优选的实施例进行详细说明,如图4所示,具体流程如下:对于每一条读取的数据版本T,可以获取数据版本上的R.trx_id,并读取视图S包含的snapshot_seq、max_trx_id和min_evicted_trx_id。首先判断R.trx_id是否大于S.max_trx_id,如果是,则确定该数据版本T对视图S不可见;如果否,则进一步判断R.trx_id是否小于S.min_evicted_trx_id,如果是,则确定该数据版本T对视图S可见;如果否,则进一步判断R.trx_id是否大于max_evicted_trx_id,如果是,则从commit_seq_cache中获取事务状态和/或commit_seq;如果否,则进一步判断commit_seq_evicted_map是否包含R.trx_id,如果是,则从commit_seq_evicted_map中获取事务状态和/或commit_seq。
在获取到事务状态和/或R.commit_seq之后,可以对事务状态进行判断,如果是RUNNING或ROLLBACKING,则确定该数据版本T对视图S不可见;如果是PREPRARED,则阻塞等待R.trx_id完成提交;如果是COMMITTED,则进一步判断R.commit_seq是否小于S.snapshot_seq,如果是,则确定该数据版本T对视图S可见;如果否,则确定该数据版本T对视图S不可见。
如果commit_seq_evicted_map未包含R.trx_id,则检查S的活跃事务列表S.evicted_active_trx_ids,并判断R.trx_id是否属于S.evicted_active_trx_ids,如果是,则确定该数据版本T对视图S可见;如果否,则确定该数据版本T对视图S不可见。
通过上述方案,通过数组和map相结合的方式,基于InnoDB存储引擎实现了全局的一致性读,并且性能较好。
本申请上述实施例中,在获取第二事务对应的视图之前,该方法还包括:获取预设时间戳;判断预设时间戳是否小于目标时间戳,其中,目标时间戳由当前时间确定;如果预设时间戳小于目标时间戳,则创建视图;如果预设时间戳大于或等于目标时间戳,则输出错误信息。
上述步骤中的预设时间戳可以是指定读时间戳,也即,可以是第二事务开启时的时间。目标时间戳(snapshot_seq_lower_bound)可以是当前允许创建视图的最小读时间戳,也即,可以是预先设定的保留commit_seq信息的时长,可以由当前时间确定,例如,可以为当前最新时间戳-1min,但不仅限于此。错误信息可以是Snapshot too old。
在一种可选的实施例中,如果第二事务进行读取操作时的时间戳与当前时间的差距在预设范围内,则可以进行一致性读。具体可以采用如下方式创建视图:确定预设时间戳为视图的读取时间戳;获取第二存储空间当前时刻的第二事务标识,并确定第二事务标识为第二预设标识;获取当前时刻的所有事务中最大的事务标识,并确定最大的事务标识为第一预设标识;确定活动事务列表为空集。
下面结合图5对本申请一种优选的实施例进行详细说明,如图5所示,具体流程如下:对于指定读时间戳snapshot_seq,可以判断snapshot_seq是否小于snapshot_seq_lower_bound,如果是,则创建视图S,其中,S.snapshot_seq = snapshot_seq,S.max_trx_id = max_trx_id,S.min_evicted_trx_id = min_evicted_trx_id,S.evicted_active_trx_ids = ∅;如果否,则报错:Snapshot too old。
通过上述方案,通过设置snapshot_seq_lower_bound,实现了有限时间内的一致性读能力。
本申请上述实施例中,在第一数据结构已存储满的情况下,该方法还包括:确定第一数据结构中存储的第二标识;从第一数据结构中读取第二标识对应的第三事务信息;判断第三事务信息是否满足第一预设条件;如果第三事务信息满足第一预设条件,则将第二标识和第三事务信息对应存储至第二数据结构,并删除第一数据结构中存储的第二标识和第三事务信息;如果第三事务信息不满足第一预设条件,则删除第一数据结构中存储的第二标识和第三事务信息。
上述步骤中的第二标识可以是指需要evict的标识,具体可以是commit_seq_cache中最早的一个或多个trx_id。第一预设条件可以是确定第三事务信息是否需要保留的条件,如果第三事务信息满足该条件,则确定该第三事务信息需要保留,则可以转移至第二数据结构;如果第三事务信息不满足该条件,则确定该第三事务信息无需保留,可以直接丢弃。
在一种可选的实施例中,当commit_seq_cache已满时,需要调用evict过程将最早的一条或一批trx_id的事务状态和/或commit_seq进行evict,为新事务腾出空间。由于trx_id较早,也即,相应事务开启时间较早,因此,可以对事务状态和/或commit_seq进行进一步判断,确定是否需要保留,从而可以根据判断结果确定是否将事务状态和/或commit_seq转移至commit_seq_evicted_map中,同时,将commit_seq_cache中的相应记录删除。
本申请上述实施例中,判断第三事务信息是否满足第一预设条件包括:判断第三事务信息中的第三事务状态是否为提交完成状态;在第三事务状态是提交完成状态的情况下,判断第三事务信息中的第三提交时间戳是否大于目标时间戳;如果第三事务状态不是提交完成状态,或第三提交时间戳大于目标时间戳,则确定第三事务信息满足第一预设条件;如果第三提交时间戳小于或等于目标时间戳,则确定第三事务信息不满足第一预设条件。
在一种可选的实施例中,对于未完成提交的事务,由于需要等待该事务完成提交,因此,可以确定该事务的事务信息需要保留;对于已完成递交的事务,可以通过判断提交时间戳是否大于允许创建视图的目标时间戳,来确定该事务写入的数据版本是否会被视图使用,如果确定该事务写入的数据版本会被视图使用,则确定该事务的事务信息需要保留;如果确定该事务写入的数据版本不会被视图使用,则确定该事务的事务信息无需保留。其中,如果提交时间戳大于允许创建视图的目标时间戳,则表明该事务写入的数据版本可以进行一致性读,因此,可以确定该事务会被视图使用;如果提交时间戳小于或等于允许创建视图的目标时间戳,则表明该事务写入的数据版本不会进行一致性读,因此,可以确定该事务写入的数据版本不会被视图使用。
下面结合图6对本申请一种优选的实施例进行详细说明,如图6所示,当commit_seq_cache存储已满时,需要调用evict过程将最早的一条或一批trx_id的状态信息或commit_seq移动到commit_seq_evicted_map中,为新事务腾出空间。给定一条需要evict的记录(trx_id,事务状态或commit_seq),具体流程如下:检查该记录如果满足如下之一:事务状态为RUNNING、PREPARED或ROLLBACKING;事务状态为COMMITTED且commit_seq >snapshot_seq_lower_bound,则确定需要保留;判断该记录是否需要保留,如果是,则将需要evict的记录(trx_id,事务状态或commit_seq)插入commit_seq_evicted_map;如果否,则直接丢弃该记录。
本申请上述实施例中,该方法还包括:确定第二数据结构中存储的第三标识;从第二数据结构中读取第三标识对应的第四事务信息;判断第四事务信息是否满足视图对应的第二预设条件;如果第四事务信息满足第二预设条件,则将第三标识存储至视图对应的活动事务列表,并删除第二数据结构中存储的第三标识和第四事务信息;如果第四事务信息不满足第二预设条件,则删除第二数据结构中存储的第三标识和第四事务信息。
上述步骤中的第三标识可以是commit_seq_evicted_map中不再使用的条目,可以被清除(purge)。第二预设条件可以是确定第四事务信息是否会被一个已存在的视图使用,如果第四事务信息满足该条件,则确定第四事务信息会被已存在的视图使用,可以将其保存至该视图的活跃事务列表中;如果第四事务信息不满足该条件,则第四事务信息不会被已存在的视图使用,可以直接丢弃。
在一种可选的实施例中,随着snapshot_seq_lower_bound的推进,commit_seq_evicted_map中的很多条目都不再使用(已经完成提交,且不会被新创建的视图使用)了,可以被清理掉,其中,不再使用的条目可以是指事务状态为COMMITTED,且commit_seq <snapshot_seq_lower_bound。但是,如果一个已存在的Snapshot还有可能用到它,需要将其保存在Snapshot自身的活跃事务列表evicted_active_trx_ids中,同时,将commit_seq_evicted_map中的相应记录删除。具体可以通过判断第四事务信息是否满足第二预设条件,来确定第四事务信息是否会被已存在的Snapshot使用。
本申请上述实施例中,视图中包含有读取时间戳、第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,判断第四事务信息是否满足视图对应的第二预设条件包括:判断第四事务信息中的第四提交时间戳是否大于或等于读取时间戳,第三标识是否小于第一预设标识,且第三标识是否大于或等于第二预设标识;如果第四提交时间戳大于或等于读取时间戳,第三标识小于第一预设标识,且第三标识大于或等于第二预设标识,则确定第四事务信息满足第二预设条件;如果第四提交时间戳小于读取时间戳,第三标识大于或等于第一预设标识,或第三标识小于第二预设标识,则确定第四事务信息不满足第二预设条件。
在一种可选的实施例中,对于每一个已存在的视图,可以通过比较待清理的事务信息的提交时间戳是否大于或等于该视图的读取时间戳,该事务信息对应的第三标识是否小于该视图的最大事务ID,且大于或等于该视图的最小事务ID,如果是,则确定该事务信息是否会被已存在的Snapshot使用,否则,确定该事务信息不回被已存在的Snapshot使用。
本申请上述实施例中,在删除第二数据结构中存储的第三标识和第四事务信息之后,对第二事务标识进行更新,其中,第二事务标识为第二数据结构中存储的最小的标识信息。
在一种可选的实施例中,在对commit_seq_evicted_map进行purge之后,有可能会将原本最小的trx_id清除,导致commit_seq_evicted_map中最小的trx_id发生变化,因此,需要基于当前commit_seq_evicted_map中最小的trx_id,对第二事务标识进行更新,从而确保后续处理的准确度。
下面结合图7对本申请一种优选的实施例进行详细说明,如图7所示,具体流程如下:获取下一个可以purge的trx_id(相同的事务状态为COMMITTED且commit_seq <snapshot_seq_lower_bound);对于每个视图S,如果该记录(trx_id,commit_seq)满足以下条件:S.snapshot_seq ≤ commit_seq,trx_id < S.max_trx_id,且trx_id ≥ S.min_evicted_trx_id,则确定需要将trx_id插入S.evicted_active_trx_ids;判断该记录是否需要插入,如果是,则将trx_id按顺序插入到S.evicted_active_trx_ids;如果否,则不进行任何处理;更新min_evicted_trx_id = commit_seq_evicted_map中最小的trx_id。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
实施例2
根据本申请实施例,还提供了一种用于实施上述数据处理方法的数据处理装置,如图8所示,该装置800包括:第一确定模块802、第一获取模块804和第二确定模块806。
其中,第一确定模块802用于确定分布式数据库中当前存储的数据对应的第一事务;第一获取模块804用于获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;第二确定模块806用于基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
此处需要说明的是,上述第一确定模块802、第一获取模块804和第二确定模块806对应于实施例1中的步骤S202至步骤S206,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例1提供的计算机终端10中。
本申请上述实施例中,第一获取模块包括:第一判断单元、第一读取单元、第二判断单元和第二读取单元。
其中,第一判断单元用于判断第一数据结构中是否存储有第一事务信息;第一读取单元用于如果第一数据结构中存储有第一事务信息,则从第一数据结构中读取第一事务信息;第二判断单元用于如果第一数据结构中未存储有第一事务信息,则判断第二数据结构中是否存储有第一事务信息;第二读取单元用于如果第二数据结构中存储有第一事务信息,则从第二数据结构中读取第一事务信息。
本申请上述实施例中,该装置还包括:第二获取模块和第一存储模块。
其中,第二获取模块用于在第一事务对分布式数据库进行操作的过程中,获取第一事务的第二事务信息,其中,第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;第一存储模块用于基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构。
本申请上述实施例中,第一存储模块包括:第一存储单元和第二存储单元。
其中,第一存储单元用于在第二事务状态不是提交完成状态的情况下,将第二事务状态存储至第一数据结构或第二数据结构;第二存储单元用于在第二事务状态是提交完成状态的情况下,将提交完成状态和第二提交时间戳存储至第一数据结构或第二数据结构。
本申请上述实施例中,第一存储模块包括:第三判断单元、第一更新单元和第二更新单元。
其中,第三判断单元用于判断第一事务的第一标识是否大于第一事务标识,其中,第一事务标识为从第一数据结构中移除的最后一个事务信息对应的标识;第一更新单元用于如果第一标识大于第一事务标识,则基于第二事务信息,对第一数据结构中第一标识对应的事务信息进行更新;第二更新单元用于如果第一标识小于或等于第一事务标识,则基于第二事务信息,对第二数据结构中第一标识对应的事务信息进行更新。
本申请上述实施例中,该装置还包括:第一判断模块、第三获取模块、清除模块和第二存储模块。
其中,第一判断模块用于当第一事务开始对分布式数据库进行操作时,判断第一数据结构是否存在剩余空间;第三获取模块用于如果第一数据结构存在剩余空间,则获取第一事务的第一标识;清除模块用于如果第一数据结构不存在剩余空间,则对第一数据结构中的事务信息进行清除;第二存储模块用于将第一标识和运行状态对应存储至第一数据结构。
本申请上述实施例中,第二确定模块包括:获取单元、第四判断单元、第一确定单元和第二确定单元。
其中,获取单元用于获取第二事务对应的视图,其中,视图用于表征分布式数据库中存储的对第二事务可见的数据,视图中至少包含有读取时间戳;第四判断单元用于判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳;第一确定单元用于如果第一事务状态是提交完成状态,且提交时间戳小于读取时间戳,则确定当前存储的数据对第二事务可见;第二确定单元用于如果第一事务状态是运行状态或回滚状态,或提交时间戳大于或等于读取时间戳,则确定当前存储的数据对第二事务不可见。
本申请上述实施例中,第二确定模块还用于在第一事务状态为准备提交状态的情况下,等待第一事务状态更新为提交完成状态,并确定当前存储的数据是否对第二事务可见。
本申请上述实施例中,视图中还包含有第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,第二确定模块还包括:第五判断单元和第六判断单元。
其中,第五判断单元用于判断第一事务的第一标识是否大于第一预设标识;第二确定单元还用于如果第一标识大于第一预设标识,则确定当前存储的数据对第二事务不可见;第六判断单元用于如果第一标识小于或等于第一预设标识,则判断第一标识是否小于第二预设标识;第一确定单元还用于如果第一标识小于第二预设标识,则确定当前存储的数据对第二事务可见;第四判断单元还用于如果第一标识大于或等于第二预设标识,则判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳。
本申请上述实施例中,视图中还包含有活跃事务列表,其中,第二确定模块还包括:第七判断单元。
其中,第七判断单元用于在未存储有第一事务信息的情况下,判断第一事务是否存储在活跃事务列表中;第一确定单元还用于如果第一事务存储在活跃事务列表中,则确定当前存储的数据对第二事务可见;第二确定单元还用于如果第一事务未存储在活跃事务列表中,则确定当前存储的数据对第二事务不可见。
本申请上述实施例中,该装置还包括:第四获取模块、第二判断模块、创建模块和输出模块。
其中,第四获取模块用于获取预设时间戳;第二判断模块用于判断预设时间戳是否小于目标时间戳,其中,目标时间戳由当前时间确定;创建模块用于如果预设时间戳小于目标时间戳,则创建视图;输出模块用于如果预设时间戳大于或等于目标时间戳,则输出错误信息。
本申请上述实施例中,该装置还包括:第三确定模块、第一读取模块、第三判断模块、第三存储模块和第一删除模块。
其中,第三确定模块用于在第一数据结构已存储满的情况下,确定第一数据结构中存储的第二标识;第一读取模块用于从第一数据结构中读取第二标识对应的第三事务信息;第三判断模块用于判断第三事务信息是否满足第一预设条件;第三存储模块用于如果第三事务信息满足第一预设条件,则将第二标识和第三事务信息对应存储至第二数据结构;第一删除模块用于在第三存储模块存储完成之后,或第三事务信息不满足第一预设条件的情况下,删除第一数据结构中存储的第二标识和第三事务信息。
本申请上述实施例中,第三判断模块包括:第八判断单元、第九判断单元、第三确定单元和第四确定单元。
其中,第八判断单元用于判断第三事务信息中的第三事务状态是否为提交完成状态;第九判断单元用于在第三事务状态是提交完成状态的情况下,判断第三事务信息中的第三提交时间戳是否大于目标时间戳;第三确定单元用于如果第三事务状态不是提交完成状态,或第三提交时间戳大于目标时间戳,则确定第三事务信息满足第一预设条件;第四确定单元用于如果第三提交时间戳小于或等于目标时间戳,则确定第三事务信息不满足第一预设条件。
本申请上述实施例中,该装置还包括:第四确定模块、第二读取模块、第四判断模块、第四存储模块和第二删除模块。
其中,第四确定模块用于确定第二数据结构中存储的第三标识;第二读取模块用于从第二数据结构中读取第三标识对应的第四事务信息;第四判断模块用于判断第四事务信息是否满足视图对应的第二预设条件;第四存储模块用于如果第四事务信息满足第二预设条件,则将第三标识存储至视图对应的活动事务列表;第二删除模块用于在第四存储模块存储完成之后,或第四事务信息不满足第二预设条件的情况下,删除第二数据结构中存储的第三标识和第四事务信息。
本申请上述实施例中,视图中包含有读取时间戳、第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,第四判断模块包括:第十判断单元、第五确定单元和第六确定单元。
其中,第十判断单元用于判断第四事务信息中的第四提交时间戳是否大于或等于读取时间戳,第三标识是否小于第一预设标识,且第三标识是否大于或等于第二预设标识;第五确定单元用于如果第四提交时间戳大于或等于读取时间戳,第三标识小于第一预设标识,且第三标识大于或等于第二预设标识,则确定第四事务信息满足第二预设条件;第六确定单元用于如果第四提交时间戳小于读取时间戳,第三标识大于或等于第一预设标识,或第三标识小于第二预设标识,则确定第四事务信息不满足第二预设条件。
本申请上述实施例中,该装置还包括:更新模块。
其中,更新模块用于在删除第二数据结构中存储的第三标识和第四事务信息之后,对第二事务标识进行更新,其中,第二事务标识为第二数据结构中存储的最小的标识信息。
需要说明的是,本申请上述实施例中涉及到的优选实施方案与实施例1提供的方案以及应用场景、实施过程相同,但不仅限于实施例1所提供的方案。
实施例3
根据本申请实施例,还提供了一种数据处理系统。
图9是根据本申请实施例的一种数据处理系统的示意图。如图9所示,该系统包括:分布式部署的多个数据节点92和处理节点94。
其中,多个数据节点92用于存储数据;处理节点94用于确定多个数据节点92中当前存储的数据对应的第一事务,获取存储的第一事务的第一事务信息,并基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态,第二事务为当前对多个数据节点92中存储的数据进行读取操作的事务。
上述的数据处理系统可以是分布式数据库系统,多个数据节点可以是分布式数据库系统中的数据节点,处理节点可以是分布式数据库系统中的事务管理器,例如,可以是分布式部署的MySQL,但不仅限于此,也可以是分布式部署的其他类型的数据库。为了实现分布式事务的一致性读,每条数据保存有多个版本,上述的当前存储的数据可以是InnoDB中存储的数据版本,第一事务可以是指写入该数据版本的事务。上述的事务状态可以包括如下之一:运行状态(RUNNING)、准备提交状态(PREPARED)、提交完成状态(COMITTED)和回滚状态(ROLLBACKING),其中,运行状态表示事务正在运行,还未开始提交,对其他事务不可见;准备提交状态表示事务已经完成PREPARE、尚未提交,该事务的commit_seq还不确定,无法确定该事务是否对其他事务可见;提交完成状态表示事务已经完成提交,该事务的commit_seq已确定,可以确定该事务是否对其他事务可见;回滚状态表示事务正在回滚,仅仅出现在事务回滚过程中,对其他事务不可见。上述的第二事务可以是当前正在运行的读操作请求。
本申请上述实施例中,如图9所示,处理节点94包括:第一数据结构942、第二数据结构944和处理模块946。
其中,处理模块946用于判断第一数据结构中是否存储有第一事务信息;如果第一数据结构中存储有第一事务信息,则从第一数据结构中读取第一事务信息;如果第一数据结构中未存储有第一事务信息,则判断第二数据结构中是否存储有第一事务信息;如果第二数据结构中存储有第一事务信息,则从第二数据结构中读取第一事务信息。
上述的第一数据结构(commit_seq_cache)可以是数组数据结构,并将数组的下标作为trx_id;第二数据结构(commit_seq_evicted_map)可以是哈希表、红黑树等映射数据结构,可以存储trx_id到commit_seq或事务状态的映射,在本申请实施例中,以第一数据结构为环形缓冲(Ring Buffer),第二数据结构为哈希表为例进行说明,但不仅限于此。
本申请上述实施例中,处理模块946还用于在第一事务对多个数据节点进行操作的过程中,获取第一事务的第二事务信息,其中,第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构。
本申请上述实施例中,处理模块946还用于在第二事务状态不是提交完成状态的情况下,将第二事务状态存储至第一数据结构或第二数据结构;在第二事务状态是提交完成状态的情况下,将提交完成状态和第二提交时间戳存储至第一数据结构或第二数据结构。
本申请上述实施例中,处理模块946还用于判断第一事务的第一标识是否大于第一事务标识,其中,第一事务标识为从第一数据结构中移除的最后一个事务信息对应的标识;如果第一标识大于第一事务标识,则基于第二事务信息,对第一数据结构中第一标识对应的事务信息进行更新;如果第一标识小于或等于第一事务标识,则基于第二事务信息,对第二数据结构中第一标识对应的事务信息进行更新。
本申请上述实施例中,处理模块946还用于当第一事务开始对多个数据节点进行操作时,判断第一数据结构是否存在剩余空间;如果第一数据结构存在剩余空间,则获取第一事务的第一标识,并将第一标识和运行状态对应存储至第一数据结构;如果第一数据结构不存在剩余空间,则对第一数据结构中的事务信息进行清除,并将第一标识和运行状态对应存储至第一数据结构。
本申请上述实施例中,处理节点94还用于获取第二事务对应的视图;判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳;如果第一事务状态是提交完成状态,且提交时间戳小于读取时间戳,则确定当前存储的数据对第二事务可见;如果第一事务状态是运行状态或回滚状态,或提交时间戳大于或等于读取时间戳,则确定当前存储的数据对第二事务不可见,其中,视图用于表征多个数据节点中存储的对第二事务可见的数据,视图中至少包含有读取时间戳。
本申请上述实施例中,处理节点94还用于在第一事务状态为准备提交状态的情况下,等待第一事务状态更新为提交完成状态,并确定当前存储的数据是否对第二事务可见。
本申请上述实施例中,视图中还包含有第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,处理节点94还用于在判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳之前,判断第一事务的第一标识是否大于第一预设标识;如果第一标识大于第一预设标识,则确定当前存储的数据对第二事务不可见;如果第一标识小于或等于第一预设标识,则判断第一标识是否小于第二预设标识;如果第一标识小于第二预设标识,则确定当前存储的数据对第二事务可见;如果第一标识大于或等于第二预设标识,则判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳。
本申请上述实施例中,视图中还包含有活跃事务列表,其中,处理节点94还用于在未存储有第一事务信息的情况下,判断第一事务是否存储在活跃事务列表中;如果第一事务存储在活跃事务列表中,则确定当前存储的数据对第二事务可见;如果第一事务未存储在活跃事务列表中,则确定当前存储的数据对第二事务不可见。
本申请上述实施例中,处理节点94还用于在获取第二事务对应的视图之前,获取预设时间戳;判断预设时间戳是否小于目标时间戳,其中,目标时间戳由当前时间确定;如果预设时间戳小于目标时间戳,则创建视图;如果预设时间戳大于或等于目标时间戳,则输出错误信息。
本申请上述实施例中,处理模块946还用于在第一数据结构已存储满的情况下,确定第一数据结构中存储的第二标识;从第一数据结构中读取第二标识对应的第三事务信息;判断第三事务信息是否满足第一预设条件;如果第三事务信息满足第一预设条件,则将第二标识和第三事务信息对应存储至第二数据结构,并删除第一数据结构中存储的第二标识和第三事务信息;如果第三事务信息不满足第一预设条件,则删除第一数据结构中存储的第二标识和第三事务信息。
本申请上述实施例中,处理模块946还用于判断第三事务信息中的第三事务状态是否为提交完成状态;在第三事务状态是提交完成状态的情况下,判断第三事务信息中的第三提交时间戳是否大于目标时间戳;如果第三事务状态不是提交完成状态,或第三提交时间戳大于目标时间戳,则确定第三事务信息满足第一预设条件;如果第三提交时间戳小于或等于目标时间戳,则确定第三事务信息不满足第一预设条件。
本申请上述实施例中,处理模块946还用于确定第二数据结构中存储的第三标识;从第二数据结构中读取第三标识对应的第四事务信息;判断第四事务信息是否满足视图对应的第二预设条件;如果第四事务信息满足第二预设条件,则将第三标识存储至视图对应的活动事务列表,并删除第二数据结构中存储的第三标识和第四事务信息;如果第四事务信息不满足第二预设条件,则删除第二数据结构中存储的第三标识和第四事务信息。
本申请上述实施例中,视图中包含有读取时间戳、第一预设标识和第二预设标识,第一预设标识大于第二预设标识,其中,处理模块946还用于判断第四事务信息中的第四提交时间戳是否大于或等于读取时间戳,第三标识是否小于第一预设标识,且第三标识是否大于或等于第二预设标识;如果第四提交时间戳大于或等于读取时间戳,第三标识小于第一预设标识,且第三标识大于或等于第二预设标识,则确定第四事务信息满足第二预设条件;如果第四提交时间戳小于读取时间戳,第三标识大于或等于第一预设标识,或第三标识小于第二预设标识,则确定第四事务信息不满足第二预设条件。
本申请上述实施例中,处理模块946还用于在删除第二数据结构中存储的第三标识和第四事务信息之后,对第二事务标识进行更新,其中,第二事务标识为第二数据结构中存储的最小的标识信息。
需要说明的是,本申请上述实施例中涉及到的优选实施方案与实施例1提供的方案以及应用场景、实施过程相同,但不仅限于实施例1所提供的方案。
实施例4
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行数据处理方法中以下步骤的程序代码:确定分布式数据库中当前存储的数据对应的第一事务;获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
可选地,上述计算机终端可以采用如图1所示的硬件结构,但不能仅限于此。
其中,处理器102可以通过传输装置调用存储器104存储的信息及应用程序,以执行下述步骤:确定分布式数据库中当前存储的数据对应的第一事务;获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
可选的,上述处理器102还可以执行如下步骤的程序代码:判断第一数据结构中是否存储有第一事务信息;如果第一数据结构中存储有第一事务信息,则从第一数据结构中读取第一事务信息;如果第一数据结构中未存储有第一事务信息,则判断第二数据结构中是否存储有第一事务信息;如果第二数据结构中存储有第一事务信息,则从第二数据结构中读取第一事务信息。
可选的,上述处理器102还可以执行如下步骤的程序代码:在第一事务对分布式数据库进行操作的过程中,获取第一事务的第二事务信息,其中,第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构。
可选的,上述处理器102还可以执行如下步骤的程序代码:在第二事务状态不是提交完成状态的情况下,将第二事务状态存储至第一数据结构或第二数据结构;在第二事务状态是提交完成状态的情况下,将提交完成状态和第二提交时间戳存储至第一数据结构或第二数据结构。
可选的,上述处理器102还可以执行如下步骤的程序代码:判断第一事务的第一标识是否大于第一事务标识,其中,第一事务标识为从第一数据结构中移除的最后一个事务信息对应的标识;如果第一标识大于第一事务标识,则基于第二事务信息,对第一数据结构中第一标识对应的事务信息进行更新;如果第一标识小于或等于第一事务标识,则基于第二事务信息,对第二数据结构中第一标识对应的事务信息进行更新。
可选的,上述处理器102还可以执行如下步骤的程序代码:当第一事务开始对分布式数据库进行操作时,判断第一数据结构是否存在剩余空间;如果第一数据结构存在剩余空间,则获取第一事务的第一标识,并将第一标识和运行状态对应存储至第一数据结构;如果第一数据结构不存在剩余空间,则对第一数据结构中的事务信息进行清除,并将第一标识和运行状态对应存储至第一数据结构。
可选的,上述处理器102还可以执行如下步骤的程序代码:获取第二事务对应的视图,其中,视图用于表征分布式数据库中存储的对第二事务可见的数据,视图中至少包含有读取时间戳;判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳;如果第一事务状态是提交完成状态,且提交时间戳小于读取时间戳,则确定当前存储的数据对第二事务可见;如果第一事务状态是运行状态或回滚状态,或提交时间戳大于或等于读取时间戳,则确定当前存储的数据对第二事务不可见。
可选的,上述处理器102还可以执行如下步骤的程序代码:在第一事务状态为准备提交状态的情况下,等待第一事务状态更新为提交完成状态,并确定当前存储的数据是否对第二事务可见。
可选的,视图中还包含有第一预设标识和第二预设标识,第一预设标识大于第二预设标识,上述处理器102还可以执行如下步骤的程序代码:在判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳之前,判断第一事务的第一标识是否大于第一预设标识;如果第一标识大于第一预设标识,则确定当前存储的数据对第二事务不可见;如果第一标识小于或等于第一预设标识,则判断第一标识是否小于第二预设标识;如果第一标识小于第二预设标识,则确定当前存储的数据对第二事务可见;如果第一标识大于或等于第二预设标识,则判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳。
可选的,视图中还包含有活跃事务列表,上述处理器102还可以执行如下步骤的程序代码:在未存储有第一事务信息的情况下,判断第一事务是否存储在活跃事务列表中;如果第一事务存储在活跃事务列表中,则确定当前存储的数据对第二事务可见;如果第一事务未存储在活跃事务列表中,则确定当前存储的数据对第二事务不可见。
可选的,上述处理器102还可以执行如下步骤的程序代码:在获取第二事务对应的视图之前,获取预设时间戳;判断预设时间戳是否小于目标时间戳,其中,目标时间戳由当前时间确定;如果预设时间戳小于目标时间戳,则创建视图;如果预设时间戳大于或等于目标时间戳,则输出错误信息。
可选的,上述处理器102还可以执行如下步骤的程序代码:在第一数据结构已存储满的情况下,确定第一数据结构中存储的第二标识;从第一数据结构中读取第二标识对应的第三事务信息;判断第三事务信息是否满足第一预设条件;如果第三事务信息满足第一预设条件,则将第二标识和第三事务信息对应存储至第二数据结构,并删除第一数据结构中存储的第二标识和第三事务信息;如果第三事务信息不满足第一预设条件,则删除第一数据结构中存储的第二标识和第三事务信息。
可选的,上述处理器102可以执行如下步骤的程序代码:判断第三事务信息中的第三事务状态是否为提交完成状态;在第三事务状态是提交完成状态的情况下,判断第三事务信息中的第三提交时间戳是否大于目标时间戳;如果第三事务状态不是提交完成状态,或第三提交时间戳大于目标时间戳,则确定第三事务信息满足第一预设条件;如果第三提交时间戳小于或等于目标时间戳,则确定第三事务信息不满足第一预设条件。
可选的,上述处理器102还可以执行如下步骤的程序代码:确定第二数据结构中存储的第三标识;从第二数据结构中读取第三标识对应的第四事务信息;判断第四事务信息是否满足视图对应的第二预设条件;如果第四事务信息满足第二预设条件,则将第三标识存储至视图对应的活动事务列表,并删除第二数据结构中存储的第三标识和第四事务信息;如果第四事务信息不满足第二预设条件,则删除第二数据结构中存储的第三标识和第四事务信息。
可选的,视图中包含有读取时间戳、第一预设标识和第二预设标识,第一预设标识大于第二预设标识,上述处理器102还可以执行如下步骤的程序代码:判断第四事务信息中的第四提交时间戳是否大于或等于读取时间戳,第三标识是否小于第一预设标识,且第三标识是否大于或等于第二预设标识;如果第四提交时间戳大于或等于读取时间戳,第三标识小于第一预设标识,且第三标识大于或等于第二预设标识,则确定第四事务信息满足第二预设条件;如果第四提交时间戳小于读取时间戳,第三标识大于或等于第一预设标识,或第三标识小于第二预设标识,则确定第四事务信息不满足第二预设条件。
可选的,上述处理器102还可以执行如下步骤的程序代码:在删除第二数据结构中存储的第三标识和第四事务信息之后,对第二事务标识进行更新,其中,第二事务标识为第二数据结构中存储的最小的标识信息。
采用本申请实施例,提供了一种数据处理的方案。由于存储有分布式事务的提交时间戳和/或事务状态,且通过提交时间戳和/或事务状态可以实现可见性判断的目的,从而实现分布式事务跨多个MySQL节点的一致性读,进而解决了相关技术中分布式数据库中无法实现分布式事务的一致性读的技术问题。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例5
本申请的实施例还提供了一种计算机可读存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例所提供的数据处理方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定分布式数据库中当前存储的数据对应的第一事务;获取存储的第一事务的第一事务信息,其中,第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态;基于第一事务信息,确定当前存储的数据是否对第二事务可见,其中,第二事务为当前对分布式数据库中存储的数据进行读取操作的事务。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:判断第一数据结构中是否存储有第一事务信息;如果第一数据结构中存储有第一事务信息,则从第一数据结构中读取第一事务信息;如果第一数据结构中未存储有第一事务信息,则判断第二数据结构中是否存储有第一事务信息;如果第二数据结构中存储有第一事务信息,则从第二数据结构中读取第一事务信息。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在第一事务对分布式数据库进行操作的过程中,获取第一事务的第二事务信息,其中,第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;基于第二事务状态,将第二事务信息存储至第一数据结构或第二数据结构。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在第二事务状态不是提交完成状态的情况下,将第二事务状态存储至第一数据结构或第二数据结构;在第二事务状态是提交完成状态的情况下,将提交完成状态和第二提交时间戳存储至第一数据结构或第二数据结构。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:判断第一事务的第一标识是否大于第一事务标识,其中,第一事务标识为从第一数据结构中移除的最后一个事务信息对应的标识;如果第一标识大于第一事务标识,则基于第二事务信息,对第一数据结构中第一标识对应的事务信息进行更新;如果第一标识小于或等于第一事务标识,则基于第二事务信息,对第二数据结构中第一标识对应的事务信息进行更新。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:当第一事务开始对分布式数据库进行操作时,判断第一数据结构是否存在剩余空间;如果第一数据结构存在剩余空间,则获取第一事务的第一标识,并将第一标识和运行状态对应存储至第一数据结构;如果第一数据结构不存在剩余空间,则对第一数据结构中的事务信息进行清除,并将第一标识和运行状态对应存储至第一数据结构。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:获取第二事务对应的视图,其中,视图用于表征分布式数据库中存储的对第二事务可见的数据,视图中至少包含有读取时间戳;判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳;如果第一事务状态是提交完成状态,且提交时间戳小于读取时间戳,则确定当前存储的数据对第二事务可见;如果第一事务状态是运行状态或回滚状态,或提交时间戳大于或等于读取时间戳,则确定当前存储的数据对第二事务不可见。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在第一事务状态为准备提交状态的情况下,等待第一事务状态更新为提交完成状态,并确定当前存储的数据是否对第二事务可见。
可选地,视图中还包含有第一预设标识和第二预设标识,第一预设标识大于第二预设标识,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳之前,判断第一事务的第一标识是否大于第一预设标识;如果第一标识大于第一预设标识,则确定当前存储的数据对第二事务不可见;如果第一标识小于或等于第一预设标识,则判断第一标识是否小于第二预设标识;如果第一标识小于第二预设标识,则确定当前存储的数据对第二事务可见;如果第一标识大于或等于第二预设标识,则判断第一事务状态是否为提交完成状态,以及提交时间戳是否小于读取时间戳。
可选地,视图中还包含有活跃事务列表,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在未存储有第一事务信息的情况下,判断第一事务是否存储在活跃事务列表中;如果第一事务存储在活跃事务列表中,则确定当前存储的数据对第二事务可见;如果第一事务未存储在活跃事务列表中,则确定当前存储的数据对第二事务不可见。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在获取第二事务对应的视图之前,获取预设时间戳;判断预设时间戳是否小于目标时间戳,其中,目标时间戳由当前时间确定;如果预设时间戳小于目标时间戳,则创建视图;如果预设时间戳大于或等于目标时间戳,则输出错误信息。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在第一数据结构已存储满的情况下,确定第一数据结构中存储的第二标识;从第一数据结构中读取第二标识对应的第三事务信息;判断第三事务信息是否满足第一预设条件;如果第三事务信息满足第一预设条件,则将第二标识和第三事务信息对应存储至第二数据结构,并删除第一数据结构中存储的第二标识和第三事务信息;如果第三事务信息不满足第一预设条件,则删除第一数据结构中存储的第二标识和第三事务信息。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:判断第三事务信息中的第三事务状态是否为提交完成状态;在第三事务状态是提交完成状态的情况下,判断第三事务信息中的第三提交时间戳是否大于目标时间戳;如果第三事务状态不是提交完成状态,或第三提交时间戳大于目标时间戳,则确定第三事务信息满足第一预设条件;如果第三提交时间戳小于或等于目标时间戳,则确定第三事务信息不满足第一预设条件。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:确定第二数据结构中存储的第三标识;从第二数据结构中读取第三标识对应的第四事务信息;判断第四事务信息是否满足视图对应的第二预设条件;如果第四事务信息满足第二预设条件,则将第三标识存储至视图对应的活动事务列表,并删除第二数据结构中存储的第三标识和第四事务信息;如果第四事务信息不满足第二预设条件,则删除第二数据结构中存储的第三标识和第四事务信息。
可选的,视图中包含有读取时间戳、第一预设标识和第二预设标识,第一预设标识大于第二预设标识,上述存储介质还被设置为存储用于执行以下步骤的程序代码:判断第四事务信息中的第四提交时间戳是否大于或等于读取时间戳,第三标识是否小于第一预设标识,且第三标识是否大于或等于第二预设标识;如果第四提交时间戳大于或等于读取时间戳,第三标识小于第一预设标识,且第三标识大于或等于第二预设标识,则确定第四事务信息满足第二预设条件;如果第四提交时间戳小于读取时间戳,第三标识大于或等于第一预设标识,或第三标识小于第二预设标识,则确定第四事务信息不满足第二预设条件。
可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在删除第二数据结构中存储的第三标识和第四事务信息之后,对第二事务标识进行更新,其中,第二事务标识为第二数据结构中存储的最小的标识信息。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (23)

1.一种数据处理方法,包括:
确定分布式数据库中当前存储的数据对应的第一事务;
获取存储的所述第一事务的第一事务信息,其中,所述第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态,所述第一事务的第一标识与所述第一提交时间戳或所述第一事务状态的映射关系预先存储在内存中;
基于所述第一事务信息,确定所述当前存储的数据是否对第二事务可见,其中,所述第二事务为当前对所述分布式数据库中存储的数据进行读取操作的事务;
其中,获取存储的所述第一事务的第一事务信息包括:
判断第一数据结构中是否存储有所述第一事务信息,其中,所述第一数据结构为数组结构;
如果所述第一数据结构中存储有所述第一事务信息,则从所述第一数据结构中读取所述第一事务信息;
其中,在所述第一事务对所述分布式数据库进行操作的过程中,所述方法还包括:
获取所述第一事务的第二事务信息,其中,所述第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;
在所述第二事务状态不是提交完成状态的情况下,将所述第二事务状态存储至所述第一数据结构;
在所述第二事务状态是所述提交完成状态的情况下,将所述提交完成状态和所述第二提交时间戳存储至所述第一数据结构。
2.根据权利要求1所述的方法,其中,获取存储的所述第一事务的第一事务信息还包括:
如果所述第一数据结构中未存储有所述第一事务信息,则判断第二数据结构中是否存储有所述第一事务信息;
如果所述第二数据结构中存储有所述第一事务信息,则从所述第二数据结构中读取所述第一事务信息。
3.根据权利要求2所述的方法,其中,基于所述第二事务状态,将所述第二事务信息存储至所述第二数据结构。
4.根据权利要求3所述的方法,其中,基于所述第二事务状态,将所述第二事务信息存储至所述第一数据结构或所述第二数据结构包括:
在所述第二事务状态不是提交完成状态的情况下,将所述第二事务状态存储至所述第二数据结构;
在所述第二事务状态是所述提交完成状态的情况下,将所述提交完成状态和所述第二提交时间戳存储至所述第二数据结构。
5.根据权利要求3所述的方法,其中,将所述第二事务信息存储至所述第一数据结构或所述第二数据结构包括:
判断所述第一事务的第一标识是否大于第一事务标识,其中,所述第一事务标识为从所述第一数据结构中移除的最后一个事务信息对应的标识;
如果所述第一标识大于所述第一事务标识,则基于所述第二事务信息,对所述第一数据结构中所述第一标识对应的事务信息进行更新;
如果所述第一标识小于或等于所述第一事务标识,则基于所述第二事务信息,对所述第二数据结构中所述第一标识对应的事务信息进行更新。
6.根据权利要求3所述的方法,其中,当所述第一事务开始对所述分布式数据库进行操作时,所述方法还包括:
判断所述第一数据结构是否存在剩余空间;
如果所述第一数据结构存在剩余空间,则获取所述第一事务的第一标识,并将所述第一标识和运行状态对应存储至所述第一数据结构;
如果所述第一数据结构不存在剩余空间,则对所述第一数据结构中的事务信息进行清除,并将所述第一标识和运行状态对应存储至所述第一数据结构。
7.根据权利要求1所述的方法,其中,基于所述第一事务信息,确定所述当前存储的数据是否对第二事务可见包括:
获取所述第二事务对应的视图,其中,所述视图用于表征所述分布式数据库中存储的对所述第二事务可见的数据,所述视图中至少包含有读取时间戳;
判断所述第一事务状态是否为提交完成状态,以及所述提交时间戳是否小于所述读取时间戳;
如果所述第一事务状态是所述提交完成状态,且所述提交时间戳小于所述读取时间戳,则确定所述当前存储的数据对所述第二事务可见;
如果所述第一事务状态是运行状态或回滚状态,或所述提交时间戳大于或等于所述读取时间戳,则确定所述当前存储的数据对所述第二事务不可见。
8.根据权利要求7所述的方法,其中,在所述第一事务状态为准备提交状态的情况下,等待所述第一事务状态更新为所述提交完成状态,并确定所述当前存储的数据是否对第二事务可见。
9.根据权利要求7所述的方法,其中,所述视图中还包含有第一预设标识和第二预设标识,所述第一预设标识大于所述第二预设标识,其中,在判断所述第一事务状态是否为提交完成状态,以及所述提交时间戳是否小于所述读取时间戳之前,所述方法还包括:
判断所述第一事务的第一标识是否大于所述第一预设标识;
如果所述第一标识大于所述第一预设标识,则确定所述当前存储的数据对所述第二事务不可见;
如果所述第一标识小于或等于所述第一预设标识,则判断所述第一标识是否小于所述第二预设标识;
如果所述第一标识小于所述第二预设标识,则确定所述当前存储的数据对所述第二事务可见;
如果所述第一标识大于或等于所述第二预设标识,则判断所述第一事务状态是否为提交完成状态,以及所述提交时间戳是否小于所述读取时间戳。
10.根据权利要求7所述的方法,其中,所述视图中还包含有活跃事务列表,其中,在未存储有所述第一事务信息的情况下,所述方法还包括:
判断所述第一事务是否存储在所述活跃事务列表中;
如果所述第一事务存储在所述活跃事务列表中,则确定所述当前存储的数据对所述第二事务可见;
如果所述第一事务未存储在所述活跃事务列表中,则确定所述当前存储的数据对所述第二事务不可见。
11.根据权利要求7所述的方法,其中,在获取所述第二事务对应的视图之前,所述方法还包括:
获取预设时间戳;
判断所述预设时间戳是否小于目标时间戳,其中,所述目标时间戳由当前时间确定;
如果所述预设时间戳小于所述目标时间戳,则创建所述视图;
如果所述预设时间戳大于或等于所述目标时间戳,则输出错误信息。
12.根据权利要求2所述的方法,其中,在所述第一数据结构已存储满的情况下,所述方法还包括:
确定所述第一数据结构中存储的第二标识;
从所述第一数据结构中读取所述第二标识对应的第三事务信息;
判断所述第三事务信息是否满足第一预设条件;
如果所述第三事务信息满足所述第一预设条件,则将所述第二标识和所述第三事务信息对应存储至所述第二数据结构,并删除所述第一数据结构中存储的所述第二标识和所述第三事务信息;
如果所述第三事务信息不满足所述第一预设条件,则删除所述第一数据结构中存储的所述第二标识和所述第三事务信息。
13.根据权利要求12所述的方法,其中,判断所述第三事务信息是否满足第一预设条件包括:
判断所述第三事务信息中的第三事务状态是否为提交完成状态;
在所述第三事务状态是所述提交完成状态的情况下,判断所述第三事务信息中的第三提交时间戳是否大于目标时间戳;
如果所述第三事务状态不是所述提交完成状态,或所述第三提交时间戳大于所述目标时间戳,则确定所述第三事务信息满足所述第一预设条件;
如果所述第三提交时间戳小于或等于所述目标时间戳,则确定所述第三事务信息不满足所述第一预设条件。
14.根据权利要求2所述的方法,其中,所述方法还包括:
确定所述第二数据结构中存储的第三标识;
从所述第二数据结构中读取所述第三标识对应的第四事务信息;
判断所述第四事务信息是否满足视图对应的第二预设条件;
如果所述第四事务信息满足所述第二预设条件,则将所述第三标识存储至所述视图对应的活动事务列表,并删除所述第二数据结构中存储的所述第三标识和所述第四事务信息;
如果所述第四事务信息不满足所述第二预设条件,则删除所述第二数据结构中存储的所述第三标识和所述第四事务信息。
15.根据权利要求14所述的方法,其中,所述视图中包含有读取时间戳、第一预设标识和第二预设标识,所述第一预设标识大于所述第二预设标识,其中,判断所述第四事务信息是否满足视图对应的第二预设条件包括:
判断所述第四事务信息中的第四提交时间戳是否大于或等于所述读取时间戳,所述第三标识是否小于所述第一预设标识,且所述第三标识是否大于或等于所述第二预设标识;
如果所述第四提交时间戳大于或等于所述读取时间戳,所述第三标识小于所述第一预设标识,且所述第三标识大于或等于所述第二预设标识,则确定所述第四事务信息满足所述第二预设条件;
如果所述第四提交时间戳小于所述读取时间戳,所述第三标识大于或等于所述第一预设标识,或所述第三标识小于所述第二预设标识,则确定所述第四事务信息不满足所述第二预设条件。
16.根据权利要求15所述的方法,其中,在删除所述第二数据结构中存储的所述第三标识和所述第四事务信息之后,对第二事务标识进行更新,其中,所述第二事务标识为所述第二数据结构中存储的最小的标识信息。
17.一种数据处理装置,包括:
第一确定模块,用于确定分布式数据库中当前存储的数据对应的第一事务;
第一获取模块,用于获取存储的所述第一事务的第一事务信息,其中,所述第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态,所述第一事务的第一标识与所述第一提交时间戳或所述第一事务状态的映射关系预先存储在内存中;
第二确定模块,用于基于所述第一事务信息,确定所述当前存储的数据是否对第二事务可见,其中,所述第二事务为当前对所述分布式数据库中存储的数据进行读取操作的事务;
其中,所述第一获取模块包括:
第一判断单元,用于判断第一数据结构中是否存储有所述第一事务信息,其中,所述第一数据结构为数组结构;
第一读取单元,用于如果所述第一数据结构中存储有所述第一事务信息,则从所述第一数据结构中读取所述第一事务信息;
其中,所述装置还包括:
第二获取模块,用于获取所述第一事务的第二事务信息,其中,所述第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;
第一存储单元,用于在所述第二事务状态不是提交完成状态的情况下,将所述第二事务状态存储至所述第一数据结构;
第二存储单元,用于在所述第二事务状态是所述提交完成状态的情况下,将所述提交完成状态和所述第二提交时间戳存储至所述第一数据结构。
18.根据权利要求17所述的装置,其中,所述第一获取模块还包括:
第二判断单元,用于如果所述第一数据结构中未存储有所述第一事务信息,则判断第二数据结构中是否存储有所述第一事务信息;
第二读取单元,用于如果所述第二数据结构中存储有所述第一事务信息,则从所述第二数据结构中读取所述第一事务信息。
19.根据权利要求18所述的装置,其中,所述装置还包括:
第一存储模块,用于基于所述第二事务状态,将所述第二事务信息存储至所述第二数据结构。
20.一种数据处理系统,包括:
分布式部署的多个数据节点,用于存储数据;
处理节点,用于确定所述多个数据节点中当前存储的数据对应的第一事务,获取存储的所述第一事务的第一事务信息,并基于所述第一事务信息,确定所述当前存储的数据是否对第二事务可见,其中,所述第一事务信息包括如下至少之一:第一提交时间戳和第一事务状态,所述第二事务为当前对所述多个数据节点中存储的数据进行读取操作的事务,所述第一事务的第一标识与所述第一提交时间戳或所述第一事务状态的映射关系预先存储在内存中;
其中,所述处理节点包括:
第一数据结构和处理模块;
其中,所述处理模块用于判断所述第一数据结构中是否存储有所述第一事务信息,其中,所述第一数据结构为数组结构;如果所述第一数据结构中存储有所述第一事务信息,则从所述第一数据结构中读取所述第一事务信息;
其中,所述处理模块还用于在所述第一事务对所述分布式数据库进行操作的过程中,获取所述第一事务的第二事务信息,其中,所述第二事务信息包括如下至少之一:第二提交时间戳和第二事务状态;在所述第二事务状态不是提交完成状态的情况下,将所述第二事务状态存储至所述第一数据结构;在所述第二事务状态是所述提交完成状态的情况下,将所述提交完成状态和所述第二提交时间戳存储至所述第一数据结构。
21.根据权利要求20所述的系统,其中,所述处理节点包括:
第二数据结构;
其中,所述处理模块还用于如果所述第一数据结构中未存储有所述第一事务信息,则判断所述第二数据结构中是否存储有所述第一事务信息;如果所述第二数据结构中存储有所述第一事务信息,则从所述第二数据结构中读取所述第一事务信息。
22.一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行权利要求1至16中任意一项所述的数据处理方法。
23.一种计算机终端,包括:存储器和处理器,所述处理器用于运行所述存储器中存储的程序,其中,所述程序运行时执行权利要求1至16中任意一项所述的数据处理方法。
CN202010570909.6A 2020-06-22 2020-06-22 数据处理方法、装置和系统 Active CN111475585B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010570909.6A CN111475585B (zh) 2020-06-22 2020-06-22 数据处理方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010570909.6A CN111475585B (zh) 2020-06-22 2020-06-22 数据处理方法、装置和系统

Publications (2)

Publication Number Publication Date
CN111475585A CN111475585A (zh) 2020-07-31
CN111475585B true CN111475585B (zh) 2021-06-01

Family

ID=71764000

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010570909.6A Active CN111475585B (zh) 2020-06-22 2020-06-22 数据处理方法、装置和系统

Country Status (1)

Country Link
CN (1) CN111475585B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112231070B (zh) * 2020-10-15 2024-08-30 北京金山云网络技术有限公司 数据写入、读取方法、装置及服务器
CN113032292B (zh) * 2021-05-19 2021-09-03 北京金山云网络技术有限公司 存储空间回收方法、数据读取方法及装置
CN114691307A (zh) * 2022-03-16 2022-07-01 阿里巴巴(中国)有限公司 事务处理方法及计算机系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017128028A1 (zh) * 2016-01-26 2017-08-03 华为技术有限公司 一种事务处理方法及装置
CN107835983A (zh) * 2015-04-16 2018-03-23 诺宝公司 使用一致的数据库快照在分布式数据库中进行备份和还原
CN109977171A (zh) * 2019-02-02 2019-07-05 中国人民大学 一种保证事务一致性和线性一致性的分布式系统和方法
CN110196856A (zh) * 2019-05-09 2019-09-03 腾讯科技(深圳)有限公司 一种分布式数据读取方法及装置
CN110196760A (zh) * 2018-07-12 2019-09-03 腾讯科技(深圳)有限公司 分布式事务一致性实现方法及装置
CN111190935A (zh) * 2019-08-27 2020-05-22 中国人民大学 数据读取方法、装置、计算机设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107835983A (zh) * 2015-04-16 2018-03-23 诺宝公司 使用一致的数据库快照在分布式数据库中进行备份和还原
WO2017128028A1 (zh) * 2016-01-26 2017-08-03 华为技术有限公司 一种事务处理方法及装置
CN110196760A (zh) * 2018-07-12 2019-09-03 腾讯科技(深圳)有限公司 分布式事务一致性实现方法及装置
CN109977171A (zh) * 2019-02-02 2019-07-05 中国人民大学 一种保证事务一致性和线性一致性的分布式系统和方法
CN110196856A (zh) * 2019-05-09 2019-09-03 腾讯科技(深圳)有限公司 一种分布式数据读取方法及装置
CN111190935A (zh) * 2019-08-27 2020-05-22 中国人民大学 数据读取方法、装置、计算机设备及存储介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
WiredTiger的事务实现详解;lx青萍之末;《https://blog.csdn.net/daaikuaichuan/article/details/97893552》;20190731;第1-12页 *
分布式事务解析;Chank;《https://xie.infoq.cn/article/780df07dd23352e1cdcf11dff》;20200617;第1-12页 *
深入学习MySQL事务:ACID特性的实现原理;编程迷思;《https://www.cnblogs.com/kismetv/p/10331633.html》;20190129;第1-10页 *
腾讯HTAP数据库TBase分布式事务揭秘;腾讯大数据;《https://cloud.tencent.com/developer/article/1481837》;20190807;第1-12页 *

Also Published As

Publication number Publication date
CN111475585A (zh) 2020-07-31

Similar Documents

Publication Publication Date Title
CN111475585B (zh) 数据处理方法、装置和系统
US11023448B2 (en) Data scrubbing method and apparatus, and computer readable storage medium
US20190129894A1 (en) Database Transaction Processing Method, Client, and Server
US10706036B2 (en) Systems and methods to optimize multi-version support in indexes
US20070074201A1 (en) Method and system for updating software and computer readable recording medium storing the method
CN110399227B (zh) 一种数据访问方法、装置和存储介质
CN111090663A (zh) 事务并发控制方法、装置、终端设备及介质
US20160314162A1 (en) Replicable differential store data structure
CN113438275B (zh) 数据迁移方法、装置、存储介质及数据迁移设备
WO2024098858A1 (zh) 数据库访问系统、方法、计算机设备和存储介质
WO2019162830A1 (en) Chronologically ordered out-of-place update key-value storage system
CN114281779A (zh) 数据同步方法、装置、计算机设备及存储介质
WO2019162829A1 (en) Fast recovery from failures in a chronologically ordered log-structured key-value storage system
US20190347191A1 (en) Host aware update write
CN114020193A (zh) 跨页勾选确定方法、装置、电子设备及存储介质
CN111949287B (zh) 软件升级方法和装置
JP4311059B2 (ja) トランザクション制御方法
CN100442715C (zh) 设备管理中计划任务的实现方法
CN114328591A (zh) 事务执行方法、装置、设备和存储介质
CN108694219B (zh) 一种数据处理方法及装置
CN113760857A (zh) 一种跨引擎事务的处理方法、装置、设备及介质
CN117171266B (zh) 一种数据同步方法、装置、设备和存储介质
EP4443311A1 (en) Information pushing method and server
CN114116732B (zh) 处理事务的方法、装置、存储装置以及服务器
CN117742609A (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
GR01 Patent grant
GR01 Patent grant