主义INSERT / UPDATE / DELETE等待从属复制

时间:2018-09-27 23:04:53

标签: symfony doctrine

我的Symfony主义主/从连接有一个奇怪的问题。我们将Amazon RDS Aurora和MySQL与主副本一起使用。它运作良好,但我们的应用程式运作速度过快。

每个INSERT / UPDATE / DELETE请求总是转到主请求,然后AWS RDS自动将数据复制到Slaves上,平均延迟为20ms。

当我们的应用执行这些查询中的任何一个,然后将用户重定向回他正在执行的操作时,该应用执行SELECT即可查看更改,而且通常它是如此之快以至于还没有复制,因此用户可以看到过时的信息。

我想通过在每个请求上最好添加一个事件侦听器来实现快速修复,因此,如果Doctrine完成了任何INSERT / UPDATE / DELETE操作,我可以为其他50-100ms添加睡眠机制,以便这些请求将200返还给客户之前,请花一点时间,以便他进行更新。

有人有类似的问题吗?

我想这是一个好问题,但是非常烦人,而且由于速度快,UX大大减少了。

请让我知道对于这个问题是否有更好的 quick 解决方案。我们的应用执行的读取操作比写入操作多很多倍,因此客户端不会注意到增加100ms的写入请求。我想在请求级别解决此问题。遍历每个要写的控制器不是一个选择,因为它是一个庞大的应用程序。

1 个答案:

答案 0 :(得分:1)

您可以使用内置的生命周期挂钩(https://symfony.com/doc/current/doctrine/lifecycle_callbacks.html

例如,使用postUpdate和PHP的usleep()可以帮助解决问题。

/**
 * @ORM\PostUpdate
 *
 * @return void
 */
public function awaitReplication() : void
{
    usleep(200);
}