繁体   English   中英

Laravel 4和MySQL的连接太多

[英]Too Many Connections w/ Laravel 4 and MySQL

我有一个关于在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'    => '',
    ),

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

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

public $table = "DB_2.table_name";

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

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

提前感谢您的反馈。

干杯。

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

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

  • 如果更改数据库的名称,则需要在代码中重构表名。
  • 如果您创建一个像table_name_test这样的测试数据库来测试您的代码或数据库修改,那么每次在db和只编辑配置文件之间跳转时,您都必须修改代码中的所有表名。
  • 如果您在没有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个连接可能是微优化。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM