簡體   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