2016-11-29 1 views
1

Ich versuche ein Java-Projekt mit mongodb als Datenbank zu entwickeln. Ich habe 2 Verfahren (threaded, ohne Gewinde)Wie füge ich ein Dokument ein, ohne eine neue mongodb-Verbindung zu erstellen?

//myMongoHelper, for connection 
    //mydbhelper, threaded insertion 

    myMongoHelper m = new myMongoHelper("localhost",27017,"mydb","mycoll"); 
    int id=100; 
    Thread t = new Thread(new mydbhelper(new BasicDBObject())); 
    while(id>0){ 
     t.start(); 
     t = new Thread(new mydbhelper(new BasicDBObject())); 
     id--; 
    } 
    t.join(); 
    m.myclose(); 

und

 int id =100; 
     mongoClient = new MongoClient("localhost" , 27017); 
     DBCollection coll = mongoClient.getDB("mydb").getCollection("mycoll"); 
     while(id>0){ 
      coll.insert(new BasicDBObject()); 
      id--; 
     } 
     mongoClient.close(); 

$ mongod Schale zeigt XX Verbindungen jetzt offen während der Ausführung eines Codes, und standardmäßig es endet Verbindungen am Ende der Java-Ausführung.

So möchte ich wissen,

  1. offene Verbindungen beeinflusst mongodb Datenbank und wie?
  2. ist es möglich, einen Thread nach dem Einfügen zu beenden, um die Anzahl der Verbindungen zu verringern?
  3. Ist Threading besser für Mongodb-Operationen speziell zum Einfügen?

Bitte verbessern Sie meinen Code.

Antwort

0

Ich werde sie alle zusammen beantworten, jede neue Verbindung benötigt eine riesige Menge an Ressourcen, um sie zu initialisieren, also halte sie so niedrig wie möglich.

Anstatt für jeden Thread eine neue Verbindung zu erstellen, verwenden Sie eine einzige Verbindung und verteilen Sie Ihre Abfrage! Sie können Ihre Anfragen auf diese Weise verteilen! Sie können auch Massen einfügen verwenden, um eine riesige Menge an Dokumenten einzufügen.

+0

hinweis: meine while-schleife ist eine dummy-methode, wo ich entscheide werte meines dokuments einfügen. Meine Werte hängen von der Zeit ab, die nicht früh vorhergesagt werden kann. – Belhe001

+0

Wie Sie im zweiten Absatz erläutert haben, verwendet meine Methode threaded myMongoHelper, um nur eine Verbindung zu erstellen. Mein Mydbhelper verwendet das Objekt m zum Einfügen in einem Thread. Denken wir gleich? plz bieten Beispielcode. – Belhe001

+0

Überprüfen Sie den Code! DBCollection.insert akzeptiert einen Parameter vom Typ DBObject, List oder ein Array von DBObjects zum Einfügen mehrerer Dokumente gleichzeitig. –

Verwandte Themen