我有一個index
集合包含很多條款,並且包含來自其他集合的標識符的字段items
。目前該字段存儲了一系列文檔,並且文檔是由$addToSet
添加的,但我遇到了一些性能問題。看起來$unset
操作執行速度更快,所以我打算將文檔數組更改爲嵌入文檔的文檔。
我是否認爲$ set/$ unset字段比推/拉嵌入文件到數組最好?
編輯:
後的小測試中,我們看到的設置/取消4倍的速度。在另一個 手中,如果我使用object而不是array,那麼計算 屬性的數量(vs數組的長度)有點困難,並且我們是 計數很多。但我們可以考慮每次使用
$set
和 添加一個項目數量的字段。
這是當前索引的文件:
{
"_id": ObjectId("5594dea2b693fffd8e8b48d3"),
"term": "clock",
"nbItems": NumberLong("1"),
"items": [
{
"_id": ObjectId("55857b10b693ff18948ca216"),
"id": NumberLong("123")
}
{
"_id": ObjectId("55857b10b693ff18948ca217"),
"id": NumberLong("456")
}
]
}
頻繁更新操作: *刪除項目:{$pull:{"items":{"id":123}}}
*新增項目:{$addToSet:{"items":{"_id":ObjectId("55857b10b693ff18948ca216"),"id":123,}}}
*我可以改變$addToSet
到$push
和檢查重複如果表演效果更好
這就是我計劃要做的:
{
"_id": ObjectId("5594dea2b693fffd8e8b48d3"),
"term": "clock",
"nbItems": NumberLong("1"),
"items": {
"123":{
"_id": ObjectId("55857b10b693ff18948ca216")
}
"456":{
"_id": ObjectId("55857b10b693ff18948ca217")
}
}
}
*刪除項目:{$unset:{"items.123":true}
*新增項目:{$set:{"items.123":{"_id":ObjectId("55857b10b693ff18948ca216"),"id":123,}}}
有關信息,論文操作與pymongo作出(或可以用PHP來完成,如果有一個很好的理由),但我不」牛逼認爲這是相關
經過一些測試(在一小部分文檔上)後,我們看到的過程快4倍。但我們會做更大規模的測試。另一方面,如果我使用對象而不是數組,那麼計算屬性的數量(與數組的長度)有點難。 (我剛剛編輯我的問題補充說) – Asenar
這是正確的。這將是性能提升的折衷 – daveh