前提・実現したいこと
開発ツールはUnity(2018.2.2f1)言語はC#での開発を前提とさせて頂きます。
現在、スマートフォン向けの囲碁のオンライン対戦ゲームを制作中なのですが、NoSQLデータベースのFirebase Realtime Databaseを使ってランダムマッチング機能を実装していて、本当にこのデータベース構造でいいのかと疑問に思いました。
- 対局室一覧(Games)
"Games" : { "dummyGame1" : { "blackUser" : { "achievement" : "第1期 最強位戦 優勝", "name" : "dummy1", "rating" : 3500.0, "strength" : 10 }, "boardSize" : 9, "mainTime" : [ 180.0, 180.0 ], "moveList" : [ { "color" : 0, "isKo" : false, "koIndex" : -1, "moveCount" : 1, "putIndex" : 40 } ], "result" : "Draw", "spectators" : [ "dummy3" ], "state" : "Finish", "whiteUser" : { "achievement" : "第1期 最強位戦 準優勝", "name" : "dummy2", "rating" : 3400.0, "strength" : 10 } }, "dummyGame2" : { ... }, "dummyGame3" : { ... } }
- 登録ユーザ一覧(Users)
"Users" : { "dummy1" : { "achievement" : "第1期 最強位戦 優勝", "name" : "dummy1", "rating" : 3500, "strength" : 10 }, "dummy2" : { "achievement" : "第1期 最強位戦 準優勝", "name" : "dummy2", "rating" : 3400, "strength" : 10 }, "dummy3" : { ... }, "dummy4" : { ... }, "dummy5" : { ... } }
- 対局待ちユーザ一覧(Waiting)
"Waiting" : { "dummy4" : { "boardSize" : 9, "rating" : 3000 }, "dummy5" : { "boardSize" : 9, "rating" : 2800 }, "dummy6" : { ... }, "dummy7" : { ... } }
QiitaのFirebase記事やteratailの質問など一通り読みましたが「これだ!」という内容のものが見当たらず。
質問したいポイントは以下の3つです。
- 対局待ちユーザが2人以上、かつレーティング差が400未満のときに対局室一覧に入れて対局開始!という流れで構成していますが、APIの呼び出し回数が多いのではないか(※対局待ちユーザ一覧から相手のユーザIDを参照 -> ユーザ一覧からそのユーザIDを検索して対局室一覧に書き込むため)
- Games/gameIdツリー以下(今回の場合、gameIdはdummyGame1)のmoveListが着手情報ですが、gameIdツリー以下を呼び出すたびにmoveList以外も読み込まれるので分離したほうがいいのではないか
- 同じくGames/gameIdツリー以下のmainTimeは残り時間情報(float配列)ですが、着手情報に含めてしまったほうがいいのではないか
この3つでかなり頭を悩ませています。皆さんならどういう構造にするのかを教えて頂けると非常に助かります。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/21 05:23