2013-06-06 6 views
6

Ich verwende den neuesten Java-Treiber (2.11.1) für MongoDB. MongoDB Java API ist im WesentlichenWann stellt MongoDB Java Driver eine Verbindung her?

  • eine Instanz MongoClient Klasse (mit internem Verbindungspool)
  • getDb() für das Erhalten DB Objekt
  • GetCollection() für das Erhalten DBCollection Objekts

1) Wann wird eine Verbindung zu db hergestellt? Ist es, wenn getDB() aufgerufen oder getCollection() aufgerufen wird?

2) Ist es besser, getDB() einmal oder jedes Mal aufzurufen, wenn Sie brauchen? (spielt es eine Rolle? - MongoClient hält DB-Objekt im Cache?)

3) Ist es besser, einzelne DBCollection-Objekte durch Multi-Threads wiederzuverwenden oder getCollection() aus Multi-Threads aufzurufen? (Ist DBCollection zwischengespeichert?)

+0

Es gibt einen einfachen Test, um zu wissen: Erstellen Sie eine 'main()', die eine einfache Abfrage, mit Ihrer MongoDB heruntergefahren, und sehen, wo es barfs: p – fge

Antwort

0

1) Verbindung wird hergestellt, wenn wir eine Operation zu tun (finden, zu aktualisieren, entfernen, etc)

2) Doc sagt: „In der Regel erstellen Sie nur 1 Instanz für einen Datenbank-Cluster gegeben und verwende es in deiner gesamten Anwendung ". Es gibt also keinen Grund, ein DB-Objekt zwischenzuspeichern, und es wird auch nicht im Treibercode zwischengespeichert.

3) DBCollection und DB sind Thread-sicher. DBCollection wird in der DBApiLayer-Klasse im Treiber zwischengespeichert.

+1

Doc sagt, es sollte eine Instanz von MongoClient pro sein JVM. In welchem ​​Zusammenhang steht dies mit dem Zwischenspeichern von DB- oder DBCollection-Objekten? – shicky

+0

DB-Objekt ist etwas, das eine logische Darstellung der tatsächlichen Datenbank ist. Kann sein, dass meine verwendete Sprache falsch ist, ja die DB-Details müssen zwischengespeichert werden, aber es ist nur 1 DB-Objekt pro MongoClient, aber viele DBCollection pro DB. –

7

Die MongoClient-Klasse verwaltet einen Lazy-Loaded-Verbindungspool von Ihrer Clientanwendung zu einem MongoDB-Cluster. Sie können MongoClient mit einer bestimmten Anzahl von Verbindungen pro Host sowie der Anzahl der Threads initialisieren, die auf eine Verbindung warten. Da MongoClient sowohl die Anzahl der Verbindungen als auch die Thread-Parallelität verwaltet, sollten Sie eine Instanz der Klasse pro virtueller Maschine verwenden. Sowohl DB als auch DBCollection führen ihre Operationen über den Verbindungspool des MongoClients aus, so dass sie aus diesem Grund nicht zwischengespeichert werden müssen. Die Anzahl der DB- oder DBCollection-Objekte, die Sie instanziieren, ist nicht begrenzt. Da diese Klassen jedoch Thread-sicher sind und mit bestimmten Lesevorgaben & Bedenken bei der Schreiboperation festgelegt werden können, können Sie eine einzelne Instanz der DB- oder DBCollection-Klasse zum Ausführen mehrerer Operationen verwenden.

Verwandte Themen