用于在异构数据源之间启用事务的通用API

时间:2013-06-11 06:52:05

标签: transactions distributed-transactions

许多使用多个事务数据源的项目可能需要跨这些数据源的某种分布式事务来获得一致的数据视图。事务数据源提供哪些最常见的原语以允许将它们添加到异构事务系统中?

如果你需要一个特定的例子,假设我有一个可以制作快照的事务文件系统,以及一个带有检查点的预写日志的事务数据库,它们可以在不同的机器上运行。如何通过快照/检查点以协调的方式确保我获得两者的一致视图?在数据源之外实现某种形式的两阶段提交是正常的方法,或者数据源本身是否通常提供一些API来使两阶段提交更容易正确实现?

1 个答案:

答案 0 :(得分:0)

因此,对于“扩展体系结构”,我所询问的术语显然是XA,其中事务可能跨越多个数据源。

根据维基百科的文章,许多数据存储实现的XA标准使用两阶段提交。我认为这主要是由数据库实现的,并且似乎在Oracle / SQLServer / DB2 / PostgreSQL中,可能还有其他。文件系统似乎没有将这个原语暴露给用户级应用程序,尽管它们中的一些可能会这样做。

你也可以使用不同的共识协议(三阶段提交/ Paxos是最常见的)但实际上很少有系统可以访问它,所以两阶段提交是你最好的选择。