我正在寻找有关如何在以下情况下提高数据库性能的提示。 (或许我应该考虑重新设计数据库)。
我有50多个不同视频插槽的视频插槽社交应用。问题是每次用户旋转时我都要将插槽信息保存到DB。
目前我有以下数据库结构:1个包含用户配置文件的集合以及插槽数组中的大量插槽子文档。
{
_id: 1,
firstName: John,
lastName: Smoth,
money: 1000,
aLotOfOtherUserInfo: true,
slots:
[
{
slotId: 1,
bet: 1,
lines: 25,
payout: 100,
reels: [...]
winnings: [...]
freeSpins: [...]
}
]
}
在每个用户旋转的任何插槽中,我必须完全更新插槽阵列中的插槽信息。该插槽位于 slotId 。
update(
{
"_id": 1,
"slots.slotId": 1
},
{
$set: {"slots.$":
{
"slotId":1,
aLotOfUpdatedSlotInfo: true
}}
}
)
非常感谢帮助。我是NoSQL的新手,有时很难用NoSQL方式思考。提前致谢
答案 0 :(得分:1)
如果您的插槽数据在每次“用户旋转”时始终无效,并且您每次都必须完全设置它,那么它可能在用户文档中正常工作。保存查询,必须从用户文档中查找“slots”id引用,然后更新“slots”文档。
是的,你不仅应该在slots.slotId
上有一个索引,而且还要有一个复合索引和_id以匹配你的实际查询:
db.user_profile.ensureIndex({_id:1, "slots.slotId":1})
这应该可以让您立即查找文档,并且再次设置整个插槽数组值非常容易。