簡體   English   中英

處理mysql數據庫連接

[英]Handling mysql db connection

我正在使用node.js和mysql作為后端的高性能實時應用程序。

為了提高性能,我在mysql bd底下進行了單獨的node.js進程更新。 更新請求被排隊以保證順序執行(必須)。

我正在考慮在此過程中保持永久打開的數據庫連接,以免浪費時間在每個請求上打開它。

其他DB請求(更新或讀取)是直接從Web服務器node-js實例提供的,可能是並行提供的。 這些數據庫連接當然是在每個請求中創建/釋放的。

您看到這種方法的一些弊端嗎?

更新:

重要的附加信息。 我之所以選擇此獨立流程解決方案,基本上是因為以下原因...

在每次更新之前必須執行的邏輯相對復雜,並且取決於數據庫中的數據結構。 每次更新之前,都需要幾個其他查詢。 這個獨立的過程具有完整的內存數據結構,並且可以非常快速地執行這些檢查,而無需數據庫訪問(性能提升)。

您的方法的另一個缺點。

MySQL因超時而關閉長時間打開的連接而臭名昭著。

查詢期間失去與MySQL服務器的連接

@duffymo是正確的:從池​​中使用短期連接比長期打開連接更有可能保持數百小時的工作時間。

node.js + mysql連接池

我想知道:您說順序執行是必須的。 大型DBMS(包括大型服務器上的MySQL)非常有能力處理來自多個連接的並發查詢,而不會破壞數據。 如果您可以准確地確定更新順序的強制性要求,則系統可能會更強大。 如果您可以在SQL本身或可能在某些事務中實現該排序,則與堅持只由一個進程進行更新相比,您將擁有一個更具抗故障能力的系統。 像您提到的那種單用途進程在系統測試中不容易調試:它們因各種原因在數百小時后失敗而臭名昭著。 當它們的生產失敗時,每個人都在爭先恐后地恢復它們,因此沒有人有時間對它們進行故障排除。

我看到缺點。

交易是最大的交易。 如果UPDATE失敗會怎樣? 您是否回滾並重試? 將消息放回隊列?

我認為更好的方法是在盡可能小的范圍內打開,使用和關閉連接。 創建並維護一個連接池,以分攤許多事務的創建成本。

我建議您查看vert.x而不是node.js。 這是用於JVM的node.js。 它使用非阻塞I / O和環形緩沖區事件總線來保證順序,快速的操作。

暫無
暫無

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

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