我需要每分钟在mongo集合中复制1000个项目。
使用findAndUpdate / Upsert,服务器性能会下降很多。
保存项目而不检查重复项服务器不会变慢,但我需要一个cronjob来删除所有重复的项目。
这是扩大规模的最佳方法吗?
答案 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
。这将使您的应用程序将文档发送到数据库,而无需等待确认。
解决您的其他建议:副本集不会提高写入性能,因为只有主节点可以接受写入。但是,您可以通过设置分片群集来提高写入性能,因为写入将根据分片键在群集成员上分发。