跨多个数据库的PDO事务,是否可能?

时间:2013-10-15 18:52:08

标签: php mysql pdo

我的一个用户遇到以下问题:他们在两个不同的位置有两个商店,每个地方都有自己的数据库,但是,他们需要共享客户群和注册销售的材料列表。目前,我们所做的是当客户注册新客户端时,在另一个位置的数据库上进行复制。由于互联网连接不稳定,问题很快就会出现。如果在注册时互联网出现故障,它会尝试复制,失败并携带不一致的数据库。

我考虑通过管理这两个数据库的Pdo事务对数据库进行更新,但似乎每个数据库都需要一个新的PDO $dbh1= new PDO('mysql:host=xxxx;dbname=test',$user,$pass);实例,而我看不到提交两个更新。看看这个相关的问题what is the best way to do distributed transactions across multiple databases,似乎我需要一些用于转换管理。这可以通过PDO实现吗?

2 个答案:

答案 0 :(得分:2)

不,PDO无法做任何类似于分布式交易的事情(在任何情况下,这都是一个非常棘手的问题,没有银子弹)。

通常,在网络分区存在的情况下(即演员从网络上掉下来),可以证明同时无法实现一致性和可用性(保证对您的查询的响应) - - 见CAP theorem

您似乎需要重新评估您的要求,并根据此分析的结果设计解决方案;为了横向扩展数据处理或存储,您必须从第一天开始考虑扩展并相应地进行规划。

答案 1 :(得分:0)

您只能实例化单个PDO对象。因此,您需要使用查询切换数据库,然后在第二个数据库中执行相同的查询。

最好的办法是进行交易,然后提交该交易(如果成功)。然后做一些像

这样的事情
$dbh->query('USE otherdb');
$dbh->exec();

然后执行第二个事务,并根据它是否有效提交或回滚。

我不确定这是否真的能回答你的问题。