未使用的写入数据库连接

时间:2015-09-22 03:46:35

标签: php database laravel-5 scalability

使用Laravel 5.0提出了这个问题。

我的项目的数据库设置包括1个写节点和多个只读副本(postgresql)。每次为任何查询启动连接时,例如:

php <?php $user = \App\User::find(1); ?>

...与写节点建立连接。即使没有运行写入查询(包括set names 'utf8'等),也会发生这种情况;将设置一个连接,但所有SELECT查询都在读取副本上正确运行。

如果我不需要/使用它来进行只读请求,我该如何避免这种写连接?

1 个答案:

答案 0 :(得分:0)

维护数据库连接有两个类:Illuminate/Database/DatabaseManagerIlluminate/Database/Connectors/ConnectionFactory

当任何Laravel类想要使用数据库连接时,它会调用DatabaseManager::connection(),最终通过ConnectionFactory::make()请求实际连接。

您的问题在于此处,make()进程的基础同时创建了“读取”和“写入”连接。所以总是建立'写'连接。这是ConnectionFactory的行为。

所以最好的方法是在Laravel上打开一个问题,询问开发团队他们是否只想在实际需要的时候改进连接建立。

<强>编辑:

我刚发现你已经开了一个问题: - )