2017-08-05 49 views
0

我完全不明白connectionLimitmysql模塊的工作原理。connectionLimit如何在節點mysql中工作?

var connPool = mysql.createPool({ 
     host: config.get('database.host'), 
     user: config.get('database.user'), 
     password: config.get('database.password'), 
     database: config.get('database.dbname'), 
     connectionLimit: 5 
    }); 

現在,是什麼限制5在這裏做的:

我在下面的方式創建一個連接池?

這裏就是我想:

假設有5個用戶使用我的REST API用於從表中選擇數據。現在在我的api中,我從池中獲得一個連接,做東西然後發佈連接。

所以現在假設,有12個用戶同時向這個api發送請求。所以他們應該首先獲得訪問數據,其他將得到錯誤/無響應。他們將不得不再次請求獲取數據。

這是這樣或其他什麼?

回答

1

這是這樣或其他什麼?

這是別的。

如果connectionLimit爲10,該驅動程序將與數據庫的連接的最大數目爲10

假設默認的驅動程序選項,如果所有這些連接都有效(即,他們已經獲得從池中執行查詢,但它們尚未發佈),則下一個連接請求(pool.getConnection())將排隊:驅動程序將等待直到其中一個活動連接釋放回池中。您的用戶只會注意到一點延遲,但他們不會得到錯誤或沒有迴應;只是一個延遲的迴應。

所有這些都可以使用記錄的選項here進行微調。例如,如果您寧願不等待,驅動程序會返回一個錯誤,設置爲waitForConnections : false

或者,如果您希望驅動程序在排隊等待接收連接的25個請求時返回錯誤,請設置queueLimit : 25

+0

好的。所以假設我的服務器上有200個併發請求,我應該去'connectionLimit:200'還是等待沒問題,只要沒有大隊列? (例如,設置類似'connectionLimit:100'和'queueLimit:100') –

+1

這當然取決於,但是如果200個併發請求在您的服務器上很常見,比我說的將connectionLimit設置爲這個數字似乎是最有意義的。 – robertklep

+0

對我的mysql服務器來說不是壞事,設置200個連接! (默認值是10)。節點mysql可以處理這個嗎? –

相關問題