我有一个运行MySQL 5.5(1个主服务器和1个服务器)的应用程序(php)
我用来在主/从上发送读/写。
当我创建一个新记录(用户或类似的东西)时,我将它写在主服务器上,当我重新加载页面时,我从服务器上加载它。
示例:
...
if ($_GET['id'])
{
#Load user
$user = $sql->load('user', $_GET['id']);
if ($user == false)
{
throw exception('User not found');
}
}
else if ($_POST['create]')
{
#Create a new user
$user_id = $sql->insert('user', $_POST);
$mvc->reload('?id=' . $user_id);
exit();
}
...
但是当主人真的很高效(快速插入)并且复制不是(滞后= 0.3 - 1秒)时,重新加载将无效......
处理该问题的最佳做法是什么
一些解决方案:
答案 0 :(得分:0)
首先,您需要定义您的应用程序是否可以使用延迟。
如果没有,那么您需要确保要获取的数据已在slave上可用。例如,从slave获取最后一个id并将其与你要获取的id进行比较;或者首先尝试slave,如果row不存在,则回退到master(但是这会使master对请求新数据超载)。
通常,Web应用程序可以使用陈旧数据。如果其他访问者在10秒后看到新帖子就没有问题。但正如你所提到的,如果帖子的作者没有立即看到它,那就不好了。因此,您可以根据获取的数据/原因采取不同的行动(例如,缓存有关会话中最近发布的帖子的信息,在这种情况下从主服务器获取)