假设我们在局域网上有3台服务器:
APP-PHP应用服务器
MASTER-主Mysql数据库服务器
从站-从站Mysql数据库服务器(复制MASTER)
在一个代码块(php)中,APP插入到MASTER中,检索last_insert_id,然后将其用于从SLAVE中选择刚插入的数据.
所以问题是,复制是否及时进行,以便SLAVE从MASTER获取数据?这是否受到主或从负载的影响?
最后,如果可用数据存在问题,是否有办法确保从SLAVE接收到最新数据?
解决方法:
因为MySQL复制时间是一个不可控制的变量(即使在正确的实现中,也会出现停止复制或阻止复制的问题),所以最好不要依赖数据复制.您可以将问题分为两种情况:
1)我是用户在执行CUD操作,我希望R操作后缀可以反映我刚才所做的更改.在这种情况下,您绝对需要从主数据库中提取数据,因为用户希望他的更改有效.
2)我是外部用户,我不知道发生了CUD命令,而且我通常不在乎,因此返回陈旧数据是可以接受的(在99%的实现中,否则您可能不会使用PHP * ).
#1的替代方法是通知用户他的更改正在传播,并且在某些情况下是可以接受的,例如许多网站都会告诉您,x可能最多需要y分钟才能显示,这是这种情况.
>如果需要即时更新,则可以尝试写入与(可能不可靠的)DB数据一起轮询的缓存层.诸如memcached之类的东西将是最佳选择.