次のような状況でデータベースのパフォーマンスを向上させるためのヒントを探しています。(または、DBの再設計について考える必要があるかもしれません)。
私は50以上の異なるビデオスロットを備えたビデオスロットソーシャルアプリケーションを持っています。問題は、ユーザーがスピンするたびに、スロット情報をDBに保存する必要があることです。
現在、私は次の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
}}
}
)
- 必要なスロット検索を改善するために、「slots.slotId」にインデックスを作成する必要がありますか?
- または、DBの再設計を検討し、各ユーザースロットを別々のコレクションに保存する必要がありますか?ただし、たとえば、ユーザーログイン時に、すべてのコレクションを循環して、現在のユーザーのすべてのスロット情報をロードする必要があります。したがって、これは、ユーザーのログインごとに50以上のクエリを実行するのに適したオプションではないと思います。
助けていただければ幸いです。私はNoSQLを初めて使用しますが、NoSQLの方法で考えるのが難しい場合があります。前もって感謝します