2016-08-22 144 views
5

我通過它的驅動程序使用MongoDB的使用Node.js語言MongoDB的 - 打開和關閉連接 - 建議對好的做法

我通常打開(通過connect()方法)的連接,任何時候,我需要執行的操作,並關閉它(通過close()方法),只要我完成。在我的程序中,很自然地,我需要對MongoDB執行很多操作,因此我多次打開和關閉連接。

我想知道這是否是一種好的做法,或者是否會更好地在第一個操作執行時打開連接,將其存儲在變量中並使用已打開的連接進行以下操作,以便在程序關閉時執行結束。

任何意見是非常感謝。

+0

你在使用什麼框架(node,python,c#)? – profesor79

+0

我正在使用node.js. Thx – Picci

+0

我使用node.js,我想知道是否(以及如何)連接池可以與node.js驅動程序一起工作。 Thx – Picci

回答

6

最好的做法是打開一次連接,將其存儲在一個變量中並在末尾關閉它。 MongoDB明確推薦這一點。這就是爲什麼打開和關閉連接是MongoDB API的一部分,而不是爲每個查詢自動發生的原因。對於每個查詢

打開和關閉連接都將在性能(CPU +延遲),網絡流量,內存管理(創建和刪除對象)方面引入了顯著的開銷,不僅爲客戶同時也爲服務器本身,這也影響到其他客戶。

關於連接的術語:在一些像Java這樣的驅動程序中,實際創建並存儲在變量中的內容不是物理連接,而是實例。它看起來像是一個從抽象(API)角度來看的連接,但它實際上封裝了實際的物理連接並隱藏了用戶的複雜性。

創建MongoClient情況只有一次,對於支持的驅動程序,還可以讓你從連接池其中駕駛員保持着活躍的連接並行你,讓你也只需要創建一個MongoClient受益跨多個線程的實例。

+0

謝謝你的答案。最後一點對我來說還不完全清楚。我正在使用我認爲支持連接池的node.js驅動程序。我的理解是連接池允許程序隨時需要連接,而驅動程序負責維護池。如果我需要將連接存儲在我的程序中,那麼對我來說,我並沒有使用連接池概念。你能否解釋我?在此先感謝 – Picci

+0

樂意幫忙!不幸的是,我不熟悉node.js,我聽說它是​​單線程的。如果它仍以某種方式「查詢」查詢,可能會發生連接池。無論如何,只需打開和關閉連接一次,即使在單線程中,甚至只需一次連接,也可以顯着提高性能。如果API的設計正確,它應該簡單地「只是工作」。 –

+0

也許這應該有助於消除一些混淆:變量中存儲的內容(至少在Java中)本身並不是一個連接,它是封裝了整個連接和連接池機制的MongoClient對象。 –