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% ]

これに問題はありますか?つまり、Doctrineとセッションハンドラーはの2つの異なるインスタンスを使用します\Mongo

\Mongo循環参照に陥ることなく、教義によって作成されたオブジェクトへの参照を取得する方法についてのアイデアはありますか?

4

1 に答える 1

1

Mongoのすべてのインスタンスは、クラスターへの個別のネットワーク接続を表します。ドキュメントでは、アプリケーション全体で1つのインスタンスのみを使用することを推奨しています。

新しいMongoインスタンスを頻繁に作成する場合、各インスタンスは最初に新しい接続を確立する必要があり、これにはかなりの時間がかかります。ただし、古いインスタンスを再利用するということは、すでに開いているネットワーク接続が使用されることを意味します。これははるかに高速です。

複数のインスタンスを使用することのもう1つの欠点は、MongoDBが各接続を介して送信されるすべてのクエリが順番に処理されることを保証しますが、異なる接続からのクエリに対して同じことを保証しないことです。したがって、最初にドキュメントを作成してから、同じ接続でドキュメントを削除すると、ドキュメントが削除されたことを確認できます。ただし、Mongo Aを使用して作成し、Mongo Bを使用して削除すると、削除後に保存が処理され、オブジェクトがデータベースに残る可能性があります。

于 2012-09-07T20:51:35.843 に答える