【问题标题】:MongoDB Connection Pattern using Monger使用 Monger 的 MongoDB 连接模式
【发布时间】:2016-02-28 01:05:02
【问题描述】:

我是clojure的新手。

有没有关于通过monger连接mongodb的习惯用法/模式?

我是否必须使用

进行连接和断开连接
(monger.core/connect) & (monger.core/disconnect conn)

分别。每次?

有没有办法可以重用连接池中的连接?

【问题讨论】:

    标签: mongodb clojure monger


    【解决方案1】:

    monger 使用 MongoClient,它执行连接池。在connect 之后,您可以继续使用该池直到完成,然后再使用disconnect。请参阅monger documentation 了解支持的连接选项(例如池中的最大连接数,默认为 10)。

    【讨论】:

    • 对不起,我应该更清楚。这是一个网络应用程序。当您说在完成之前继续使用该池时,是否每个请求都必须连接和断开连接?
    • 不,您想在启动应用程序之前调用 connect(我假设是 jetty)。从你的路由中查询数据库,不需要每次都连接。
    • 如何在后续请求中恢复连接,因为 (monger.collection/insert)、(monger.collection/find-one-as-map) 函数似乎需要一个 db 作为参数和 (monger.core/get-db) 函数需要连接作为参数?
    • 连接时,将连接放在一个原子中,这样您就可以从所有后续调用线程中看到它。
    • 非常有帮助的cmets和答案,感谢大家如此友好、尊重和有见地^_^
    【解决方案2】:

    我们只需要示例代码,对吧?该文档仅讨论通过let 创建本地绑定连接,因此这将帮助您入门:

    (ns pipegen.core
        (:require [monger.core :as mg]
                  [monger.collection :as mc]))
    
    (def conn (atom (mg/connect-via-uri mongo-uri)))
    (mc/insert (:db @conn) "collectionname" {:name "methuzula" :age 123})
    

    我不清楚,从文档中,mg/connect-via-uri 的返回类型,所以我会简单地提一下,以防它帮助某人:

    {:conn #object[com.mongodb.MongoClient]
     :db   #object[com.mongodb.DB]}
    

    如果您将其保存到 def,您可以根据需要重复使用它。


    旁注,与您的问题不太相关,但可能会对您有所帮助:

    这可能不是连接到 dbs 的最佳设计模式。下面是一些我喜欢阅读的依赖注入设计模式,它提供了一些更好的关于传递 mongo 连接上下文的想法,Reader Monad 看起来特别酷,我必须自己尝试一下! http://software-ninja-ninja.blogspot.co.il/2014/04/5-faces-of-dependency-injection-in.html

    另外,slack 上的 clojurians 是一个友好的社区,直到我对 clojure 感到头疼之后才发现,看看他们吧! https://clojurians.slack.com/

    【讨论】:

    • 有什么理由将连接放入atom 而不是直接放入var
    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多