0

在我们的数据库库log中发现很多慢查询log,这些log都是update操作,类如
2018-10-24T12:28:05.236+0800 I COMMAND [conn8457616] update QYZZANDMainDB.RoleTable query: { _id: “5BB478B3118BDB52632A26F0”, info.sceneInfos.id: 120 } update: { $set: { info.sceneInfos.$: { id: 120, intraday_buy_count: 0, passNum: 4, starIndex: 7 } } } keysExamined:1 docsExamined:1 nMatched:1 nModified:1 keyUpdates:0 writeConflicts:40 numYields:41 locks:{ Global: { acquireCount: { r: 43, w: 43 } }, Database: { acquireCount: { w: 43 } }, Collection: { acquireCount: { w: 42 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 790ms
2018-10-24T12:28:05.286+0800 I COMMAND [conn13453782] update QYZZANDMainDB.RoleTable query: { _id: “5BCBF1B2AE2AE06F45047916” } update: { $addToSet: { info.items: { advLevel: 0, auenchcastinfo: [], auenchexp: 0, baseLevel: 0, cardAdvLevel: 0, cardCGState: 0, cardExp: 0, cardLevel: 0, cardSkillLevel: 0, changegodlevelinfo: [], curNum: 1, haveCard: 0, id: 13003, intensifyCost: 0, mongodbID: “5BCFF4CEAE2AE06F45060C88”, panelPos: -1, patrnerLevel0: 0, patrnerLevel1: 0, patrnerLevel2: 0, patrnerLevel3: 0, trainATK: 0, trainCost1: 0, trainCost2: 0, trainHP: 0, trainMDEF: 0, trainPDEF: 0 } } } keysExamined:1 docsExamined:1 nMatched:1 nModified:1 keyUpdates:0 writeConflicts:46 numYields:47 locks:{ Global: { acquireCount: { r: 49, w: 49 } }, Database: { acquireCount: { w: 49 } }, Collection: { acquireCount: { w: 48 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 1304ms
我在查看问题的过程中发现这应该是我们设计的表不合理,单个文档的数据太大了,经过查询发现有100k以上的文档。
我想问下,文档的大小和插入操作效率之间的关系是怎么样的。
在对单条属性或者数组中的单个对象做频繁的update操作的场景中,文档应该怎么设计,文档大小应该限制的多少,如果是对整个文档做update操作的场景中,操作频率和文档大小之间又应该保持在一个什么样的关系。谢谢!
mongo版本3.2