gpt4 book ai didi

php - Laravel 4 和 MySQL 的连接太多

转载 作者:可可西里 更新时间:2023-11-01 07:08:59 24 4
gpt4 key购买 nike

我有一个关于在 Laravel 4.1 中处理多个数据库连接的问题。假设我有一个数据库主机,该主机上有 3 个数据库

例如:

    'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_1',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

'mysql2' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_2',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

'mysql3' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_3',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

我应该对这些数据库建立 3 个不同的连接吗?

或者我应该只拥有一个连接并在每个模型中指定表名类似于:

public $table = "DB_2.table_name";

我之所以问,是因为我注意到我更容易耗尽数据库连接,因为它会在需要时创建新的数据库连接连接到不同的数据库。

我知道两者都会起作用,但我对在这种情况下被认为是“最佳实践”的东西很感兴趣。

提前感谢您的反馈。

干杯。

最佳答案

指定表,而不是数据库实现。

我不太喜欢允许在同一服务器上的数据库之间对 MySQL 进行跨数据库查询的“功能”。这就是允许你提到的事情。

  • 如果更改数据库的名称,则需要在代码中重构表名。
  • 如果您创建一个像 table_name_test 这样的测试数据库来测试您的代码或数据库修改,则每次在数据库与编辑之间跳转时,您都必须修改代码中的所有表配置文件。
  • 如果您迁移到没有数据库名称的不同数据库技术(每个服务器一个 Db/fuile,您将需要在每个类中重构表名属性)怎么办
  • 它会引出黑暗、诱人但又邪恶的跨数据库查询路径,例如 select * from db1.foo f Join db2.bar b on b.id = f.id;。恭喜你刚刚将你的 2 个数据库变成了一个可能无法在 MySQL 之外运行的大数据库

此外,即使您指定了三个连接,您也可能没有建立连接并同时使用所有三个……我希望如此。如果您确实对每个请求都使用了所有 3 个连接,那么 laravel 应用程序/网站可能会节省 2 个连接,微优化。

关于php - Laravel 4 和 MySQL 的连接太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22099382/

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