膨大な数のジャンルがあるため、あなたの質問は本当に広範ですが、ここにプロのソフトウェア開発者の視点があります。
使用するデータ永続化メカニズムを決定するために使用する基準のリストを提供しました。それらは:
- プロジェクトのサイズ。
- ゲームがターゲットとするプラットフォーム。
- データ構造の複雑さ。
- 多くのプロジェクト間でのデータの移植性。
- データにアクセスする頻度
- 同じアプリケーションの複数のタイプのデータ
- 何を使用するかを決定する際に、あなたが考える他のポイントは興味深いものです。
まず、どのオプションを使用できるかを確立する必要があります。言語やテクノロジを指定しなかったため、正確に言うのは難しいですが、おそらくXMLとリレーショナルデータベースストレージのどちらを使用するかを決めようとしているでしょう。
重要な違いは、XMLは実際にはシリアル化技術ほどストレージメカニズムではないということです。これは、ゲームのメモリ内構造を表現する方法です。それを考えると、あなたは本当にフラットファイル対リレーショナルデータベースストレージについて話している。これらは唯一のオプションではありませんが、最も一般的であるため、使用します。
フラットファイルの場合:
- XML
- JSON
- YAML
- XAML
- プレーンテキスト
データベースの場合:
- SQLサーバー
- MySQL
- DB2
- オラクル
- もっともっと
編集:あなたは、ファイルとリレーショナルデータベース以外の他のタイプのメカニズムについて尋ねました。私が定期的に使用しているのを見た唯一の他の注目すべきタイプのデータベースは、本質的にキーバリューベースの「バークレースタイル」データベースです。これらは、Bツリーを使用してデータを構造化する傾向があるため、検索が高速になります。これらは、必要なものを正確に把握している構成/設定の検索に最適です(たとえば、 "レベル1"のすべてのテレメトリデータを提供します)。
これですべての基本事項が完了したので、いくつかの基準を見てみましょう。
プロジェクトのサイズ。
意見の相違はあるかもしれませんが、プロジェクトのサイズが必ずしもデータ永続化メカニズムに大きな影響を与えるとは限りません。必要なメカニズムからのデータを保存/ロードする関数の再利用可能なライブラリを構築する必要があります。必要に応じて永続化メカニズムを簡単に変更できるように、抽象化レイヤーを実装することもお勧めします(アダプターパターンを確認してください)。
とはいえ、小規模なプロジェクトでは、ファイルシステムでXMLを使用することで十分に機能する可能性がありますが、プレーヤーがデータを自由に変更できないように、セキュリティの問題(暗号化など)に対処する必要があります。
ゲームがターゲットとするプラットフォーム。
プラットフォームも大きな問題にはなりません。ターゲットプラットフォームよりも開発プラットフォームの方が重要です。その理由は、一部の言語では、特定のタイプのマークアップまたはデータベースを他の標準のボックスよりも適切に処理できるためです。これは、ほとんどの言語で上記のいずれも使用できなかったということではありませんが、使用可能なサポートされているツールを使用することが最適な場合があります。どのプラットフォームでもフラットファイルとXMLの解析がサポートされますが、モバイルプラットフォームでは、可能であればバイナリシリアル化を検討するか、少なくともXMLをストレージ用に最適化することをお勧めします。
データ構造の複雑さ。
これは一種のトリッキーなものです。リレーショナルデータベースは、エンティティとその関係を保存するだけの場合に最適です。ファイルシステム上のファイルを使用するよりも、リレーショナルストレージリポジトリを使用して構造を強化する能力が優れています。エンティティ間の関係のタイプと、それらを変更する頻度、または関連するエンティティを見つける頻度を考慮してください。非常に複雑な構造の場合は、データベースルートを使用することをお勧めします。
多くのプロジェクト間でのデータの移植性。
移植性に関しては、データベースはファイルよりも当然重いという事実を考慮する必要があります。インストールと設定のオーバーヘッドがあり、プラットフォームごとに異なるデータベースを使用できます。SQLiteはこれを回避するのに非常に良い方法です。ただし、移植性に関しては、XMLのようなファイルベースのソリューションを使用する方が簡単です。
編集:あなたのコメントの一つであなたが移植性について言及した他のいくつかの懸念があります。最終的には、データを製品やファイルの種類に強く結びつけたくありません。コンパイルまたはロード時にデータベース/ファイルシステムに簡単に解析および保存できる何らかの抽象形式(タブ区切りファイル、XMLなど)でストックデータ(レベル、敵など)を保存できる場合、最終的に最適です。時間。これは、気まぐれにストレージメカニズムを交換し、解析部分を書き換えることができることを意味します。
データにアクセスする頻度
何らかのキャッシュメカニズムがない限り、大量のデータアクセスは大量のI / Oを意味します。データベースは構造をメモリに保持し、データの操作と取得に最適です。データを常に永続化している場合は、データベースを使い続けることをお勧めします。
同じアプリケーションの複数のタイプのデータ
ボリュームは確かに考慮事項ですが、数千または数百万のオブジェクトを永続化することを話さない限り、ファイルシステムはソリューションとして受け入れられます。
ゲームの種類
構築するゲームのタイプは、選択するプラットフォームに大きな影響を与える可能性があります。ええ、ほとんどのクライアント専用のシングルプレイヤーゲームの場合、圧縮または暗号化されたファイルシステムベースのソリューションを使用しても問題ありません。ただし、オンラインコンポーネントを使用したゲームの場合、それはおかしいでしょう。データベースのルートに移動して、頭痛の種を省いてください。バックエンドクラスタを使用して、サーバーにすべてのデータを管理させます。
このフィードバックの一部が役に立てば幸いです。それは決して完全に包括的なものではなく、決定を下すのは最終的にあなた次第ですが、私の解説はあなたに考えるべきいくつかのことを与えるべきです。
編集:ハイブリッドなアプローチをとることが非常に理にかなっている場合があります。たとえば、MMORPGを開発しているとします。クライアント側では、他のプレーヤーに関するキャッシュデータを非リレーショナルデータベースに格納できます(前述のとおり)。サーバー側では、すべてのゲームデータをリレーショナルデータベースに保存して永続化します。そして、クライアント側では、アクセスしやすくするために、おそらくログデータや構成データなどをXML /フラットファイルに保存します。
別のポスターは、データベースに本番用のデータを保存している場合でも、代わりに開発用にフラットファイルを使用できる方法があると便利な場合があることを述べています...ミックスから別の製品を削除する方が簡単です。