性能:findAndUpdate VS直接保存并删除重复项

时间:2013-11-23 17:48:25

标签: node.js mongodb mongoose

我需要每分钟在mongo集合中复制1000个项目。

使用findAndUpdate / Upsert,服务器性能会下降很多。

保存项目而不检查重复项服务器不会变慢,但我需要一个cronjob来删除所有重复的项目。

这是扩大规模的最佳方法吗?

  • 一台高RAM的机器?多少钱?
  • 许多具有副本集和较低内存的计算机?
  • 也许是分片?

1 个答案:

答案 0 :(得分:2)

您可以通过创建unique index自动清除重复项。

示例:如果要在已存在具有相同first_name和last_name组合的文档时拒绝文档,则应创建如下索引:

db.addresses.ensureIndex( { "first_name": 1, "last_name": 1 }, { unique: true } )

如果您的集合中已有重复项并且希望在创建索引时删除它们,则还需要设置dropDups选项:

db.addresses.ensureIndex( { "first_name": 1, "last_name": 1 }, { unique: true, dropDups:true } )

要在进行批量插入时进一步提高性能,可以将写入关注设置为w: 0。这将使您的应用程序将文档发送到数据库,而无需等待确认。

解决您的其他建议:副本集不会提高写入性能,因为只有主节点可以接受写入。但是,您可以通过设置分片群集来提高写入性能,因为写入将根据分片键在群集成员上分发。