Php 跨多个数据库的PDO事务,是否可能?
我对我们的一个用户有以下问题:他们在两个不同的位置有两个商店,每个地方都有自己的数据库,但是,他们需要共享客户群和注册销售的材料列表。目前,我们所做的是当客户机注册一个新客户机时,在另一个位置的数据库上创建一个副本。由于他们的互联网连接不稳定,问题很快就会出现。如果在注册时,互联网关闭,它会尝试复制,失败并携带不一致的数据库Php 跨多个数据库的PDO事务,是否可能?,php,mysql,pdo,Php,Mysql,Pdo,我对我们的一个用户有以下问题:他们在两个不同的位置有两个商店,每个地方都有自己的数据库,但是,他们需要共享客户群和注册销售的材料列表。目前,我们所做的是当客户机注册一个新客户机时,在另一个位置的数据库上创建一个副本。由于他们的互联网连接不稳定,问题很快就会出现。如果在注册时,互联网关闭,它会尝试复制,失败并携带不一致的数据库 我考虑过通过Pdo事务对数据库进行更新,该事务将管理这两个数据库,但似乎需要一个新的Pdo实例('mysql:host=xxxx;dbname=test',$user,$p
我考虑过通过Pdo事务对数据库进行更新,该事务将管理这两个数据库,但似乎需要一个新的Pdo实例('mysql:host=xxxx;dbname=test',$user,$pass)对于每个数据库,我看不到提交这两个更新的方法。看看这个相关的问题,似乎我需要一些交易管理。这可以通过PDO实现吗 不,PDO不能做任何远程类似分布式事务的事情(这在任何情况下都是一个非常棘手的问题,没有银弹存在) 一般来说,在存在网络分区(即参与者从网络上脱落)的情况下,可以证明您无法同时实现一致性和可用性(保证对查询的响应)——请参阅
似乎您需要重新评估您的需求,并根据分析结果设计解决方案;为了水平扩展数据处理或存储,您必须从第一天开始考虑扩展并相应地计划。您只能实例化单个PDO对象。因此,您需要使用查询切换数据库,然后在第二个数据库中执行相同的查询 最好的办法是执行一个事务,然后提交该事务(如果成功)。然后做一些类似的事情
$dbh->query('USE otherdb');
$dbh->exec();
然后执行第二个事务,并根据它是否工作来提交或回滚
我不确定这是否真的回答了您的问题。这可能太复杂了,无法在这里回答,我的解决方案最终需要改变体系结构(即水平可扩展的数据存储、服务队列/通知系统或其他更合适的体系结构)。您应该开始了解实际的一致性要求。事务,通常一次只能在一台服务器或集群上工作。