簡體   English   中英

NodeJS和MySql中的連接池問題

[英]Connection pooling issue in nodeJS and MySql

我正在使用NodeJs和Mysql。 我有一個查詢以將mysql表中的一個字段更新為:

Update messaging SET count = count + 1 WHERE msgId = 10;

我正在使用連接池。 配置為:

var pool = mysql.createPool({
connectionLimit : 100,
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database,
port: 3306,
debug: false,
multipleStatements: true});

當消息傳遞給500萬用戶時,使用此查詢的API起作用。 它使連接保持打開狀態 這導致服務器處理非常緩慢。 是否有其他解決方案可提高服務器性能

矛盾的是,減少連接數通常會提高性能。 池連接是可串行重用的資源,並且存在連接請求隊列。 因此,DBMS不會一次嘗試執行大量查詢,而是一次處理少量查詢,並按順序處理負載。

因此,對於應該在短時間內運行的查詢(如您的查詢),請創建帶有較小connectionLimit的池。 嘗試10。如果效果很好,請嘗試5。

如果您有其他查詢需要更長的時間,則可能需要其他連接池。

更不用說集群節點應用程序將為集群的每個成員打開該數量的連接。 對於幾乎所有MySQL部署而言,400個連接都是太多的。 (如果您有一個可以處理數百個連接的部署,那么您的采購經理就會知道這一點,因為此類部署非常昂貴。)

但是,您可能會遇到此問題:如果數百萬用戶正在完全更新同一行msgId = 10 ,則該行將具有DBMS爭用。 在這種情況下,您可能希望存儲行的命中數,然后執行UPDATE... SET count = count + n每隔幾秒鍾一次,而不是每次命中一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM