簡體   English   中英

MySQL 存儲過程與 Node.js 性能對比

[英]MySQL stored procedure vs Node.js performance

我有一個 API 和 Express/Node.js 和 MySQL DB。 我正在使用 Mysql2 npm package(無 ORM)進行查詢。 對於某些特定路線,我有一些並行運行的查詢(它們並不完全相關,因此無法執行連接)。 我想知道使用存儲過程是否可以提高我的性能,特別是考慮到 Node.js 的非阻塞行為。 我主要關心2個參數:

  1. 查詢時間和
  2. 服務器開銷。

換句話說,如果我從單個查詢更改為存儲過程,對我的響應時間和服務器利用率會有什么影響?

編輯:

我所說的並行運行查詢的意思是,我設置了 function,以便查詢可以獨立運行(無需等待上一個查詢的響應),一旦所有承諾解決,我的 function 將結果返回為 ZA7593F0F287A7A44。解決。

一個小片段:

const makeThreeQueries = (q1, q2, q3) => { # queries being array with 2 elements: ['query string', ['Array', 'of', 'Args']]
    return new Promise((resolve) => {
        const results = []
        const queryHandler = (result) => {
            results.push(result)
            if (results.length === 3) resolve(results) # 3 in case there are 3 queries
        }
        db.query(...q1).then(queryHandler)
        db.query(...q2).then(queryHandler) # doesn't wait for q1 to finish
        db.query(...q3).then(queryHandler) # doesn't wait for q2 to finish
    })
    
}

當然,主代碼比這更健壯,有適當的錯誤處理和驗證/位置一致性。

有一些節省,因為控制保留在存儲過程中,而不是需要在客戶端和服務器之間來回 go。

如果客戶端和服務器位於地理上相距很遠的不同服務器上,則節省的費用非常可觀。 在這種情況下,傳輸時間可以支配性能。

無論代碼是來自客戶端還是來自存儲過程,並行性可能需要仔細注意事務——以防止單獨的操作相互影響。

暫無
暫無

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

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