2010-11-18 94 views
15

维基百科对Distributed transaction的文章不是很有帮助。什么是“分布式事务”?

您可以对分布式事务的内容给出高级描述吗?

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

+0

您是否了解(“正常”)交易是什么? – 2010-11-18 16:46:36

+1

'@Matt Ball:'Yessir!这个问题是关于*分布式*交易。 – Zombie 2010-11-18 16:49:21

回答

10

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

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

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

+0

+1。对我来说ACID本身就是一个定义。 – Dunaril 2011-02-23 14:54:40

4

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

19

通常情况下,交易一个数据库服务器上发生:

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 

的困难来自于一个事实,即服务器必须沟通到确保在两台服务器上满足交易属性,例如原子性:如果事务成功,则必须在两台服务器上更新这些值。如果事务失败,则必须在两台服务器上回滚事务。一定不会发生这样的情况:值在一台服务器上更新,但未在另一台上更新。

1

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

0

我已经tryed描绘在这个岗位How would you tune Distributed (XA) transaction for performance?

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

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

您不能在NOSQL数据库和分布式事务之间绘制并列。这类数据库的存在是合理的,作为避免分布式事务的手段。分布式事务集中于一致性。对于以可用性和分区为中心的NOSQL存储来说,这恰恰相反。

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

+0

@Mogsdad现在好多了吗? – 2018-03-05 13:33:56