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