CN106598992A - 数据库的操作方法及装置 - Google Patents
数据库的操作方法及装置 Download PDFInfo
- Publication number
- CN106598992A CN106598992A CN201510675583.2A CN201510675583A CN106598992A CN 106598992 A CN106598992 A CN 106598992A CN 201510675583 A CN201510675583 A CN 201510675583A CN 106598992 A CN106598992 A CN 106598992A
- Authority
- CN
- China
- Prior art keywords
- affairs
- transaction
- data
- data item
- collection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures 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/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明提供了一种数据库的操作方法及装置。该方法包括:在第一时刻接收第一事务信息和当前事务快照,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态;判断标识所指示的已开始执行的事务中是否存在目标事务,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;若已开始执行的事务中存在目标事务,则在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。通过本发明解决了分布式事务中的数据无法达到全局一致性的问题。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种数据库的操作方法及装置。
背景技术
随着传统的数据库技术日趋成熟,以及互联网应用的高速发展,数据库应用已普遍出现在互联网之上。而传统的集中式数据库***同时也表现出其不足之处:采用集中式管理,势必造成性能瓶颈,单一的提高硬件性能已不能满足目前互联网的大数据量高并发查询写入的需求,同时会产生大量的硬件维护和升级费用。此外,数据库的集中管理往往造成多数据库关联,一旦某一台数据库崩溃,将造成整个***崩溃。所以分布式数据库***将逐步取代传统集中式数据库***。
事务是关系型数据库的重要特性,众所周知关系型数据库事务的ACID原则为:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(Isolation)和持久性(Durabilily),其中数据的读一致性通过多版本并发控制(MVCC)的机制来实现。伴随着分布式数据库的快速发展,一些在集中式数据库***中比较成熟且应用广泛的功能和技术在分布式环境下遇到了极大的挑战,例如事务(Transaction)功能。为了在分布式数据库中实现事务功能,目前业界普遍采用的是两阶段提交协议(two phase commitprotocol,2PC)。
顾名思义,两阶段提交协议由两个阶段组成。在正常的执行下,这两个阶段的执行过程如下所述:
阶段1:请求阶段(commit-request phase,或称表决阶段,voting phase)
在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。
阶段2:提交阶段(commit phase)
在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。
目前两阶段提交协议存在一个很大的缺点,不能完全遵守事务的ACID原则,即没有考虑到事务的一致性(Consistency)问题,导致查询的结果不是全局一致性。比如,针对分布式数据库***的节点A和节点B,如果事务1对节点A和节点B进行数据更新后,进入到阶段2的提交阶段,即此时的状态为:节点A事务已经提交完成、节点B事务处于待提交状态,如果在这一时刻存在一个事务2对节点A和节点B进行查询,那么查询的结果就违反了事务的一致性原则,即在节点A上查询得到的是修改后的数据,而在节点B上查询得到的是修改前的数据。因为两阶段提交协议在分布式数据库***中存在事务commit的时间差,导致两阶段提交协议本身无法避免这个数据全局不一致性问题。
综上所述,在目前的分布式数据库***中,采用两阶段提交协议实现的分布式事务如何解决数据的全局一致性问题,相关技术尚无有效解决方案。
发明内容
本发明提供了一种数据库的操作方法及装置,以至少解决相关技术中分布式事务中的数据无法达到全局一致性的问题。
根据本发明的一个方面,提供了一种数据库的操作方法,包括:在第一时刻接收第一事务信息和当前事务快照,其中,第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态,数据库集合为包括第一数据库在内的一个或多个数据库;判断标识所指示的已开始执行的事务中是否存在目标事务,其中,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;若已开始执行的事务中存在目标事务,则在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。
可选地,判断标识所指示的已开始执行的事务中是否存在目标事务包括:在已开始执行的事务中的当前事务对数据库集合中的当前数据库执行当前事务所指示的操作的情况下,判断当前事务是否在每个当前数据库上都已完成提交,其中,当前数据库为一个或多个数据库;若判断出当前事务并未在每个当前数据库上都已完成提交,则将当前事务的状态设置为未完成提交;判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行第一事务所指示的操作的数据项中的部分或全部;若包括执行第一事务所指示的操作的数据项中的部分或全部,则将当前事务作为目标事务之一,并判断出存在目标事务。
可选地,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作包括以下至少之一:在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项进行删除;在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与删除操作对应的删除条件,对部分或全部的数据项中满足删除条件的数据项进行删除;在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项执行修改操作;在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与修改操作对应的修改条件,对部分或全部的数据项中满足修改条件的数据项执行修改操作。
可选地,若已开始执行的事务中存在目标事务,则方法还包括:在第一事务所指示的操作为对第一数据库中的第一数据项集合执行查询操作时,返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息。
可选地,在返回第一数据项集合中除部分或全部之外的数据项的当前信息包括:在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的当前信息。
可选地,在返回第一数据项集合中的部分或全部的数据项的历史信息包括:在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的历史信息。
可选地,数据库集合中的数据库为分布式数据库。
根据本发明的另一方面,提供了一种数据库的操作装置,包括:接收单元,用于在第一时刻接收第一事务信息和当前事务快照,其中,第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态,数据库集合为包括第一数据库在内的一个或多个数据库;判断单元,用于判断标识所指示的已开始执行的事务中是否存在目标事务,其中,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;处理单元,用于在已开始执行的事务中存在目标事务时,在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。
可选地,判断单元包括:第一判断模块,用于在已开始执行的事务中的当前事务对数据库集合中的当前数据库执行当前事务所指示的操作的情况下,判断当前事务是否在每个当前数据库上都已完成提交,其中,当前数据库为一个或多个数据库;设置模块,用于在判断出当前事务并未在每个当前数据库上都已完成提交时,将当前事务的状态设置为未完成提交;第二判断模块,用于判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行第一事务所指示的操作的数据项中的部分或全部;确定模块,用于在判断出包括执行第一事务所指示的操作的数据项中的部分或全部时,将当前事务作为目标事务之一,并判断出存在目标事务。
可选地,处理单元包括以下至少之一:第一处理模块,用于在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项进行删除;或者,在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与删除操作对应的删除条件,对部分或全部的数据项中满足删除条件的数据项进行删除;第二处理模块,用于在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项执行修改操作;或者,在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与修改操作对应的修改条件,对部分或全部的数据项中满足修改条件的数据项执行修改操作。
可选地,还包括:第三处理模块,用于在已开始执行的事务中存在目标事务,第一事务所指示的操作为对第一数据库中的第一数据项集合执行查询操作时,返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息。
可选地,第三处理模块包括:第一处理子模块,用于在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的当前信息。
可选地,第三处理模块包括:第二处理子模块,用于在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的历史信息。
可选地,数据库集合中的数据库为分布式数据库。
通过本发明,在第一时刻接收第一事务信息和当前事务快照,其中,当前事务快照中包括第一时刻上数据库集合中已开始执行的事务的标识和状态。通过判断已开始执行的事务中是否存在状态为未完成提交的目标事务,若上述已开始执行的事务中存在上述目标事务,则在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作,从而实现对第一时刻所有事务的全局一致性的操作。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的数据库的操作方法的流程图;
图2是根据本发明实施例的一种可选的数据库的操作方法的应用示意图;
图3是根据本发明实施例的另一种可选的数据库的操作方法的流程图;
图4是根据本发明实施例的又一种可选的数据库的操作方法的流程图;以及
图5是根据本发明实施例的一种可选的数据库的操作装置的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
在本实施例中提供了一种数据库的操作方法,图1是根据本发明实施例的数据库的操作方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,在第一时刻接收第一事务信息和当前事务快照,其中,第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态,数据库集合为包括第一数据库在内的一个或多个数据库;
步骤S104,判断标识所指示的已开始执行的事务中是否存在目标事务,其中,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;
步骤S106,若已开始执行的事务中存在目标事务,则在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。
可选地,在本实施例中,图2是根据本发明实施例的一种可选的数据库的操作方法的应用示意图,上述数据库的操作方法可以但不限于应用于如图2所示的应用环境中,客户端202在协调器204、全局事务管理器206、数据库服务208三者之间通过传输控制协议(TCP,Transmission Control Protocol)或用户数据包协议(UDP,User DatagramProtocol)等通讯协议来实现链路链接通讯。其中,数据库服务器208中可以包括但不限于数据库服务节点A和数据库服务器节点B。上述数据库服务208中的各个数据库服务节点不间断地上报其内部所有事务的最新状态给全局事务管理器206,同时从全局事务管理器206获取分布式数据库***当前时刻所有事务的事务快照,以便于通过该事务快照来判断在已开始执行的事务中是否包括处于未完成提交状态的目标事务,从而实现根据事务的状态来完成对数据库数据的全局一致性地操作处理,以避免在对分布式数据***中处于不同状态的事务进行操作时所造成的无法达到数据全局一致性的问题,进而保证数据的全局一致性。
需要说明的是,在本实施例中,上述应用环境中的协调器204、全局事务管理器206、数据库服务208的功能可以如下:
1)上述协调器204可以但不限于用于接收客户端202发送的结构化查询语言(SQL,Structured Query Language)语句块请求;然后向全局事务管理器206申请GXID(唯一且有序的事务ID,简称为GXID);向全局事务管理器206上报当前事务的事务快照;并把SQL发送给多个数据库服务器节点(例如数据库服务节点A和数据库服务器节点B)执行,并汇总SQL执行结果,并把结果返回给客户端202。
2)上述全局事务管理器206用于为每个事务生成唯一且有序的GXID;还用于监控跟踪分布式数据库***中所有事务的状态,接收并保存上报的事务状态报告;响应数据服务节点的事务状态请求,发送当前时刻的事务快照给数据服务节点。
3)上述数据库服务208中的数据库服务节点用于并行执行SQL命令;向全局事务管理器206获取当前时刻的分布式数据库***中所有事务快照信息,根据事务快照进行数据的全局一致性的处理操作。
可选地,在本实施例中,上述已开始执行的事务的状态可以包括但不限于以下至少之一:正在运行(running)、已提交(committed)、中止(aborted),其中,处于未完成提交状态的目标事务中所涉及的数据项可以包括一个或多个。
可选地,在本实施例中,上述第一事务所指示的操作可以包括但不限于以下至少之一:修改、删除和查询。
需要说明的是,在本实施例中,已开始执行的事务中存在目标事务时,若第一事务所指示的操作为对数据项进行删除操作和/或修改操作,则在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的删除操作和/或修改操作;若第一事务所指示的操作为对数据项进行查询操作,则可以返回在目标事务的状态转换为已完成提交之后,查询第一事务所涉及的数据项得到的当前信息,也可以返回在目标事务的状态仍未提交的情况下,查询第一事务所涉及的数据项得到的历史信息,其中,上述查询得到的历史信息可以但不限于包括第一事务所涉及的数据项在执行目标事务之前所完成的最后一次操作的结果信息。
可选地,在本实施例中,上述数据库集合中的数据库可以包括但不限于分布式数据库。
可选地,在本实施例中,上述已开始执行的事务中可以包括但不限于:当前事务,其中,上述当前事务为在第一事务执行之前,在分布式数据库中执行的事务。
具体结合图2所示进行说明,上述数据库的操作方法可以如下:
S1,全局事务管理器(GTM,Global Transaction Manager)为分布式数据库***中每一个事务提供生成一个唯一且有序的事务ID,称之为GXID;并收集保存分布式数据库***中所有的事务状态;
S2,GTM接收协调器节点获取新的事务请求时,生成一个唯一且有序的GXID给协调器节点;
S3,GTM接收数据库服务节点获取当前时刻***事务快照请求时,把收集保存的所有事务状态发送给数据库服务节点;
S4,数据库服务节点接收SQL语句并解析执行,并返回执行结果。
可选地,在本实施例中,在事务开始、事务结束、两阶段提交协议的准备阶段,数据库服务节点向GTM发送当前事务的状态报告。
可选地,在本实施例中,在执行第一事务所指示的查询操作时,返回查询到的数据项时可以包括但不限于以下至少一种:
1)在事务隔离级别是提交读(read committed)时,数据库服务节点在执行第一事务的每一个SQL语句时,都先要向GTM请求当前时刻整个分布式数据库***所有事务的状态快照;
2)在事务隔离级别是可重复读(read repeatable)和序列化(serializable)时,数据库服务节点在当前事务开始时要向GTM请求当前时刻整个分布式数据库***所有事务的状态快照。
通过本申请提供的实施例,在第一时刻接收第一事务信息和当前事务快照,其中,当前事务快照中包括第一时刻上数据库集合中已开始执行的事务的标识和状态。通过判断已开始执行的事务中是否存在状态为未完成提交的目标事务,若上述已开始执行的事务中存在上述目标事务,则在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作,从而实现对第一时刻所有事务的全局一致性的操作。
作为一种可选的方案,判断标识所指示的已开始执行的事务中是否存在目标事务包括:
S1,在已开始执行的事务中的当前事务对数据库集合中的当前数据库执行当前事务所指示的操作的情况下,判断当前事务是否在每个当前数据库上都已完成提交,其中,当前数据库为一个或多个数据库;
S2,若判断出当前事务并未在每个当前数据库上都已完成提交,则将当前事务的状态设置为未完成提交;
S3,判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行第一事务所指示的操作的数据项中的部分或全部;
S4,若包括执行第一事务所指示的操作的数据项中的部分或全部,则将当前事务作为目标事务之一,并判断出存在目标事务。
可选地,在本实施例中,执行当前事务的当前数据库可以包括但不限于一个或多个数据库。其中,当前数据库为多个数据库时,若至少一个数据库未完成当前事务所指示的操作,则标识当前事务为处于未完成提交的状态,否则,标识当前事务为完成提交的状态。
可选地,在本实施例中,在判断当前事务处于未完成提交状态后,判断当前事务中所涉及的数据项是否包括第一事务所指示的操作所涉及的数据项的部分或全部,若判断结果为是,则判断出当前事务为目标事务。进一步,对已开始执行的事务中的其他事务重复执行上述判断,以得到已开始执行的事务中的所有目标事务,从而实现对目标事务中的数据项在状态转换为已完成提交之后,再开始执行第一事务所指示的操作。
通过本申请提供的实施例,通过获取已开始执行的事务中的目标事务,来实现在执行第一事务所指示的操作时,对目标事务执行等待操作,直到目标事务的状态转换为已完成提交,从而实现对分布式数据库的全局一致性的控制,以避免由分布式数据库中获取到不同的数据所导致的数据不一致的问题。
作为一种可选的方案,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作包括以下至少之一:
S1,在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项进行删除;
S2,在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与删除操作对应的删除条件,对部分或全部的数据项中满足删除条件的数据项进行删除;
S3,在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项执行修改操作;
S4,在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后判断部分或全部的数据项是否满足第一事务信息中携带的与修改操作对应的修改条件,对部分或全部的数据项中满足修改条件的数据项执行修改操作。
可选地,在本实施例中,上述第一事务所指示的操作可以包括但不限于以下至少之一:删除操作、修改操作。其中,在上述第一事务所指示的操作的数据项中的部分或全部数据项为目标事务中所涉及的数据项时,为了达到对分布式数据库中的数据执行一致性的控制操作,在本实施例中,将在目标事务的状态转换为已完成提交之后,再对第一事务所指示的操作所涉及的数据项中的部分或全部执行上述第一事务所指示的操作。
也就是说,在第一事务所指示的操作为对第一数据库中的第二数据项集合进行操作时,对第二数据项集合中除目标事务所涉及的部分或全部数据项之外的数据项直接执行第一事务所指示的操作;而在目标事务的状态转换为已提交之后,再对第二数据项集合中目标事务所涉及的部分或全部数据项执行第一事务所指示的操作。需要说明的是,在对第二数据项集合中目标事务所涉及的部分或全部数据项执行第一事务所指示的操作之前,还包括:判断部分或全部的数据项是否满足第一事务信息中携带的与操作对应的操作条件,在判断出满足操作条件后,再对部分或全部的数据项中满足操作条件的数据项进行执行第一事务所指示的操作。
例如,当前已开始执行的事务包括:事务1、事务2和事务3,其中,事务1与事务2为目标事务,事务1中所涉及的数据项包括D1、D2、D3、D4及D5,事务2中所涉及的数据项包括D2、D4、D5及D6,第一时刻接收到的第一事务为事务4,其中,事务4中所涉及的数据项包括D1、D2、D4及D7,也就是说,第一事务所涉及的数据项包括目标事务中的部分数据项,即:D1、D2、D4,因而,对上述数据项执行第一事务所指示的操作(例如修改)时,则需等目标事务的状态转换为已完成提交状态后再执行修改操作。
又例如,仍以第一事务所涉及的数据项包括目标事务中的部分数据项,即:D1、D2、D4为例,则在对数据项D1、D2、D4执行第一事务所指示的操作(例如删除)之前,还需判断上述数据项是否满足第一事务信息中携带的与删除操作对应的删除条件,例如,删除条件为对数据所占空间大于2M的数据项进行删除。假设判断出数据项D1、D2满足上述删除条件,则对满足删除条件的数据项D1、D2执行第一事务所指示的删除操作。
通过本申请提供的实施例,在第一事务所指示的操作中包括对目标事务中的部分或全部数据项执行修改操作和删除操作时,需在目标事务的状态转换为已完成提交之后再对上述部分或全部的数据项执行上述修改操作或删除操作,从而避免在第一事务中获取到数据项内容不同的数据所导致的不一致问题。
作为一种可选的方案,若已开始执行的事务中存在目标事务,则方法还包括:
S1,在第一事务所指示的操作为对第一数据库中的第一数据项集合执行查询操作时,返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息。
需要说明的是,第一事务所指示的操作为查询操作时,可以返回第一数据项集合中查询得到的除部分或全部之外的数据项的当前信息,也可以返回第一数据项集合中查询得到的部分或全部的数据项的历史信息。其中,上述查询得到的历史信息可以但不限于包括第一事务所涉及的数据项在执行目标事务之前所完成的最后一次操作的结果信息。
通过本申请提供的实施例,在第一事务所指示的操作中包括对目标事务中的部分或全部数据项执行查询操作时,若已完成当前事务的操作,则返回当前信息,若未完成当前事务的操作,则返回操作之前的历史信息。
作为一种可选的方案,在返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息包括:
S1,在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的当前信息。
具体结合以下示例进行说明,图3是根据本发明实施例的数据库的操作方法的流程图,如图3所示,分布式事务隔离级别为可重复读(read repeatable)和序列化(serializable)时,具体过程如下:
步骤S301,协调器节点接收客户端发送的SQL语句块请求;
步骤S302,协调器节点向全局事务管理器请求GXID和当前时刻所有事务的快照;
步骤S303,全局事务管理器把新生成的GXID和事务快照发送给协调器节点;
全局事务管理器接收协调器节点获取新的GXID请求后,生成一个唯一且有序的GXID发送给协调器节点。同时全局事务管理器保存这个新生成的事务的状态信息。
事务快照是指当前时刻整个分布式数据库***中所有的事务以及状态信息,状态包括:正在运行(running)、已提交(committed)、中止(aborted)。
步骤S304,协调器节点把SQL语句块、GXID、事务快照发送给多个数据库服务节点;
协调器把SQL语句发送给多个相关的数据库服务节点,以方便多个数据库服务节点能并行执行SQL查询。
步骤S305,数据库服务节点执行第一条SQL,并根据事务快照进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S306,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
步骤S307,数据库服务节点继续执行下一条SQL,并根据事务快照进行全局一致性读操作;
在事务隔离级别是可重复读(read repeatable)和序列化(serializable)时,根据事务的ACID特性,只需要使用本事务的开始时刻的事务快照来进行数据的全局一致性判断,这个事务快照是通过协调器节点向全局事务管理器申请获取并传递给数据库服务节点的。
步骤S308,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
通过本申请提供的实施例,通过获取当前时刻所有事务的快照来实现数据全局一致性读,即数据库服务节点通过把本身的事务状态和当前时刻的分布式数据库***中所有其他的事务快照进行对比分析,来判断实现数据的全局一致性读。
作为一种可选的方案,在返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息包括:
S1,在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的历史信息。
具体结合以下示例进行说明,图4是根据本发明实施例的数据库的操作方法的流程图,如图4所示,分布式事务隔离级别为已提交读(read committed),具体过程如下:
步骤S401,协调器节点接收客户端发送的SQL语句块请求;
步骤S402,协调器节点向全局事务管理器请求GXID和当前时刻所有事务的快照;
步骤S403,全局事务管理器把新生成的GXID和事务快照发送给协调器节点;
全局事务管理器接收协调器节点获取新的GXID请求后,生成一个唯一且有序的GXID发送给协调器节点。同时全局事务管理器保存这个新生成的事务的状态信息。
事务快照是指当前时刻整个分布式数据库***中所有的事务以及状态信息,状态包括:正在运行(running)、已提交(committed)、中止(aborted)。
步骤S404,协调器节点把SQL语句块、GXID、事务快照发送给多个数据库服务节点;
协调器把SQL语句发送给多个相关的数据库服务节点,以方便多个数据库服务节点能并行执行SQL查询。
步骤S405,数据库服务节点执行第一条SQL,并根据事务快照进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S406,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
步骤S407,数据库服务节点在执行下一条SQL前,向全局事务管理器请求当前时刻所有事务的快照;
在事务隔离级别是已提交读(read committed)时,根据事务的ACID特性,数据库服务节点在执行当前事务的每一个SQL语句时,都先要向全局事务管理器请求当前时刻整个分布式数据库***所有事务的状态快照。
步骤S408,全局事务管理器把当前时刻事务快照发送给数据库服务节点;
步骤S409,数据库服务节点根据事务快照执行下一条SQL,并进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S410,协调器节点汇总所有数据库服务节点执行结果并发送给客户端。
上述实施例在事务隔离级别是已提交读(read committed)时,通过获取当前时刻所有事务的快照来实现数据全局一致性读,即数据库服务节点通过把本身的事务状态和当前时刻的分布式数据库***中所有其他的事务快照进行对比分析,来判断实现数据的全局一致性读。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种数据库的操作装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图5是根据本发明实施例的数据库的操作装置的示意图,如图5所示,该装置包括
1)接收单元502,用于在第一时刻接收第一事务信息和当前事务快照,其中,第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态,数据库集合为包括第一数据库在内的一个或多个数据库;
2)判断单元504,用于判断标识所指示的已开始执行的事务中是否存在目标事务,其中,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;
3)处理单元506,用于在已开始执行的事务中存在目标事务时,在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。
可选地,在本实施例中,图2是根据本发明实施例的一种可选的数据库的操作方法的应用示意图,上述数据库的操作装置可以但不限于应用于如图2所示的应用环境中,客户端202在协调器204、全局事务管理器206、数据库服务208三者之间通过传输控制协议(TCP,Transmission Control Protocol)或用户数据包协议(UDP,User DatagramProtocol)等通讯协议来实现链路链接通讯。其中,数据库服务器208中可以包括但不限于数据库服务节点A和数据库服务器节点B。上述数据库服务208中的各个数据库服务节点不间断地上报其内部所有事务的最新状态给全局事务管理器206,同时从全局事务管理器206获取分布式数据库***当前时刻所有事务的事务快照,以便于通过该事务快照来判断在已开始执行的事务中是否包括处于未完成提交状态的目标事务,从而实现根据事务的状态来完成对数据库数据的全局一致性地操作处理,以避免在对分布式数据***中处于不同状态的事务进行操作时所造成的无法达到数据全局一致性的问题,进而保证数据的全局一致性。
需要说明的是,在本实施例中,上述应用环境中的协调器204、全局事务管理器206、数据库服务208的功能可以如下:
1)上述协调器204可以但不限于用于接收客户端202发送的结构化查询语言(SQL,Structured Query Language)语句块请求;然后向全局事务管理器206申请GXID(唯一且有序的事务ID,简称为GXID);向全局事务管理器206上报当前事务的事务快照;并把SQL发送给多个数据库服务器节点(例如数据库服务节点A和数据库服务器节点B)执行,并汇总SQL执行结果,并把结果返回给客户端202。
2)上述全局事务管理器206用于为每个事务生成唯一且有序的GXID;还用于监控跟踪分布式数据库***中所有事务的状态,接收并保存上报的事务状态报告;响应数据服务节点的事务状态请求,发送当前时刻的事务快照给数据服务节点。
3)上述数据库服务208中的数据库服务节点用于并行执行SQL命令;向全局事务管理器206获取当前时刻的分布式数据库***中所有事务快照信息,根据事务快照进行数据的全局一致性的处理操作。
可选地,在本实施例中,上述已开始执行的事务的状态可以包括但不限于以下至少之一:正在运行(running)、已提交(committed)、中止(aborted),其中,处于未完成提交状态的目标事务中所涉及的数据项可以包括一个或多个。
可选地,在本实施例中,上述第一事务所指示的操作可以包括但不限于以下至少之一:修改、删除和查询。
需要说明的是,在本实施例中,已开始执行的事务中存在目标事务时,若第一事务所指示的操作为对数据项进行删除操作和/或修改操作,则在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的删除操作和/或修改操作;若第一事务所指示的操作为对数据项进行查询操作,则可以返回在目标事务的状态转换为已完成提交之后,查询第一事务所涉及的数据项得到的当前信息,也可以返回在目标事务的状态仍未提交的情况下,查询第一事务所涉及的数据项得到的历史信息,其中,上述查询得到的历史信息可以但不限于包括第一事务所涉及的数据项在执行目标事务之前所完成的最后一次操作的结果信息。
可选地,在本实施例中,上述数据库集合中的数据库可以包括但不限于分布式数据库。
可选地,在本实施例中,上述已开始执行的事务中可以包括但不限于:当前事务,其中,上述当前事务为在第一事务执行之前,在分布式数据库中执行的事务。
具体结合图2所示进行说明,上述数据库的操作装置可以如下:
S1,全局事务管理器(GTM,Global Transaction Manager)为分布式数据库***中每一个事务提供生成一个唯一且有序的事务ID,称之为GXID;并收集保存分布式数据库***中所有的事务状态;
S2,GTM接收协调器节点获取新的事务请求时,生成一个唯一且有序的GXID给协调器节点;
S3,GTM接收数据库服务节点获取当前时刻***事务快照请求时,把收集保存的所有事务状态发送给数据库服务节点;
S4,数据库服务节点接收SQL语句并解析执行,并返回执行结果。
可选地,在本实施例中,在事务开始、事务结束、两阶段提交协议的准备阶段,数据库服务节点向GTM发送当前事务的状态报告。
可选地,在本实施例中,在执行第一事务所指示的查询操作时,返回查询到的数据项时可以包括但不限于以下至少一种:
1)在事务隔离级别是提交读(read committed)时,数据库服务节点在执行第一事务的每一个SQL语句时,都先要向GTM请求当前时刻整个分布式数据库***所有事务的状态快照;
2)在事务隔离级别是可重复读(read repeatable)和序列化(serializable)时,数据库服务节点在当前事务开始时要向GTM请求当前时刻整个分布式数据库***所有事务的状态快照。
通过本申请提供的实施例,在第一时刻接收第一事务信息和当前事务快照,其中,当前事务快照中包括第一时刻上数据库集合中已开始执行的事务的标识和状态。通过判断已开始执行的事务中是否存在状态为未完成提交的目标事务,若上述已开始执行的事务中存在上述目标事务,则在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作,从而实现对第一时刻所有事务的全局一致性的操作。
作为一种可选的方案,判断单元包括:
1)第一判断模块,用于在已开始执行的事务中的当前事务对数据库集合中的当前数据库执行当前事务所指示的操作的情况下,判断当前事务是否在每个当前数据库上都已完成提交,其中,当前数据库为一个或多个数据库;
2)设置模块,用于在判断出当前事务并未在每个当前数据库上都已完成提交时,将当前事务的状态设置为未完成提交;
3)第二判断模块,用于判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行第一事务所指示的操作的数据项中的部分或全部;
4)确定模块,用于在判断出包括执行第一事务所指示的操作的数据项中的部分或全部时,将当前事务作为目标事务之一,并判断出存在目标事务。
可选地,在本实施例中,执行当前事务的当前数据库可以包括但不限于一个或多个数据库。其中,当前数据库为多个数据库时,若至少一个数据库未完成当前事务所指示的操作,则标识当前事务为处于未完成提交的状态,否则,标识当前事务为完成提交的状态。
可选地,在本实施例中,在判断当前事务处于未完成提交状态后,判断当前事务中所涉及的数据项是否包括第一事务所指示的操作所涉及的数据项的部分或全部,若判断结果为是,则判断出当前事务为目标事务。进一步,对已开始执行的事务中的其他事务重复执行上述判断,以得到已开始执行的事务中的所有目标事务,从而实现对目标事务中的数据项在状态转换为已完成提交之后,再开始执行第一事务所指示的操作。
通过本申请提供的实施例,通过获取已开始执行的事务中的目标事务,来实现在执行第一事务所指示的操作时,对目标事务执行等待操作,直到目标事务的状态转换为已完成提交,从而实现对分布式数据库的全局一致性的控制,以避免由分布式数据库中获取到不同的数据所导致的数据不一致的问题。
作为一种可选的方案,处理单元包括以下至少之一:
1)第一处理模块,用于在第一事务所指示的操作为对第一数据库中的第二数据项集合执行删除操作时,将第二数据项集合中除部分或全部之外的数据项进行删除,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项进行删除;或者,在所述第一事务所指示的操作为对所述第一数据库中的第二数据项集合执行所述删除操作时,将所述第二数据项集合中除所述部分或全部之外的数据项进行删除,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述删除操作对应的删除条件,对所述部分或全部的数据项中满足所述删除条件的数据项进行删除;
2)第二处理模块,用于在第一事务所指示的操作为对第一数据库中的第三数据项集合执行修改操作时,对第三数据项集合中除部分或全部之外的数据项执行修改操作,并在目标事务的状态转换为已完成提交之后对部分或全部的数据项执行修改操作;或者,在所述第一事务所指示的操作为对所述第一数据库中的第三数据项集合执行所述修改操作时,对所述第三数据项集合中除所述部分或全部之外的数据项执行所述修改操作,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述修改操作对应的修改条件,对所述部分或全部的数据项中满足所述修改条件的数据项执行所述修改操作。
可选地,在本实施例中,上述第一事务所指示的操作可以包括但不限于以下至少之一:删除操作、修改操作。其中,在上述第一事务所指示的操作的数据项中的部分或全部数据项为目标事务中所涉及的数据项时,为了达到对分布式数据库中的数据执行一致性的控制操作,在本实施例中,将在目标事务的状态转换为已完成提交之后,再对第一事务所指示的操作所涉及的数据项中的部分或全部执行上述第一事务所指示的操作。
也就是说,在第一事务所指示的操作为对第一数据库中的第二数据项集合进行操作时,对第二数据项集合中除目标事务所涉及的部分或全部数据项之外的数据项直接执行第一事务所指示的操作;而在目标事务的状态转换为已提交之后,再对第二数据项集合中目标事务所涉及的部分或全部数据项执行第一事务所指示的操作。需要说明的是,在对第二数据项集合中目标事务所涉及的部分或全部数据项执行第一事务所指示的操作之前,还包括:判断部分或全部的数据项是否满足第一事务信息中携带的与操作对应的操作条件,在判断出满足操作条件后,再对部分或全部的数据项中满足操作条件的数据项进行执行第一事务所指示的操作。
例如,当前已开始执行的事务包括:事务1、事务2和事务3,其中,事务1与事务2为目标事务,事务1中所涉及的数据项包括D1、D2、D3、D4及D5,事务2中所涉及的数据项包括D2、D4、D5及D6,第一时刻接收到的第一事务为事务4,其中,事务4中所涉及的数据项包括D1、D2、D4及D7,也就是说,第一事务所涉及的数据项包括目标事务中的部分数据项,即:D1、D2、D4,因而,对上述数据项执行第一事务所指示的操作(例如修改)时,则需等目标事务的状态转换为已完成提交状态后再执行修改操作。
又例如,仍以第一事务所涉及的数据项包括目标事务中的部分数据项,即:D1、D2、D4为例,则在对数据项D1、D2、D4执行第一事务所指示的操作(例如删除)之前,还需判断上述数据项是否满足第一事务信息中携带的与删除操作对应的删除条件,例如,删除条件为对数据所占空间大于2M的数据项进行删除。假设判断出数据项D1、D2满足上述删除条件,则对满足删除条件的数据项D1、D2执行第一事务所指示的删除操作。
通过本申请提供的实施例,在第一事务所指示的操作中包括对目标事务中的部分或全部数据项执行修改操作和删除操作时,需在目标事务的状态转换为已完成提交之后再对上述部分或全部的数据项执行上述修改操作或删除操作,从而避免在第一事务中获取到数据项内容不同的数据所导致的不一致问题。
作为一种可选的方案,还包括:
1)第三处理模块,用于在所述已开始执行的事务中存在所述目标事务,第一事务所指示的操作为对第一数据库中的第一数据项集合执行查询操作时,返回第一数据项集合中除部分或全部之外的数据项的当前信息,并返回第一数据项集合中的部分或全部的数据项的历史信息。
需要说明的是,第一事务所指示的操作为查询操作时,可以返回第一数据项集合中查询得到的除部分或全部之外的数据项的当前信息,也可以返回第一数据项集合中查询得到的部分或全部的数据项的历史信息。,其中,上述查询得到的历史信息可以但不限于包括第一事务所涉及的数据项在执行目标事务之前所完成的最后一次操作的结果信息。
通过本申请提供的实施例,在第一事务所指示的操作中包括对目标事务中的部分或全部数据项执行查询操作时,若已完成当前事务的操作,则返回当前信息,若未完成当前事务的操作,则返回操作之前的历史信息。
作为一种可选的方案,第三处理模块包括:
1)第一处理子模块,用于在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的当前信息。
具体结合以下示例进行说明,图3是根据本发明实施例的数据库的操作方法的流程图,如图3所示,分布式事务隔离级别为可重复读(read repeatable)和序列化(serializable)时,具体过程如下:
步骤S301,协调器节点接收客户端发送的SQL语句块请求;
步骤S302,协调器节点向全局事务管理器请求GXID和当前时刻所有事务的快照;
步骤S303,全局事务管理器把新生成的GXID和事务快照发送给协调器节点;
全局事务管理器接收协调器节点获取新的GXID请求后,生成一个唯一且有序的GXID发送给协调器节点。同时全局事务管理器保存这个新生成的事务的状态信息。
事务快照是指当前时刻整个分布式数据库***中所有的事务以及状态信息,状态包括:正在运行(running)、已提交(committed)、中止(aborted)。
步骤S304,协调器节点把SQL语句块、GXID、事务快照发送给多个数据库服务节点;
协调器把SQL语句发送给多个相关的数据库服务节点,以方便多个数据库服务节点能并行执行SQL查询。
步骤S305,数据库服务节点执行第一条SQL,并根据事务快照进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S306,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
步骤S307,数据库服务节点继续执行下一条SQL,并根据事务快照进行全局一致性读操作;
在事务隔离级别是可重复读(read repeatable)和序列化(serializable)时,根据事务的ACID特性,只需要使用本事务的开始时刻的事务快照来进行数据的全局一致性判断,这个事务快照是通过协调器节点向全局事务管理器申请获取并传递给数据库服务节点的。
步骤S308,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
通过本申请提供的实施例,通过获取当前时刻所有事务的快照来实现数据全局一致性读,即数据库服务节点通过把本身的事务状态和当前时刻的分布式数据库***中所有其他的事务快照进行对比分析,来判断实现数据的全局一致性读。
作为一种可选的方案,第三处理模块包括:
1)第二处理子模块,用于在目标事务的状态转换为已完成提交之后,返回部分或全部的数据项的历史信息。
具体结合以下示例进行说明,图4是根据本发明实施例的数据库的操作方法的流程图,如图4所示,分布式事务隔离级别为已提交读(read committed),具体过程如下:
步骤S401,协调器节点接收客户端发送的SQL语句块请求;
步骤S402,协调器节点向全局事务管理器请求GXID和当前时刻所有事务的快照;
步骤S403,全局事务管理器把新生成的GXID和事务快照发送给协调器节点;
全局事务管理器接收协调器节点获取新的GXID请求后,生成一个唯一且有序的GXID发送给协调器节点。同时全局事务管理器保存这个新生成的事务的状态信息。
事务快照是指当前时刻整个分布式数据库***中所有的事务以及状态信息,状态包括:正在运行(running)、已提交(committed)、中止(aborted)。
步骤S404,协调器节点把SQL语句块、GXID、事务快照发送给多个数据库服务节点;
协调器把SQL语句发送给多个相关的数据库服务节点,以方便多个数据库服务节点能并行执行SQL查询。
步骤S405,数据库服务节点执行第一条SQL,并根据事务快照进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S406,协调器节点汇总所有数据库服务节点执行结果并发送给客户端;
步骤S407,数据库服务节点在执行下一条SQL前,向全局事务管理器请求当前时刻所有事务的快照;
在事务隔离级别是已提交读(read committed)时,根据事务的ACID特性,数据库服务节点在执行当前事务的每一个SQL语句时,都先要向全局事务管理器请求当前时刻整个分布式数据库***所有事务的状态快照。
步骤S408,全局事务管理器把当前时刻事务快照发送给数据库服务节点;
步骤S409,数据库服务节点根据事务快照执行下一条SQL,并进行全局一致性读操作;
数据库服务节点根据当前时刻所有事务的快照信息来判断实现数据的全局一致性读。
步骤S410,协调器节点汇总所有数据库服务节点执行结果并发送给客户端。
上述实施例在事务隔离级别是已提交读(read committed)时,通过获取当前时刻所有事务的快照来实现数据全局一致性读,即数据库服务节点通过把本身的事务状态和当前时刻的分布式数据库***中所有其他的事务快照进行对比分析,来判断实现数据的全局一致性读。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。
实施例3
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,在第一时刻接收第一事务信息和当前事务快照,其中,第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,当前事务快照包括:第一时刻上数据库集合中已开始执行的事务的标识和状态,数据库集合为包括第一数据库在内的一个或多个数据库;
S2,判断标识所指示的已开始执行的事务中是否存在目标事务,其中,目标事务的状态为未完成提交,且目标事务所涉及的数据项包括第一事务所涉及的数据项中的部分或全部;
S3,若已开始执行的事务中存在目标事务,则在第一事务所指示的操作包括删除操作和/或修改操作的情况下,在目标事务的状态转换为已完成提交之后才对第一事务所涉及的数据项中的部分或全部执行第一事务所指示的操作。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种数据库的操作方法,其特征在于,包括:
在第一时刻接收第一事务信息和当前事务快照,其中,所述第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,所述当前事务快照包括:所述第一时刻上数据库集合中已开始执行的事务的标识和状态,所述数据库集合为包括所述第一数据库在内的一个或多个数据库;
判断所述标识所指示的所述已开始执行的事务中是否存在目标事务,其中,所述目标事务的状态为未完成提交,且所述目标事务所涉及的数据项包括所述第一事务所涉及的数据项中的部分或全部;
若所述已开始执行的事务中存在所述目标事务,则在所述第一事务所指示的操作包括删除操作和/或修改操作的情况下,在所述目标事务的状态转换为已完成提交之后才对所述第一事务所涉及的数据项中的所述部分或全部执行所述第一事务所指示的操作。
2.根据权利要求1所述的方法,其特征在于,所述判断所述标识所指示的所述已开始执行的事务中是否存在目标事务包括:
在所述已开始执行的事务中的当前事务对所述数据库集合中的当前数据库执行所述当前事务所指示的操作的情况下,判断所述当前事务是否在每个所述当前数据库上都已完成提交,其中,所述当前数据库为一个或多个数据库;
若判断出所述当前事务并未在每个所述当前数据库上都已完成提交,则将所述当前事务的状态设置为未完成提交;
判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行所述第一事务所指示的操作的数据项中的部分或全部;
若包括执行所述第一事务所指示的操作的数据项中的部分或全部,则将所述当前事务作为所述目标事务之一,并判断出存在所述目标事务。
3.根据权利要求1所述的方法,其特征在于,在所述目标事务的状态转换为已完成提交之后才对所述第一事务所涉及的数据项中的所述部分或全部执行所述第一事务所指示的操作包括以下至少之一:
在所述第一事务所指示的操作为对所述第一数据库中的第二数据项集合执行所述删除操作时,将所述第二数据项集合中除所述部分或全部之外的数据项进行删除,并在所述目标事务的状态转换为已完成提交之后对所述部分或全部的数据项进行删除;
在所述第一事务所指示的操作为对所述第一数据库中的第二数据项集合执行所述删除操作时,将所述第二数据项集合中除所述部分或全部之外的数据项进行删除,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述删除操作对应的删除条件,对所述部分或全部的数据项中满足所述删除条件的数据项进行删除;
在所述第一事务所指示的操作为对所述第一数据库中的第三数据项集合执行所述修改操作时,对所述第三数据项集合中除所述部分或全部之外的数据项执行所述修改操作,并在所述目标事务的状态转换为已完成提交之后对所述部分或全部的数据项执行所述修改操作;
在所述第一事务所指示的操作为对所述第一数据库中的第三数据项集合执行所述修改操作时,对所述第三数据项集合中除所述部分或全部之外的数据项执行所述修改操作,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述修改操作对应的修改条件,对所述部分或全部的数据项中满足所述修改条件的数据项执行所述修改操作。
4.根据权利要求1所述的方法,其特征在于,若所述已开始执行的事务中存在所述目标事务,则所述方法还包括:
在所述第一事务所指示的操作为对所述第一数据库中的第一数据项集合执行查询操作时,返回所述第一数据项集合中除所述部分或全部之外的数据项的当前信息,并返回所述第一数据项集合中的所述部分或全部的数据项的历史信息。
5.根据权利要求4所述的方法,其特征在于,在返回所述第一数据项集合中除所述部分或全部之外的数据项的当前信息包括:
在所述目标事务的状态转换为已完成提交之后,返回所述部分或全部的数据项的当前信息。
6.根据权利要求4所述的方法,其特征在于,在返回所述第一数据项集合中的所述部分或全部的数据项的历史信息包括:
在所述目标事务的状态转换为已完成提交之后,返回所述部分或全部的数据项的所述历史信息。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述数据库集合中的数据库为分布式数据库。
8.一种数据库的操作装置,其特征在于,所述装置包括:
接收单元,用于在第一时刻接收第一事务信息和当前事务快照,其中,所述第一事务信息用于指示至少对第一数据库执行第一事务所指示的操作,所述当前事务快照包括:所述第一时刻上数据库集合中已开始执行的事务的标识和状态,所述数据库集合为包括所述第一数据库在内的一个或多个数据库;
判断单元,用于判断所述标识所指示的所述已开始执行的事务中是否存在目标事务,其中,所述目标事务的状态为未完成提交,且所述目标事务所涉及的数据项包括所述第一事务所涉及的数据项中的部分或全部;
处理单元,用于在所述已开始执行的事务中存在所述目标事务时,在所述第一事务所指示的操作包括删除操作和/或修改操作的情况下,在所述目标事务的状态转换为已完成提交之后才对所述第一事务所涉及的数据项中的所述部分或全部执行所述第一事务所指示的操作。
9.根据权利要求8所述的装置,其特征在于,所述判断单元包括:
第一判断模块,用于在所述已开始执行的事务中的当前事务对所述数据库集合中的当前数据库执行所述当前事务所指示的操作的情况下,判断所述当前事务是否在每个所述当前数据库上都已完成提交,其中,所述当前数据库为一个或多个数据库;
设置模块,用于在判断出所述当前事务并未在每个所述当前数据库上都已完成提交时,将所述当前事务的状态设置为未完成提交;
第二判断模块,用于判断执行未完成提交的当前事务所指示的操作的数据项是否包括执行所述第一事务所指示的操作的数据项中的部分或全部;
确定模块,用于在判断出包括执行所述第一事务所指示的操作的数据项中的部分或全部时,将所述当前事务作为所述目标事务之一,并判断出存在所述目标事务。
10.根据权利要求8所述的装置,其特征在于,所述处理单元包括以下至少之一:
第一处理模块,用于在所述第一事务所指示的操作为对所述第一数据库中的第二数据项集合执行所述删除操作时,将所述第二数据项集合中除所述部分或全部之外的数据项进行删除,并在所述目标事务的状态转换为已完成提交之后对所述部分或全部的数据项进行删除;或者,在所述第一事务所指示的操作为对所述第一数据库中的第二数据项集合执行所述删除操作时,将所述第二数据项集合中除所述部分或全部之外的数据项进行删除,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述删除操作对应的删除条件,对所述部分或全部的数据项中满足所述删除条件的数据项进行删除;
第二处理模块,用于在所述第一事务所指示的操作为对所述第一数据库中的第三数据项集合执行所述修改操作时,对所述第三数据项集合中除所述部分或全部之外的数据项执行所述修改操作,并在所述目标事务的状态转换为已完成提交之后对所述部分或全部的数据项执行所述修改操作;或者,在所述第一事务所指示的操作为对所述第一数据库中的第三数据项集合执行所述修改操作时,对所述第三数据项集合中除所述部分或全部之外的数据项执行所述修改操作,并在所述目标事务的状态转换为已完成提交之后判断所述部分或全部的数据项是否满足所述第一事务信息中携带的与所述修改操作对应的修改条件,对所述部分或全部的数据项中满足所述修改条件的数据项执行所述修改操作。
11.根据权利要求8所述的装置,其特征在于,还包括:
第三处理模块,用于在所述已开始执行的事务中存在所述目标事务,所述第一事务所指示的操作为对所述第一数据库中的第一数据项集合执行查询操作时,返回所述第一数据项集合中除所述部分或全部之外的数据项的当前信息,并返回所述第一数据项集合中的所述部分或全部的数据项的历史信息。
12.根据权利要求11所述的装置,其特征在于,所述第三处理模块包括:
第一处理子模块,用于在所述目标事务的状态转换为已完成提交之后,返回所述部分或全部的数据项的当前信息。
13.根据权利要求11所述的装置,其特征在于,所述第三处理模块包括:
第二处理子模块,用于在所述目标事务的状态转换为已完成提交之后,返回所述部分或全部的数据项的所述历史信息。
14.根据权利要求8至13中任一项所述的装置,其特征在于,所述数据库集合中的数据库为分布式数据库。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510675583.2A CN106598992B (zh) | 2015-10-15 | 2015-10-15 | 数据库的操作方法及装置 |
PCT/CN2016/101464 WO2017063520A1 (zh) | 2015-10-15 | 2016-10-08 | 数据库的操作方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510675583.2A CN106598992B (zh) | 2015-10-15 | 2015-10-15 | 数据库的操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598992A true CN106598992A (zh) | 2017-04-26 |
CN106598992B CN106598992B (zh) | 2020-10-23 |
Family
ID=58517765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510675583.2A Active CN106598992B (zh) | 2015-10-15 | 2015-10-15 | 数据库的操作方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106598992B (zh) |
WO (1) | WO2017063520A1 (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628666A (zh) * | 2018-05-08 | 2018-10-09 | 腾讯科技(上海)有限公司 | 事务的处理方法、装置、存储介质及电子装置 |
WO2018223262A1 (zh) * | 2017-06-05 | 2018-12-13 | 华为技术有限公司 | 一种事务处理方法、装置及设备 |
CN109271398A (zh) * | 2018-10-29 | 2019-01-25 | 东软集团股份有限公司 | 数据库事务处理方法、装置、设备和计算机可读存储介质 |
CN109408201A (zh) * | 2017-08-18 | 2019-03-01 | ***股份有限公司 | 基于分布式数据库的事务管理方法 |
CN109710388A (zh) * | 2019-01-09 | 2019-05-03 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
CN110765178A (zh) * | 2019-10-18 | 2020-02-07 | 京东数字科技控股有限公司 | 分布式事务的处理方法及装置、计算机可存储介质 |
CN111143389A (zh) * | 2019-12-27 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN111159585A (zh) * | 2018-11-07 | 2020-05-15 | ***通信集团重庆有限公司 | 自动提交数据的方法、装置、设备及介质 |
CN111433764A (zh) * | 2017-12-06 | 2020-07-17 | 华为技术有限公司 | 全局一致分片式oltp***的高吞吐量分布式事务管理及其实现方法 |
CN112231144A (zh) * | 2020-09-29 | 2021-01-15 | 上海艾融软件股份有限公司 | 一种数据处理方法、装置及电子设备 |
WO2021036768A1 (zh) * | 2019-08-27 | 2021-03-04 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、计算机设备及存储介质 |
WO2021120995A1 (zh) * | 2019-12-16 | 2021-06-24 | 中兴通讯股份有限公司 | 数据库的数据同步方法、装置以及存储介质 |
CN113821382A (zh) * | 2021-11-24 | 2021-12-21 | 西安热工研究院有限公司 | 一种实时数据库数据处理方法、***和设备 |
CN113868278A (zh) * | 2021-09-29 | 2021-12-31 | 北京有竹居网络技术有限公司 | 一种数据处理方法、装置及设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112100208A (zh) * | 2020-09-08 | 2020-12-18 | 北京金山云网络技术有限公司 | 一种操作请求的转发方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102317913A (zh) * | 2011-07-30 | 2012-01-11 | 华为技术有限公司 | 一种事务恢复方法和事务恢复装置 |
CN103559245A (zh) * | 2013-10-29 | 2014-02-05 | 华为技术有限公司 | 一种分布式事务提交故障的处理方法、装置和*** |
US20140372394A1 (en) * | 2013-06-12 | 2014-12-18 | Amir Frankel | System, method and a non-transitory computer readable medium for transaction aware snapshot |
CN104885054A (zh) * | 2013-03-13 | 2015-09-02 | 华为技术有限公司 | 大规模并行处理数据库中执行事务的***和方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2845312A1 (en) * | 2011-08-01 | 2013-02-07 | Tagged, Inc. | Systems and methods for asynchronous distributed database management |
CN103036717B (zh) * | 2012-12-12 | 2015-11-04 | 北京邮电大学 | 分布式数据的一致性维护***和方法 |
CN103995868B (zh) * | 2014-05-20 | 2017-07-21 | 科大国创软件股份有限公司 | 面向分布式***的全局事务管理器及事务处理方法 |
CN104504130A (zh) * | 2014-12-31 | 2015-04-08 | 天津南大通用数据技术股份有限公司 | 应用于分布式数据库的解决2pc模型单点故障问题的方法 |
-
2015
- 2015-10-15 CN CN201510675583.2A patent/CN106598992B/zh active Active
-
2016
- 2016-10-08 WO PCT/CN2016/101464 patent/WO2017063520A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102317913A (zh) * | 2011-07-30 | 2012-01-11 | 华为技术有限公司 | 一种事务恢复方法和事务恢复装置 |
CN104885054A (zh) * | 2013-03-13 | 2015-09-02 | 华为技术有限公司 | 大规模并行处理数据库中执行事务的***和方法 |
US20140372394A1 (en) * | 2013-06-12 | 2014-12-18 | Amir Frankel | System, method and a non-transitory computer readable medium for transaction aware snapshot |
CN103559245A (zh) * | 2013-10-29 | 2014-02-05 | 华为技术有限公司 | 一种分布式事务提交故障的处理方法、装置和*** |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018223262A1 (zh) * | 2017-06-05 | 2018-12-13 | 华为技术有限公司 | 一种事务处理方法、装置及设备 |
CN109408201B (zh) * | 2017-08-18 | 2022-07-12 | ***股份有限公司 | 基于分布式数据库的事务管理方法 |
CN109408201A (zh) * | 2017-08-18 | 2019-03-01 | ***股份有限公司 | 基于分布式数据库的事务管理方法 |
CN111433764B (zh) * | 2017-12-06 | 2023-10-13 | 华为技术有限公司 | 全局一致分片式oltp***的高吞吐量分布式事务管理及其实现方法 |
CN111433764A (zh) * | 2017-12-06 | 2020-07-17 | 华为技术有限公司 | 全局一致分片式oltp***的高吞吐量分布式事务管理及其实现方法 |
CN108628666A (zh) * | 2018-05-08 | 2018-10-09 | 腾讯科技(上海)有限公司 | 事务的处理方法、装置、存储介质及电子装置 |
CN108628666B (zh) * | 2018-05-08 | 2023-11-14 | 腾讯科技(上海)有限公司 | 事务的处理方法、装置、存储介质及电子装置 |
CN109271398B (zh) * | 2018-10-29 | 2020-06-23 | 东软集团股份有限公司 | 数据库事务处理方法、装置、设备和计算机可读存储介质 |
CN109271398A (zh) * | 2018-10-29 | 2019-01-25 | 东软集团股份有限公司 | 数据库事务处理方法、装置、设备和计算机可读存储介质 |
CN111159585A (zh) * | 2018-11-07 | 2020-05-15 | ***通信集团重庆有限公司 | 自动提交数据的方法、装置、设备及介质 |
CN111159585B (zh) * | 2018-11-07 | 2023-09-22 | ***通信集团重庆有限公司 | 自动提交数据的方法、装置、设备及介质 |
CN109710388A (zh) * | 2019-01-09 | 2019-05-03 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
CN109710388B (zh) * | 2019-01-09 | 2022-10-21 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
US11822540B2 (en) | 2019-08-27 | 2023-11-21 | Tencent Technology (Shenzhen) Company Limited | Data read method and apparatus, computer device, and storage medium |
WO2021036768A1 (zh) * | 2019-08-27 | 2021-03-04 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、计算机设备及存储介质 |
CN110765178A (zh) * | 2019-10-18 | 2020-02-07 | 京东数字科技控股有限公司 | 分布式事务的处理方法及装置、计算机可存储介质 |
WO2021120995A1 (zh) * | 2019-12-16 | 2021-06-24 | 中兴通讯股份有限公司 | 数据库的数据同步方法、装置以及存储介质 |
US11836154B2 (en) | 2019-12-16 | 2023-12-05 | Xi'an Zhongxing New Software Co., Ltd. | Data synchronization method and device for databases, and storage medium |
CN111143389B (zh) * | 2019-12-27 | 2022-08-05 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN111143389A (zh) * | 2019-12-27 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN112231144A (zh) * | 2020-09-29 | 2021-01-15 | 上海艾融软件股份有限公司 | 一种数据处理方法、装置及电子设备 |
CN113868278B (zh) * | 2021-09-29 | 2023-08-01 | 北京有竹居网络技术有限公司 | 一种数据处理方法、装置及设备 |
CN113868278A (zh) * | 2021-09-29 | 2021-12-31 | 北京有竹居网络技术有限公司 | 一种数据处理方法、装置及设备 |
CN113821382B (zh) * | 2021-11-24 | 2022-03-01 | 西安热工研究院有限公司 | 一种实时数据库数据处理方法、***和设备 |
CN113821382A (zh) * | 2021-11-24 | 2021-12-21 | 西安热工研究院有限公司 | 一种实时数据库数据处理方法、***和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106598992B (zh) | 2020-10-23 |
WO2017063520A1 (zh) | 2017-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598992A (zh) | 数据库的操作方法及装置 | |
EP2932370B1 (en) | System and method for performing a transaction in a massively parallel processing database | |
CN110224899B (zh) | 一种tcp应用的调用链获取方法及装置 | |
CN111897638A (zh) | 分布式任务调度方法及*** | |
CN104809130A (zh) | 数据查询的方法、设备及*** | |
CN106570027A (zh) | 一种事务型任务处理方法及装置 | |
CN110427427B (zh) | 一种通过引脚桥接实现全局事务分布式处理方法 | |
US9949061B2 (en) | Fault management method and apparatus | |
US10033737B2 (en) | System and method for cross-cloud identity matching | |
CN107463391A (zh) | 任务处理方法、装置及设备 | |
CN115495473A (zh) | 数据库查询方法、装置、电子设备和存储介质 | |
CN109271869B (zh) | 人脸特征值提取方法、装置、计算机设备及存储介质 | |
CN107465725B (zh) | 基于客户信息控制***的异构长事务处理***及方法 | |
CN107247784A (zh) | 一种分布式事务的控制方法及事务管理器 | |
CN111008220A (zh) | 数据源的动态识别方法及装置、存储介质和电子装置 | |
CN110019456B (zh) | 数据导入方法、装置和*** | |
CN110347659A (zh) | 数据处理方法和装置、交易数据处理方法和装置 | |
CN109901933B (zh) | 业务***的操作方法及装置、存储介质、电子装置 | |
CN112711466B (zh) | 悬挂事务巡检方法和装置、电子设备和存储介质 | |
CN108924184A (zh) | 数据处理方法和服务器 | |
CN115361382A (zh) | 基于数据群组的数据处理方法、装置、设备和存储介质 | |
CN110033145B (zh) | 财务共享作业分单方法及装置、设备和存储介质 | |
US8799318B2 (en) | Function module leveraging fuzzy search capability | |
CN107124293B (zh) | 一种分布式网络***的协议管理方法及*** | |
CN107102901A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200904 Address after: 210012 Nanjing, Yuhuatai District, South Street, Bauhinia Road, No. 68 Applicant after: Nanjing Zhongxing Software Co.,Ltd. Address before: 518057 Nanshan District science and technology, Guangdong Province, South Road, No. 55, No. Applicant before: ZTE Corp. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |