【问题标题】:Unused write database connections未使用的写入数据库连接
【发布时间】:2015-12-18 21:47:34
【问题描述】:

这个问题是使用 Laravel 5.0 提出的。

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

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

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

如果我不需要/将其用于只读请求,如何避免此写入连接?

【问题讨论】:

  • 您提到您使用的是2连接的fideloper技术,但是您如何在读/写之间主动切换?即当您点击-&gt;save() 时,模型如何抓取mysql2 而不是1
  • @azngunit81 在保存模型之前,您必须在模型上显式调用 setConnection
  • awww,明确地这样做很脏

标签: php database laravel-5 scalability


【解决方案1】:

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

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

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

因此,最好的方法是在 Laravel 上打开一个问题,询问开发团队是否愿意仅在实际需要时改进连接建立。

已编辑:

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

【讨论】:

猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2019-09-29
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多