MongoDB批量插入已存在许多文档的位置

用户949300

我在MongoDB中插入了一些大型文档(〜100个),每个文档约10个字段。但是其中许多(也许全部,但通常为80%左右)已经存在于数据库中。这些文档代表了接下来几个月中即将发生的事件,我每两天更新一次数据库。因此,大多数事件已经在那里。

任何人都知道(或想猜测)是否会更有效:

  1. 执行批量更新,但continueOnError = true,例如

db.collection.insert(myArray, {continueOnError: true}, callback)

  1. 单独插入,首先检查_ID是否存在?

  2. 首先进行大移除(例如db.collection.delete({_id: $in : [array of all the IDs in my new documents] }),然后进行大容量插入?

我可能会做#1,因为那是最简单的,我不认为100个文档那么大,所以没关系,但是如果有10,000个文档呢?如果重要的话,我正在使用node.js驱动程序在JavaScript中进行此操作。我的背景是在Java中,异常耗时,这是我要询问的主要原因-“ continueOnError”选项会很耗时吗???

添加:我认为“ upsert”没有意义。那是为了更新单个文档。就我而言,代表即将发生的事件的单个文档没有更改。(嗯,也许是,这是另一个问题)

发生的情况是将添加一些新文档。

斯坦尼

我的背景是在Java中,异常耗时,这是我要询问的主要原因-“ continueOnError”选项会很耗时吗???

批量插入ContinueOnError标志仅影响批处理的行为:不会处理遇到的第一个错误,而是将处理整个批处理。

在MongoDB 2.4中,批处理只会出现一个错误,它将是遇到的最后一个错误。这意味着,如果您确实关心捕获错误,则最好进行单个插入。

批量插入与单个插入相比,主要节省的时间是减少网络往返。驱动程序无需将插入的每个文档发送到MongoDB服务器的消息,而是可以将批量插入细分为最多服务器MaxMessageSizeBytes可接受的数量mongod(当前为48Mb)。

散装插件是否适合此用例?

考虑到您只需要插入100份(甚至1000份)文档(其中80%已经存在)的用例,使用批量插入可能不会有很大的好处(特别是如果此过程仅每隔几天执行一次)。您的小插页将成批合并,但是实际上不需要将80%的文档发送到服务器。

我仍然倾向于使用批量插入而ContinueOnError不是使用删除和重新插入的方法,但是考虑到要处理的文档数量和实际需要插入的百分比,批量插入可能是不必要的早期优化。

我建议使用不同的方法进行几次运行,以了解对您的用例产生的实际影响。

MongoDB 2.6

值得一提的是,MongoDB 2.5开发系列(将在2.6生产版本中达到顶峰)将显着改善批处理功能。计划的功能包括对批量更新的支持,并累积每个文档的错误,而不是每个批次的单个错误。

新的写命令将需要更改驱动程序来支持,但可能会更改上述某些假设。例如,ContinueOnError使用新的批处理API,您最终可能会获得80%的重复ID作为批处理ID的结果。

有关更多详细信息,请参阅MongoDB问题跟踪器中的父问题SERVER-9038

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将新元素插入到已存在的mongodb中并从json文件更新已存在的文档?

来自分类Dev

将许多文档插入到空集合中,如果mongodb中已经存在具有相同键的文档,则进行更新

来自分类Dev

MongoDB批量运算符,如果不存在则插入

来自分类Dev

如何在文档存在时将文档批量插入 ElasticSearch 而不更新

来自分类Dev

结果后插入许多文档

来自分类Dev

MongoDb替换文档并在不存在时插入

来自分类Dev

更新批处理文档(如果存在),否则插入MongoDB

来自分类Dev

MongoDB查找文档(如果存在)-更新其他-插入

来自分类Dev

在表上进行批量插入之前,请检查行或ID是否已存在

来自分类Dev

插入许多文档后,在node.js中关闭mongodb连接

来自分类Dev

MongoDb批量插入限制问题

来自分类Dev

MongoDB批量插入忽略重复

来自分类Dev

在MongoDB中批量插入GridFS

来自分类Dev

批量插入MongoDB和NodeJ

来自分类Dev

在Replicaset上批量插入MongoDB

来自分类Dev

mongodb 并发插入文档

来自分类Dev

MongoDb索引已存在

来自分类Dev

MongoDb索引已存在

来自分类Dev

在Mongodb服务器中批量插入(共1000个文档)是GCP中的1 IOPS,还是1000 IOPS?

来自分类Dev

更新MongoDB中的许多文档(新架构)

来自分类Dev

用mongoDB插入子文档

来自分类Dev

mongodb获取最后插入的文档

来自分类Dev

使用R批量插入/更新到mongoDB

来自分类Dev

Mongodb ID关于批量插入性能

来自分类Dev

在流星或节点中批量插入mongodb

来自分类Dev

在MongoDB中批量插入原子吗

来自分类Dev

Python3,MongoDB仅在文档不存在时才插入

来自分类Dev

Node.js和MongoDB(如果存在文档完全匹配),请忽略插入

来自分类Dev

仅当MongoDB中不存在新文档时如何插入

Related 相关文章

热门标签

归档