1

MongoDb 2.4.7

mongo-java-driver-2.11.2.jar

ウィンドウズ7

そのため、挿入のバッチを挿入してテストmongodbをロードして、処理できるスループットを判断しようとしています。一度に1つずつ挿入すると機能します:

...

MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    coll.insert(finalJobRecord); 
    finalJobRecord.removeField("_id");// wont work without because of duplicate key errors
}
conn.close();

これをバッチに変更すると、機能しません(重複キー例外が発生します):

...

MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

List<DBObject> basicDBObjects = new LinkedList<>();

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    basicDBObjects.add(finalJobRecord);
}
coll.insert(basicDBObjects);
conn.close();
4

1 に答える 1

0

{"recnum" : 99} を使用すると、同一のオブジェクトのリスト (すべてのリスト エントリが同じオブジェクトを参照する) になりますが、これは意図したものではないようです。for ループの反復ごとに新しい BasicDBObject を作成する必要があります。そうしないと、反復ごとに同じ jobRecord を変更することになります。

同じことが1つずつアプローチにも当てはまります。オブジェクトが変更される前にMongoに既に挿入されているため、異なる「recnum」フィールドを観察しています。

于 2013-11-13T21:51:59.023 に答える