0

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

我考虑通过管理两个数据库的 Pdo 事务对数据库进行更新,但似乎$dbh1= new PDO('mysql:host=xxxx;dbname=test',$user,$pass);每个数据库都需要一个新的 PDO 实例,而且我看不到提交两个更新的方法。看看这个相关的问题,跨多个数据库进行分布式事务的最佳方法是什么,似乎我需要一些用于事务管理。这可以通过 PDO 实现吗?

4

2 回答 2

2

No, PDO cannot do anything remotely resembling distributed transactions (which in any case are a very thorny issue where no silver bullets exist).

In general, in the presence of network partitions (i.e. actors falling off the network) it can be proved that you cannot achieve consistency and availability (guaranteed response to your queries) at the same time -- see CAP theorem.

It seems that you need to re-evaluate your requirements and design a solution based on the results of this analysis; in order to scale data processing or storage horizontally you have to take the scaling into account from day one and plan accordingly.

于 2013-10-15T18:58:28.930 回答
0

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

最好的办法是进行交易,然后提交该交易(如果成功)。然后做类似的事情

$dbh->query('USE otherdb');
$dbh->exec();

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

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

于 2013-10-15T19:01:37.453 回答