使用Java异步驱动程序时,并非所有文档都插入MongoDB
我在试验mongodb异步驱动程序()时发现了一些奇怪的行为。我在底层代码中重现了这种奇怪的行为:使用Java异步驱动程序时,并非所有文档都插入MongoDB,java,node.js,mongodb,asynchronous,Java,Node.js,Mongodb,Asynchronous,我在试验mongodb异步驱动程序()时发现了一些奇怪的行为。我在底层代码中重现了这种奇怪的行为: import com.mongodb.async.SingleResultCallback; import com.mongodb.async.client.MongoClient; import com.mongodb.async.client.MongoClients; import com.mongodb.async.client.MongoCollection; import com.mo
import com.mongodb.async.SingleResultCallback;
import com.mongodb.async.client.MongoClient;
import com.mongodb.async.client.MongoClients;
import com.mongodb.async.client.MongoCollection;
import com.mongodb.async.client.MongoDatabase;
import org.bson.Document;
public class main {
public static void main(String [] args)
{
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("mongotest");
MongoCollection<Document> collection = database.getCollection("coll");
for(Integer i = 0; i < 100000; i++) {
Document doc = new Document("name"+ i.toString(), "TESTING");
collection.insertOne(doc, new SingleResultCallback<Void>() {
public void onResult(final Void result, final Throwable t) {
System.out.println("Inserted!");
}
});
}
while(true){
}
}
}
结果我得到了93062。每次跑步时,该数字会有所不同,但不会达到100.000。有人能解释一下为什么在我使用这段代码时,并非所有对象都正确地存储为MongoDB中的文档吗?我们在3台不同的机器上进行了测试,每台机器都暴露了相同的行为
我觉得这是一个与驱动程序相关的问题,因为接下来我使用node.js编写了一个类似的实验:
var express = require('express');
var MongoClient = require('mongodb').MongoClient;
var app = express();
var url = 'mongodb://localhost:27017/mongotest';
MongoClient.connect(url, function (err, db) {
for (var i = 0; i < 100000; i++) {
var name = "name" + i;
db.collection("coll").insertOne({
name: name
},function(err,results) {
if(err==null) {
console.log("Sweet");
}
});
}
});
module.exports = app;
var express=require('express');
var MongoClient=require('mongodb')。MongoClient;
var-app=express();
var url='1〕mongodb://localhost:27017/mongotest';
连接(url,函数(err,db){
对于(变量i=0;i<100000;i++){
var name=“name”+i;
数据库集合(“coll”).insertOne({
姓名:姓名
},函数(错误,结果){
if(err==null){
console.log(“Sweet”);
}
});
}
});
module.exports=app;
与java代码相比,此代码的运行时间更长,但当代码完成时,集合中会像预期的那样有100.000个文档
有人能解释一下为什么java示例不是这样,并可能提供一个解决方案吗?您什么时候运行了
db.getCollection(“coll”).count()
来检查插入结果的
检查结果时,插入过程可能尚未完成
2016-02-19 15:00编辑 我做了同样的测试,得到了同样的结果 但是当我改变下面这行的时候
Document doc = new Document("name"+ i.toString(), "TESTING");
到
它插入了100000个文档。我在3分钟后检查了它,然后在10分钟、30分钟后再次检查。。。这个数字没有变化,所以我认为可以得出这样的结论:它停止了有意义的工作。有趣的是,在第二个示例中,它确实插入了100000个文档。你对这种奇怪的行为有什么解释吗?
Document doc = new Document("name"+ i.toString(), "TESTING");
Document doc = new Document("_id", "name"+ i.toString());