iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何进行分库分表中多数据源的事务处理
  • 901
分享到

如何进行分库分表中多数据源的事务处理

2024-04-02 19:04:59 901人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何进行分库分表中多数据源的事务处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。系统经sharding改造之后,原来单一的数据库会演变

这期内容当中小编将会给大家带来有关如何进行分库分表中多数据源的事务处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题。总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务、基于Best  Efforts 1PC模式的事务以及事务补偿机制。我们下面对这三种处理方式一一进行分析。

分布式事务

这是最为人们所熟知的多数据源事务处理机制。本文并不打算对分布式事务做过多介绍,读者可参考此文:关于分布式事务、两阶段提交、一阶段提交、Best  Efforts 1PC模式和事务补偿机制的研究 。在这里只想对分布式事务的利弊作一下分析。

优势:

1. 基于两阶段提交,最大限度地保证了跨数据库操作的“原子性”,是分布式系统下最严格的事务实现方式。

2.  实现简单,工作量小。由于多数应用服务器以及一些独立的分布式事务协调器做了大量的封装工作,使得项目中引入分布式事务的难度和工作量基本上可以忽略不计。

劣势:

系统“水平”伸缩的死敌。基于两阶段提交的分布式事务在提交事务时需要在多个节点之间进行协调,***限度地推后了提交事务的时间点,客观上延长了事务的执行时间,这会导致事务在访问共享资源时发生冲突和死的概率增高,随着数据库节点的增多,这种趋势会越来越严重,从而成为系统在数据库层面上水平伸缩的”枷锁”,  这是很多Sharding系统不采用分布式事务的主要原因。

基于Best Efforts 1PC模式的事务

与分布式事务采用的两阶段提交不同,Best Efforts  1PC模式采用的是一阶段端提交,牺牲了事务在某些特殊情况(当机、网络中断等)下的安全性,却获得了良好的性能,特别是消除了对水平伸缩的桎酷。Distributed  transactions in spring, with and without XA一文对Best Efforts  1PC模式进行了详细的说明,该文提供的Demo代码更是直接给出了在Spring环境下实现一阶段提交的多数据源事务管理示例。不过需要注意的是,原示例是基于spring  3.0之前的版本,如果你使用spring 3.0+,会得到如下错误:java.lang.IllegalStateException: Cannot  activate transaction synchronization – already active,如果使用spring  3.0+,你需要参考spring-data-neo4j的实现。鉴于Best Efforts  1PC模式的性能优势,以及相对简单的实现方式,它被大多数的sharding框架和项目采用。

事务补偿机制

对于那些对性能要求很高,但对一致性要求并不高的系统,往往并不苛求系统的实时一致性,只要在一个允许的时间周期内达到最终一致性即可,这使得事务补偿机制成为一种可行的方案。事务补偿机制最初被提出是在“长事务”的处理中,但是对于分布式系统确保一致性也有很好的参考意义。笼统地讲,与事务在执行中发生错误后立即回滚的方式不同,事务补偿是一种事后检查并补救的措施,它只期望在一个容许时间周期内得到最终一致的结果就可以了。事务补偿的实现与系统业务紧密相关,并没有一种标准的处理方式。一些常见的实现方式有:对数据进行对帐检查;基于日志进行比对;定期同标准数据来源进行同步,等等。

分布式事务,最严格的事务实现,但性能是个大问题;Best Efforts  1PC模式,性能与事务可靠性的平衡,支持系统水平伸缩,大多数情况下是最合适的选择;事务补偿机制,只能适用于对事务性要求不高,允许数据“最终一致”即可的系统,牺牲实时一致性,获得最大的性能回报。

上述就是小编为大家分享的如何进行分库分表中多数据源的事务处理了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行分库分表中多数据源的事务处理

本文链接: https://www.lsjlt.com/news/67602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行分库分表中多数据源的事务处理
    这期内容当中小编将会给大家带来有关如何进行分库分表中多数据源的事务处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。系统经sharding改造之后,原来单一的数据库会演变...
    99+
    2022-10-19
  • Spring Boot多数据源处理事务实例分析
    这篇“Spring Boot多数据源处理事务实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring&n...
    99+
    2023-06-30
  • JPA多数据源分布式事务处理方案
    目录前言问题背景XA事务方案XADataSource,XA协议数据源XAConnectionXAResource引入Atomikos依赖创建JTA事务管理器MysqlXA事务行为链式...
    99+
    2022-11-13
  • MySQL分表分库如何进行数据切分
    这篇文章主要讲解了“MySQL分表分库如何进行数据切分”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL分表分库如何进行数据切分”吧!数据库分布式核心...
    99+
    2022-10-19
  • 如何使用Python中的数据分析库进行数据处理
    如何使用Python中的数据分析库进行数据处理人们越来越重视数据处理和分析的重要性。随着电子设备的不断普及和互联网的发展,我们每天都会产生大量的数据。要从这些海量的数据中提取有用的信息和洞察,就需要使用强大的工具和技术。Python作为一种...
    99+
    2023-10-22
    Python 数据分析 数据处理
  • 如何进行数据库中间件 MyCAT 源码分析
    这篇文章将为大家详细讲解有关如何进行数据库中间件 MyCAT 源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 概述可能你在看到这个标题会小小的吃...
    99+
    2022-10-19
  • PHP中如何进行数据分析处理?
    PHP是一门广泛应用于Web开发的语言,通常被用来构建动态的Web应用程序。随着数据驱动型应用程序的兴起,PHP在数据分析和处理方面也变得越来越重要。本文将介绍如何使用PHP进行数据分析处理,从数据的获取、存储、分析和可视化展示等方面进行讲...
    99+
    2023-05-14
    数据处理 数据统计 PHP数据分析
  • 数据库中如何按时间及ID进行分区表创建事例
    小编给大家分享一下数据库中如何按时间及ID进行分区表创建事例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Oracle表分区优点:1、 增强可用性:如果表的一个分区由于系统故障而不能使用,...
    99+
    2022-10-18
  • 数据库分库分表之后,你是如何解决事务问题?
    我们需要接受失望,因为它是有限的;我们不会失去希望,因为它是无穷的。 一、概述 随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中...
    99+
    2017-12-10
    数据库分库分表之后,你是如何解决事务问题?
  • springboot+mybatisplus+druid如何实现多数据源+分布式事务
    这篇文章主要介绍springboot+mybatisplus+druid如何实现多数据源+分布式事务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  jdk环境:1.8  springboot:2.1.3.RELEA...
    99+
    2023-06-02
  • PHP中如何进行大数据处理和分析?
    PHP是一种广泛使用的服务器端脚本语言,它被用于web应用程序的开发。对于大量数据的处理和分析,PHP同样具备非常强大的能力。在这篇文章中,我们将探讨如何使用PHP进行大数据处理和分析。PHP的数据类型在处理和分析大数据时,首先需要了解PH...
    99+
    2023-05-21
    数据分析 PHP 大数据处理
  • PHP中如何进行时序数据分析和处理?
    PHP是一种开源的脚本语言,可以用于构建各种类型的网站和应用程序,因此在网站开发和数据分析方面广泛应用。时序数据是指以时间为基础的数据集合,如传感器数据、金融数据等。在处理这些数据时,需要了解PHP中的时序数据分析和处理方式。一、时序数据分...
    99+
    2023-05-22
    分析 处理 时序数据
  • 如何进行NewSQL数据库TiDB的分析
    本篇文章给大家分享的是有关如何进行NewSQL数据库TiDB的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。下面要介绍的是数据库领域的后起...
    99+
    2022-10-19
  • PHP中如何进行大规模数据分析和处理?
    随着互联网和数据化的普及,数据分析和处理已经成为许多企业或网站的核心需求。而PHP作为一门流行的Web开发语言,自然也需要具备相应的数据处理能力。本文将介绍使用PHP进行大规模数据分析和处理的方法和技巧。一、数据存储方式的选择在进行数据分析...
    99+
    2023-05-20
    数据分析 PHP 数据处理
  • 数据库中如何修改分区表的数据
    这篇文章主要为大家展示了“数据库中如何修改分区表的数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库中如何修改分区表的数据”这篇文章吧。  需求...
    99+
    2022-10-18
  • 如何使用PHP进行大数据分析和处理?
    随着互联网和移动设备应用的普及,现在数据的规模越来越大,迅速增长。对于企业和政府机构来说,如何对这些海量的数据进行分析和处理,提取出有价值的信息是一个非常重要的问题。PHP语言是一种广泛应用于Web开发的开源语言。尽管它被广泛用作Web编程...
    99+
    2023-05-21
    PHP 处理 大数据分析
  • 如何使用Sharding-JDBC对数据进行分片处理
    如何使用Sharding-JDBC对数据进行分片处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言Sharding-JDBC是ShardingSphere的...
    99+
    2023-06-25
  • 如何使用Python中的NumPy库进行大数据分析和自然语言处理?
    Python中的NumPy库是一个开源的科学计算库,提供了高性能的多维数组对象以及用于处理这些数组的各种函数。NumPy库被广泛地应用于数据分析、机器学习、自然语言处理等领域,因为它能够处理大规模的数据集并提供高效的计算方法。 本文将介绍如...
    99+
    2023-09-13
    自然语言处理 大数据 numy
  • 分布式系统中的 NumPy:如何利用 Python 库进行大规模数据处理?
    NumPy 是一个开源的 Python 库,用于科学计算和数据分析。它提供了高效的多维数组对象、数学函数库以及各种工具,可以用于大规模数据处理、数值计算、机器学习等领域。在分布式系统中,NumPy 可以帮助我们处理大规模数据集,提高数据处...
    99+
    2023-10-30
    分布式 numy ide
  • MySQL中数据源管理和关系型分库分表以及列式库分布式计算分别指的是什么
    这篇文章将为大家详细讲解有关MySQL中数据源管理和关系型分库分表以及列式库分布式计算分别指的是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、数据拆...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作