2017-04-06 127 views
1

我正在使用Node js和Postgresql,並試圖在連接實現中達到最高效率。
我看到pg-promise建立在node-postgres之上,node-postgres使用pg-pool來管理共享池。
我還讀到「一次有100多個客戶是非常糟糕的事情」(node-postgres)。使用pg-promise的連接池

我使用的是PG-承諾,並想知道:

  1. 什麼是數據的一個非常大的負載推薦poolSize。
  2. 如果poolSize = 100並且應用程序同時(或者甚至更多)獲得101請求,會發生什麼情況? Postgres是否處理訂單,並使101請求等待,直到它可以運行它?

回答

0
  • 會發生什麼,如果poolSize = 100和應用同時得到101請求(或甚至更多)? Postgres是否處理了這個訂單,並且讓這個請求等到它可以運行?
  • 對,請求將被排隊。但它不是由Postgres自己處理,而是由您的應用程序(pg-pool)處理。因此,無論您何時用完免費連接,應用程序都會等待連接釋放,然後執行下一個掛起的請求。這就是泳池的用途。

    1. 什麼是推薦poolSize爲一個非常大的數據負載。

    這真的取決於很多因素,沒有人會真正告訴你確切的數字。爲什麼不在巨大的負載下測試您的應用程序,並在實踐中看到它的表現如何,並找到瓶頸。


    而且我覺得node-postgres文檔相當混亂和誤導對此事:

    一旦你> 100個同時請求您的Web服務器將嘗試打開PostgreSQL後端和你」 100個連接會在PostgreSQL服務器上耗盡內存,您的數據庫將無法響應,您的應用程序似乎會掛起,並且一切都會中斷。 Boooo!

    https://github.com/brianc/node-postgres

    這並不完全正確。如果您在Postgres方面達到連接限制,則只有在任何以前的連接關閉之後,您才能建立新的連接。如果你在節點應用中處理這種情況,沒有什麼會打破。

    2

    我是pg-promise的作者。

    我使用節點js和Postgresql,並試圖在連接實現中最有效。

    數據庫通信有幾種優化級別。其中最重要的是最大限度地減少每個HTTP請求的查詢次數,因爲IO價格昂貴,連接池也是如此。

    我看到PG-承諾是建立在節點的Postgres和節點的Postgres的頂部採用PG-池來管理池。

    node-postgres開始使用版本6.x中的pg-pool,而pg-promise保留在使用內部連接池實現的版本5.x上。 Here's the reason why

    我也讀了「超過100個客戶端同時是一個非常糟糕的事情」

    我在這方面的長期實踐表明:如果不能滿足您的服務於20個連接池,您不會因爲進行更多連接而被保存,您需要修改實施。而且,如果超過20,則會給CPU帶來額外的壓力,並導致進一步的減速。

    對於非常大的數據負載,建議的poolSize是多少?

    數據的大小與池的大小無關。無論多大,您通常只使用一個連接進行單個下載或上載。除非你的實現是錯誤的,並且你最終使用了多個連接,否則你需要修復它,如果你想讓你的應用具有可伸縮性。

    如果poolSize = 100和應用程序獲取同時

    101請求,它會等待下一個可用的連接會發生什麼。


    參見: