0

我想使用 MongoDB 来存储会话,我需要将\Mongo对象注入到会话处理程序中。

我首先认为我可以通过以下方式从教义中获取它:

services:
    mongo.connection:
        class: MongoDoctrine\MongoDB\Connection
        factory_service: doctrine.odm.mongodb.document_manager
        factory_method: getConnection
    mongo:
        class: Mongo
        factory_service: mongo.connection
        factory_method: getMongo

但是由于我正在使用的记录器预处理器需要我认为的 request_id ,它会引发循环引用异常,即使我将其关闭,有时它也会返回 null。所以我只是实例化了我自己的 Mongo 实例并且工作正常:

services:
    mongo:
        class: Mongo
        arguments: [ %doctrine_mongodb.default_server% , %doctrine_mongodb.options% ]

这会不会有问题?我的意思是教义和会话处理程序将使用两个不同的\Mongo.

关于如何在\Mongo不陷入循环引用的情况下获取对学说创建的对象的引用的任何想法?

4

1 回答 1

1

Mongo 的每个实例都代表一个到集群的单独网络连接。该文档建议对整个应用程序仅使用一个实例。

当你频繁创建新的 Mongo 实例时,每个实例都必须先建立一个新的连接,这需要相当长的时间。但是重用旧实例意味着将使用已经打开的网络连接,这要快得多。

使用多个实例的另一个缺点是 MongoDB 保证通过每个连接发送的所有查询都按顺序处理,但不保证来自不同连接的查询相同。因此,当您首先创建一个文档,然后使用相同的连接将其删除时,您可以确定它已经消失了。但是当你通过 Mongo A 创建它然后通过 Mongo B 删除它时,可能会在删除后处理保存,并且对象将保留在数据库中。

于 2012-09-07T20:51:35.843 回答