Laravel 4和MySQL的连接太多

时间:2014-02-28 15:35:37

标签: php mysql database laravel-4 database-connection

我有一个关于在Laravel 4.1中处理多个数据库连接的问题。 假设我在该主机上有一个带有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'    => '',
    ),

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

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

public $table = "DB_2.table_name";

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

我知道两者都会奏效,但我对所谓的最佳实践"感兴趣。在这种情况下。

提前感谢您的反馈。

干杯。

2 个答案:

答案 0 :(得分:1)

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

我不是“功能”的忠实粉丝,它允许在同一服务器上的DB之间跨MySQL查询MySQL。这就是你所提到的东西。

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

此外,即使您指定了三个连接,您可能也没有建立连接并同时使用所有三个连接......我希望如此。如果你确实使用了每个请求的所有3个连接laravel app / site节省2个连接可能是微优化。

答案 1 :(得分:0)

这段代码在我需要时为我提供了诀窍。

Config::set('database.default', 'database_name');

在您的情况下,将 database_name 替换为您可能需要的 database_name 。每次看到需要进行切换时,我都会在控制器中调用它。在查询之前,例如。

我不知道是否 有史以来最好的方式 ,但这对我有用,我认为值得分享! = d