[发明专利]一种应用层的数据库事务实现方法和系统有效
申请号: | 202210251737.5 | 申请日: | 2022-03-15 |
公开(公告)号: | CN114579604B | 公开(公告)日: | 2022-09-20 |
发明(设计)人: | 杨万勇;杨耀庭;华健;张兵 | 申请(专利权)人: | 北京梦诚科技有限公司 |
主分类号: | G06F16/242 | 分类号: | G06F16/242;G06F16/2453;G06F16/27 |
代理公司: | 北京金信知识产权代理有限公司 11225 | 代理人: | 贾然 |
地址: | 100080 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 应用 数据库 事务 实现 方法 系统 | ||
1.一种应用层的数据库事务实现方法,所述数据库为不支持多行事务的关系型数据库,其特征在于,所述方法包括:
步骤S1、在应用层与原数据库连接之间实现一层代理,即构建一层代理层,在所述代理层里处理事务相关的处理逻辑;
步骤S2、当开启事务时,所述代理层生成一个与所述事务相关的标识,记录事务进行的信息;
步骤S3、当所述事务开启的过程中,所述代理层通过在原数据库中创建一个特殊的数据存储区,命名为事务库,每生成一张业务表的时候会在所述数据存储区中同样创建一张相同的业务表,命名为事务库业务表,达到对事务外的连接客户端查询隔离;
具体方法包括:给所述事务库业务表增加两个特殊的字段,第一字段和第二字段,新的表的主键被改写为所述第一字段和原业务表的主键拼在一起的联合主键;所述第一字段表示所属事务的标识;所述第二字段表示该记录经过一次或多次操作后,最终生效的操作;数据提交的时候经过所述代理层会把原来对原数据库的业务库的sql操作改成对事务库中相关表的操作;
所述第二字段的值为一个枚举,选择项为upsert、insert、delete和update;
所述把原来对原数据库的业务库的sql操作改成对事务库中相关表的操作的具体方法包括:
对原数据库的增加操作的改写是直接改写成插入到事务库;
对原数据库的删除操作改写时,为了保存删除前的状态,需要将数据从业务库中复制一份到所述事务库里;
对原数据库的修改的操作,需要从业务库中把要修改的记录提取出来,把需要修改的字段的值改掉,再写入所述事务库里,保存的记录里包含了两条数据,一条原始状态,一条是操作后的状态;
步骤S4、所述事务开始提交后,所述代理层会先把所述事务的状态标记为COMMITING,表示所述事务正在提交过程中;如果提交成功,接着把所述事务的状态标记为COMMITTED,表示提交完成,并且成功;如果提交失败,把事务状态标记的状态为COMMIT_ERROR此时会立即启动回滚动作,保证事务一致性/原子性。
2.根据权利要求1所述的一种应用层的数据库事务实现方法,其特征在于,在所述步骤S2中,所述事务进行的信息包括:
事务进行的时间、修改了哪些业务表和事务的状态。
3.根据权利要求2所述的一种应用层的数据库事务实现方法,其特征在于,在所述步骤S4中,所述如果提交失败,所述方法还包括:
检查当前提交过程实际修改了哪几张业务表,然后从事务库中提取缓存的原始数据写回去,直到恢复成最新状态为止。
4.根据权利要求3所述的一种应用层的数据库事务实现方法,其特征在于,在所述步骤S4中,所述回滚动作具体包括:
所述应用层主动发起回滚操作时,所述代理层会先把事务的状态标记为ROLLBACK,同时把事务库中的数据清理掉;
所述保证事务一致性/原子性的方法还包括:
事务超时处理:当所述代理层检查到某个事务超时了,会把所述事务的状态标记为TIMEOUT,此时再执行与所述事务相关的操作都会获取到事务超时的异常信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京梦诚科技有限公司,未经北京梦诚科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210251737.5/1.html,转载请声明来源钻瓜专利网。