gpt4 book ai didi

java - Morphia 在插入具有预定义 ID 的对象时停止

转载 作者:可可西里 更新时间:2023-11-01 10:44:05 26 4
gpt4 key购买 nike

我需要将具有预定义 _id(长整型)的对象列表插入到集合中。AdvancedDatastore 中单个对象的 insert(object) 方法效果很好。当我尝试使用接受 Iterable 的 insert() 方法时,麻烦就开始了。这是一段示例代码:

try {
advancedDatastore.insert("collection_name", feeds, WriteConcern.ERRORS_IGNORED);
} catch (Exception e) {
e.printStackTrace();
}

我猜这段代码应该忽略错误(集合中已经存在具有重复 ID 的对象)并继续处理下一项,但它没有。并且不会引发异常。

谢谢!

更新:

此代码插入所有元素,但未打印出“1”。

try {
System.err.println(0);
advancedDatastore.insert("collection_name", feeds, WriteConcern.ERRORS_IGNORED.continueOnErrorForInsert(true));
System.err.println(1);
} catch (Exception e) {
e.printStackTrace();
}

更新2:

抱歉,代码正确完成并打印出“1”,但它比单次插入花费的时间多得多。在我的例子中,35_000 逐一插入 - 3 秒,批量 - 100+ 秒

更新3:

到目前为止,对我来说处理这个问题的最好方法是为 mongodb 使用 native java 驱动程序。1st 我将我的对象列表转换为 DBObject 列表:

final List<DBObject> dbObjects = new ArrayList<DBObject>();
for (MyObject object: objectList) {
dbObjects.add(morphia.toDBObject(object));
}

然后我通过 mongo 数据库实例插入:

db.getCollection("collection_name").insert(dbObjects, WriteConcern.UNACKNOWLEDGED.continueOnErrorForInsert(true));

插入 150_000 个对象的性能:

  • 本地数据库插入:2-3 秒
  • 通过 Morphia 的 insert(object):15 秒以上
  • 通过 Morphia 的插入(可迭代):400+ 秒

我们将不胜感激。

最佳答案

它对我来说是这样的

final List<DBObject> dbObjects = new ArrayList<DBObject>();
try {
TypedQuery<RegistroCivil> consulta = em.createQuery("select p from RegistroCivil p", RegistroCivil.class);
List<RegistroCivil> lista = consulta.getResultList();
for (RegistroCivil object : lista) {
dbObjects.add(morphia.toDBObject(object));
}
long start = System.currentTimeMillis();
ds.getCollection(RegistroCivil.class).insert(dbObjects);
//ds.save(lista);
long end = System.currentTimeMillis();
tmongo = end - start;

关于java - Morphia 在插入具有预定义 ID 的对象时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20048983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com