什么是“分布式交易”?

时间:2010-11-18 16:38:53

标签: database commit distributed-transactions xa

维基百科对Distributed transaction的文章不是很有帮助。

您能否对分布式事务的内容进行高级描述?

另外,您能举例说明为什么应用程序或数据库应该执行更新两台或多台联网计算机上的数据的事务吗?我理解了经典的银行例子;我更关心像Dynamo,Bigtable,HBase或Cassandra这样的Web级数据库中的分布式事务。

5 个答案:

答案 0 :(得分:26)

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

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

困难来自于服务器必须通信以确保在两台服务器上都满足 atomicity 等事务属性:如果事务成功,则值必须在两台服务器上更新。如果事务失败,则必须在两台服务器上回滚事务。绝不应该在一台服务器上更新值,而在另一台服务器上不更新。

答案 1 :(得分:11)

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

来自您的维基百科参考...

  

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

答案 2 :(得分:5)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我已尝试在此帖How would you tune Distributed ( XA ) transaction for performance?

中描述分布式交易详情

对分布式事务有利的数据是对一致性要求很高的数据。通常这是金钱或其他我们永远不会有陈旧数据的东西。 Usualy我定义了两个类别实时数据和数据,没有正确性/一致性的中间需要。

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

您无法在NOSQL数据库和分布式事务之间绘制并行。这类数据库的存在是合理的,可以作为避免分布式事务的一种手段。分布式事务以一致性为中心。这与NOSQL存储完全相同,它以可用性和分区为中心。

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

相关问题