性能: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议:副本集不提高写入性能,因为只有主要可以接受写入。 但是,通过设置分片群集,可以提高写入性能,因为写入将根据分片密钥分布在群集成员上。