PlayFabのデータ保存
始めに
オンライン接続した複数人によりワールドを共有するゲームを作りたいと思っている。 その為にはデータの共有方法を考える必要がある。 例えばクラウドサービス等での構築が考えられるが、管理が大変だし性能はそこまで要らない予定をしている。
利用している PlayFab 上でもデータの保存が出来るが、 どの程度まで出来るのかを調べる事にする。
条件(予定)
- ワールド数は10
- データ量はワールド毎に圧縮後1MB以内
- 読み込みはワールドに入る際に1回
- 既に誰かがワールドに参加中なら、そのプレイヤーから取得
- 保存は5分に1回
- ワールドで遊ぶ誰か一人が代表して書き込み
- 5分以内のロールバックが起こりうるが許容。
※ PlayFab のマッチングは最大100人
タイトルに属するデータ
タイトルオブジェクト
- 10個のkey x 2000バイト(json)
- CloudScriptで取得および更新する。
- プレイヤーにアクセス権限を与える事は出来るが推奨されない。
- 更新後の同期は、データ量が小さければ数秒以内
タイトルデータ
- タイトルデータ全体で1MB
- 1000のペア
- 内部データも1000のペア
https://qiita.com/_y_minami/items/3396f832d868d52bbbaf
タイトルデータは値を設定してから反映されるまで、最大で15分のタイムラグがあります。そのため、タイトルデータは動的に更新されるようなデータの管理には適しません。
タイトルエンティティオブジェクト
- 使うべきではない物のようだ。
- 設定UIは無い。
- CloudScriptで取得および更新する。
タイトルエンティティファイル
https://learn.microsoft.com/en-us/gaming/playfab/features/entities/entity-files
- 10個
- サイズ上限は無く、タイトル全体での総量 50TB により制限
プレイヤー毎のエンティティファイルには登録UIがあるが、タイトルにはない。 https://community.playfab.com/questions/65017/title-entity-file-upload-in-game-manager.html
- スクリプトでやれとのこと
プレイヤーがタイトルデータを取得する。 https://community.playfab.com/questions/54481/can-a-player-gets-a-file-of-a-title-entity.html
- スクリプトでやれとのこと
更新速度
- Azure CDN 上に保存される物なので同様と思われる。
- キャッシュから読み込みと元データから読み込みのモードがある。
プレイヤーに属するデータ
プレイヤーオブジェクト
- 5個 x 1000バイト
- マスタープレイヤーとタイトルプレイヤーで別のカウント
プレイヤーファイル
- 10個
- サイズ上限は無く、タイトル全体の総量 50TB で制限
- マスタープレイヤーとタイトルプレイヤーで別のカウント
グループ
- プレイヤー毎にグループ10個以内とする事が推奨されているが制限ではない。
グループオブジェクト
- 5個 x 1000バイト
共有グループデータ
- 10個
- 全体で300KB?更新の総量が600KB?この辺は良く分からず
グループエンティティオブジェクト
- 5個 x 1000バイト
グループエンティティファイル
- 10個
- サイズ上限は無く、タイトル全体の総量 50TB で制限
その他
- 以下も強引にデータ領域として使えそうではある。
- ニュース
- ランキング
- 統計情報
- CloudScript
- 1MBまで
- カタログ
- アイテムごと
- 表示名
- 説明文
- 価格
- カスタムデータ
- プレイヤー毎のアイテム数
- アイテムごと
- 仮想通貨
- プレイヤー毎
https://community.playfab.com/questions/53372/read-and-write-frequently-updated-data.html
少数のソースから更新され、少数のソースによってアクセスされるデータである場合は、エンティティ オブジェクトまたはファイルが最適である可能性があります。
すべてのプレーヤー間で共有する必要がある大規模なデータの場合は、通常、Content API メソッドを使用することをお勧めします
CDNについて
https://learn.microsoft.com/ja-jp/gaming/playfab/features/pricing/meters/file-reads
https://qiita.com/simplestar/items/47dcfaa213a62a7aa360
最後に
条件を満たすのはタイトルエンティティファイルとなる。
しかし10個までなので、ワールド毎にファイルを分けると上限一杯使ってしまう。 複数ワールドを1ファイルに束ねる事も考えられるが実装は複雑になる。
次点としてはプレイヤーファイルになる。しかしこの場合はプレイヤーが所有するワールドという事になりゲーム性が変わる。
これらを踏まえて設計を進める。