假设在某台机器上运行的进程P有一些数据X
必须保存在MySql_X(在不同的机器上)和一些必须保存在Mysql_Y中的数据Y
(在另一台机器上)机)。如何保证同时保存X
和Y
,或者两者都不保存?什么是算法?
例如(在愚蠢的伪代码中):
X_transaction = MySql_X.startTransaction(save(X)) //returns null if failure to start transaction
Y_transaction = MySql_Y.startTransaction(save(Y))
if X_transaction && Y_transaction {
X_transaction.commit()
// what if failure happened here?
Y_transaction.commit()
}
这显然不起作用。因为失败可能发生在上面提到的那一行的P或MySql_Y中,然后只会保存X.