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

我需要在mongo收集预防措施中每分钟插入1000个项目。

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

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

哪个是最好的方法来扩展这个?

  • 一台机器高RAM? 多less?
  • 许多机器与副本集和较低的RAM?
  • 也许分片?

您可以通过创build唯一索引来自动清除重复项。

例如:如果您想要在已经有一个具有相同first_name和last_name组合的文档的情况下拒绝文档,您可以创build一个像这样的索引:

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

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

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

要进一步提高执行批量插入时的性能,可以将write-concern设置为w: 0 。 这将导致您的应用程序将文档发送到数据库,而不必等待确认。

要解决您的其他build议:副本集不提高写入性能,因为只有主要可以接受写入。 但是,通过设置分片群集,可以提高写入性能,因为写入将根据分片密钥分布在群集成员上。