Laravel 4和MySQL的连接太多

Gim*_*mli 5 php mysql database database-connection laravel-4

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

例如:

    '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'    => '',
    ),
Run Code Online (Sandbox Code Playgroud)

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

或者我应该只有一个连接,并在每个模型中指定表名称,如:

public $table = "DB_2.table_name";
Run Code Online (Sandbox Code Playgroud)

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

我知道两者都有效,但我对在这种情况下被认为是"最佳实践"感兴趣.

提前感谢您的反馈.

干杯.

Ray*_*Ray 1

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

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

  • 如果更改数据库的名称,则需要在代码中重构表名称。
  • 如果您创建一个测试数据库table_name_test来测试代码或数据库修改,则每次在数据库之间跳转时都必须修改代码中的所有表驯服,而不是仅编辑配置文件。
  • 如果您迁移到没有数据库名称的不同数据库技术(每个服务器/fuile一个数据库,您需要重构每个类中的表名称属性)怎么办?
  • 它导致了跨数据库查询(如select * from db1.foo f Join db2.bar b on b.id = f.id;. 恭喜您刚刚将 2 个数据库变成了一个可能无法在 MySQL 之外运行的大数据库

另外,即使您指定了三个连接,您也可能不会建立连接并同时使用所有三个连接......我希望如此。如果你确实使用了 Laravel 应用程序/站点的每个请求的全部 3 个连接,则可能会节省 2 个连接,这可能是微优化。