如何在不创建新的mongodb连接的情况下插入文档?

时间:2016-11-29 08:11:34

标签: java multithreading mongodb

我正在尝试使用mongodb作为数据库开发一个java项目。 我有2个方法(线程,没有线程)

    //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();

        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 shell在执行代码时显示 XX连接现已打开,默认情况下会在java执行结束时终止所有连接。

所以我想知道,

  1. 打开连接会影响mongodb数据库以及如何?
  2. 是否可以在插入后终止线程以减少连接数?
  3. 对于专门用于插入的mongodb操作,线程是否更好?
  4. 请改进我的代码。

1 个答案:

答案 0 :(得分:0)

我将一起回答所有这些问题,每个新连接都需要大量资源才能进行初始化,因此请尽量保持这些资源。

不是为每个线程创建新连接,而是使用单个连接并分发您的查询!你可以用这种方式分发你的查询!您也可以使用批量插入来插入大量文档。

    DBCollection coll = mongoClient.getDB( "mydb" ).getCollection("mycoll");
    ArrayList<BasicDBObject> dbos = new ArrayList<BasicDBObject>();
    while(id>0){
        dbs.add(new BasicDBObject());
        id--;
    }
    coll.insert(dbos);