首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用批量写入和upsert时,Mongo的性能会降低

使用批量写入和upsert时,Mongo的性能会降低
EN

Stack Overflow用户
提问于 2019-11-26 17:26:55
回答 1查看 2.8K关注 0票数 0

我正在使用mongo java driver 3.11.1和Mongo版本4.2.0进行开发,我还在学习Mongo。我的应用程序接收数据,并且必须插入或替换现有文档,即执行upsert。

到目前为止,每个文档的大小是780-1000字节,每个集合可以有超过300万条记录。方法1:我尝试对每个文档使用findOneandreplace,但保存数据花费的时间超过15分钟。方法-2我使用下面的方法将其更改为bulkwrite,这导致保存20000条记录大约需要6-7分钟。

代码语言:javascript
复制
List<Data> dataList;
dataList.forEach(data-> {
    Document updatedDocument = new Document(data.getFields());
    updates.add(new ReplaceOneModel(eq("DataId", data.getId()), updatedDocument, updateOptions));

  });
final BulkWriteResult bulkWriteResult = mongoCollection.bulkWrite(updates);

3)我尝试使用collection.insertMany,它需要2秒来存储数据。根据驱动程序代码,insertMany还在内部使用InsertMany使用MixedBulkWriteOperation来插入类似于bulkWrite的数据。

我的问题是-

a)我必须做upsert操作,请让我知道我哪里做错了。-在DataId字段上创建了索引,但性能差异小于2毫秒。-尝试使用W1的writeConcern,但性能仍然不变。

b)为什么insertMany的性能比批量写入更快。我可以理解几秒钟的差异,但是我不能找出insertMany的2-3秒和批量写入的5-7分钟的原因。

c)有没有什么方法可以解决这种情况。

EN

回答 1

Stack Overflow用户

发布于 2019-12-17 13:00:05

通过在DataId字段上添加索引,在更大程度上解决了这个问题。以前我在DataId字段上创建了索引,但在创建集合后忘记了创建索引。这个链接How to improve MongoDB insert performance帮助解决了这个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59047632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档