我们正在转向主/多从 MySQL 设置,我担心如何在不过多更改应用程序代码的情况下解决数据完整性问题。
我们的应用程序使用 ORM(Doctrine PHP),理论上我们可以扩展它以简单地将 SELECT 语句发送到其中一个从属服务器或主服务器,并将 UPDATE/DELETE 查询发送到主服务器。
由于 ORM 的性质,这将失败的地方是:
- 根据来自从站的过时数据进行写入,例如从从站读取最近在主站上更改了其 Y 列但尚未在从站上更改的记录,然后将 X 列的更改与 Y 列的过时数据一起保存在主设备上,从而覆盖之前对 Y 列的更改。
- 在最近一次在主机上写入后立即从从机读取(用户刚刚发布表单的场景 - 比如说论坛评论 - 并重新加载页面并且看不到他的评论)
我在想我们应该在我们的应用程序控制器上构建逻辑,让数据层知道是否可以容忍获取过时的数据,什么时候没有(例如,当有写入意图时),什么时候没有,以便数据层可以但是,相应地连接到主设备或从设备;这似乎违背了良好的软件工程实践。例如,控制器应该实现业务逻辑,而不必处理数据应该来自从站还是主站。
我确信这在过去已经处理过了。也许不是使用 Doctrine PHP,而是使用 Hibernate 或其他 ORM 解决方案?
是否有可以分享的一般良好做法或建议?