35

分布式事务的维基百科文章不是很有帮助。

您能否给出有关分布式事务是什么的更多详细信息的高级描述?

另外,您能否举例说明为什么应用程序或数据库应该执行更新两台或多台联网计算机上的数据的事务?

我了解经典的银行示例;我更关心 Dynamo、Bigtable、HBase 或 Cassandra 等 Web 规模数据库中的分布式事务。

4

6 回答 6

36

通常,事务发生在一台数据库服务器上:

BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT

分布式事务涉及多个服务器:

BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT

困难在于服务器必须进行通信以确保两台服务器都满足事务属性(如原子性):如果事务成功,则必须在两台服务器上更新值。如果事务失败,则必须在两台服务器上回滚事务。决不能发生值在一台服务器上更新但在另一台服务器上未更新的情况。

于 2010-11-18T16:46:41.513 回答
14

分布式事务跨越多个物理系统,而标准事务则不然。系统之间的同步成为标准交易中传统上不存在的需求。

从您的维基百科参考...

...分布式事务可以被视为必须在分布在不同物理位置的多个参与数据库之间同步(或提供 ACID 属性)的数据库事务...

于 2010-11-18T16:44:49.987 回答
7

分布式事务是跨多台计算机工作的事务。假设您在计算机 A 上的程序中以某种方法启动事务。然后您在计算机 A 上对方法中的数据进行一些更改,然后该方法调用计算机 B 上的 Web 服务。计算机 B 上的 Web 服务方法失败并且回滚事务。由于事务是分布式的,这意味着在计算机 A 上所做的任何更改也需要回滚。Windows 上的分布式事务协调器和 .net 框架的组合促进了此功能。

于 2010-11-18T16:46:20.363 回答
2

我试图在这篇文章中显示分布式事务的详细信息分布式(XA)事务的性能调整 - 如何?

分布式事务的好数据是对一致性要求非常高的数据。通常这是金钱或其他东西,我们永远不会拥有过时的数据。我通常定义两类实时数据和不立即需要正确性/一致性的数据。

现在是关于 Dynamo、Bigtable、HBase 或 Cassandra的问题的第二部分。

你不能在 NOSQL 数据库和分布式事务之间画一个平行线。这类数据库的存在被证明是避免分布式事务的一种手段。分布式事务以一致性为中心。这与以可用性和分区为中心的 NOSQL 存储完全相反。

此类数据库中使用的通常事务模型是最终一致性。

于 2018-03-05T13:32:48.557 回答
1

分布式事务是分布式数据库上的事务(即,数据存储在多个物理上独立的系统上的事务)。值得注意的是,其中涉及相当多的复杂性(尤其是在通信中),以确保所有机器保持一致,因此要么整个交易成功,要么看起来什么都没有发生。

于 2010-11-18T16:48:13.047 回答
0

通常,一个分布式事务涉及多个物理服务器。有两类分布式事务:

  1. 更新分布式数据库中的数据,这是一个逻辑数据库,但将数据存储在多个物理服务器中。例如 Google 的 Spanner,或 PingCAP 的 TiDB。在这些情况下,DB系统负责分布式事务,开发人员不需要关心。

  2. 更新多个数据库或多个服务中的数据。在微服务的背景下,优惠券、账户、支付等可能是您订单系统的独立服务。在这种情况下,开发者应该确保更新的原子性。如果事务成功,则必须在两台服务器上更新值。如果事务失败,则必须在两台服务器上回滚事务。决不能发生值在一台服务器上更新但在另一台服务器上未更新的情况。本文对分布式事务管理最经典的七种解决方案进行了深入探讨

于 2021-10-12T07:58:35.930 回答