gpt4 book ai didi

mysql - 如何简单地处理(非常)短的 mysql 复制滞后

转载 作者:行者123 更新时间:2023-11-30 23:33:58 24 4
gpt4 key购买 nike

我有一个使用 MySQL 5.5(1 主从)运行的应用程序 (php)

我用来在主/从上分派(dispatch)读/写。

当我创建一个新记录(一个用户或类似的东西)时,我将它写在 master 上,当我重新加载页面时,我从 slave 加载它。

例子:

...
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 秒)时,重新加载将不起作用...

处理该问题的最佳做法是什么

一些解决方案:

  • 减少延迟的数据库优化(非常困难)
  • sleep(1) 阅读前或写作后...不是很优雅

最佳答案

首先,您需要定义您的应用程序是否可以延迟运行。

如果没有,那么你需要确保你想要获取的数据已经在slave上可用。例如,从 slave 获取最后一个 id,并将其与您要获取的 id 进行比较;或者首先尝试从属,如果行不存在,则回退到主控(但这会使主控因请求新数据而过载)。

通常 Web 应用程序可以使用陈旧数据。如果其他访问者在 10 秒后看到新帖子,则没有问题。但是正如您所提到的,如果帖子的作者没有立即看到它,那就太糟糕了。因此,您可以根据要获取的数据/原因采取不同的行动(例如,在 session 中缓存有关最近帖子的信息,在这种情况下从主服务器获取信息)

关于mysql - 如何简单地处理(非常)短的 mysql 复制滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9125936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com