关于Distributed transaction的维基百科文章不是很有帮助。
您能否对分布式事务的内容进行高级描述?
另外,您能举例说明为什么应用程序或数据库应该执行更新两台或多台联网计算机上的数据的事务吗?我理解了经典的银行例子;我更关心像Dynamo,Bigtable,HBase或Cassandra这样的Web规模数据库中的分布式事务。
通常,事务发生在一个数据库服务器上:
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
困难来自于服务器必须进行通信以确保在两个服务器上都满足诸如原子性之类的事务属性的事实:如果事务成功,则必须在两个服务器上更新这些值。如果事务失败,则必须在两台服务器上回滚事务。绝不能在一台服务器上更新值,而在另一台服务器上不更新。
分布式事务跨越多个物理系统,而标准事务则不跨越。系统之间的同步成为传统上不存在于标准事务中的需要。
来自您的维基百科参考...
...分布式事务可以看作是必须在多个参与数据库之间同步(或提供ACID属性)的数据库事务,这些数据库分布在不同的物理位置之间......
分布式事务是跨多台计算机工作的事务。假设您在计算机A上的程序中以某种方法启动事务。然后在计算机A上的方法中对数据进行一些更改,之后该方法在计算机B上调用Web服务。计算机B上的Web服务方法失败,推回交易。由于事务是分布式的,这意味着在计算机A上进行的任何更改也需要回滚。 Windows上的分布式事务协调器和.net框架的组合有助于实现此功能。
分布式事务是分布式数据库上的事务(即,数据存储在多个物理上分离的系统上的事务)。值得注意的是,因为确保所有机器保持一致,所以涉及到相当大的复杂性(特别是在通信中),因此要么整个交易成功,要么看起来根本没有发生任何事情。
我试图在这篇文章qazxsw poi中描述分布式事务的详细信息
适用于分布式事务的数据是对一致性要求很高的数据。通常这是金钱或其他我们永远不会有陈旧数据的东西。 Usualy我定义了两个类别实时数据和数据,没有正确性/一致性的中间需求。
现在关于Dynamo,Bigtable,HBase或Cassandra问题的第二部分。
您无法在NOSQL数据库和分布式事务之间绘制并行。这类数据库的存在是合理的,可以作为避免分布式事务的一种手段。分布式事务以一致性为中心。对于NOSQL存储而言,这是非常相反的,它以可用性和分区为中心。
此类数据库中使用的常用事务模型是最终一致性。