両方のアプローチは、MMORPGで使用されます。少なくとも古いゲームでは、すべてをメモリに保持し、ディスクを指すように定期的にチェックすることが最も一般的なオプションのようです。実装が非常に簡単で、スケーリングが非常に優れているという利点がありますが、信頼性を高めることは開発者次第です。SQLデータベースはACIDプロパティを提供します、信頼性を容易にをが、実装が全体的に複雑になり、スケーリングに問題が生じる可能性があります。
EVE Onlineは、すべてがSQLデータベースに保存されるMMOの例です。同時ユーザー数が約60,000でピークに達し、負荷に対応するために、長年にわたってデータベースサーバーに高価なハードウェアを捧げなければならなかったと思います。ただし、EVEは、ほとんどのMMORPGよりも多くのデータをユーザーごとに保存し、より頻繁で多様なトランザクションを保持しています。データベースのACIDプロパティにより、大規模で複雑なデータベース全体を常に一貫した状態に保つことができます。
たとえば、誰かが他のプレイヤーにアイテムを渡す場合を考えてみましょう。EVEのデータベースは、クラッシュまたは電源障害が発生した場合でも、アイテムが1人のプレイヤーのインベントリのみに収まることを保証します。つまり、あるプレイヤーのインベントリからアイテムを削除し、他のプレイヤーのインベントリに追加するデータベーストランザクションはアトミックです。トランザクションは完全に完了するか、まったく発生しません。アイテムがどちらのプレイヤーのインベントリにも両方にも存在しない状態になることはありません。
プレイヤーデータをメモリに保持し、定期的にチェックポイントを保持するMMORPGは、この原子性自体を実装する必要があります。これを行う1つの方法は、すべてのプレーヤーのデータを同時にチェックポイントし、最新のチェックポイントと見なされる前に新しいチェックポイントがディスクに完全にコミットされるようにすることです。また、ゲームでは、チェックポイントが設定されている間はプレーヤーデータが変更されないようにする必要があります。アクティブなプレイヤーが大量にいると、プレイヤーが気付くほどの遅延を引き起こすことなく、このすべてを行うことが課題になります。
一貫性の重要性を過小評価しないでください。ゲームを開発していると、多くのクラッシュが発生します。問題が無関係のバグが原因でゲームがクラッシュした場合ではなく、アイテムが消えたり複製されたりする理由を追跡する必要はありません。さらに、ゲームがライブになると、予想以上にクラッシュします。テスト下で完全に動作していたサーバーは、突然、全負荷で多数のバグを公開し、プレイヤーが期待していなかったことを行います。
ほとんどのMMORPGは、実際のゲームデータではなくても、アカウント関連情報にSQLデータベースを使用することに注意してください。ゲームの状態を一貫した状態に保つことよりもさらに重要なことは、課金状態の一貫性を保つことです。ゲームデータベースが破損する最悪のケースは、毎日のバックアップからデータベースを復元する必要があることです。アカウントデータベースが破損する最悪のケースは、すべてのチャージバックが原因で破産することです。
あなたのプロジェクトでは、おそらくどちらの方法でも行くことができます。同時ユーザーが1000人であっても、最近のSQL ServerがコモディティPCで処理できる限界を押し上げることはおそらくないでしょうが、多くはトランザクションの性質に依存します。SQLおよびリレーショナルデータベースの設計に精通している場合は、これで十分です。プレイヤーの現在のヒットポイントのようなものについては、これらのような統計は必ずしも一貫している必要はないので、定期的にデータベースに保存したいだけかもしれません。(PvPゲームでは...)モンスターHPのようなものをデータベースに保存しないでください。ほとんどのゲームでは、プレイヤーに関連するデータのみが永続的です。
一方、SQLウィザードでない場合は、メモリ内のすべてのデータを簡単に保持して、確実に動作させることができます。SQLデータベースは一貫性と信頼性を簡単にしますが、自動ではありません。データベースの設計が適切でないと、パフォーマンスが低下し、不整合が生じる可能性があります。トランザクションは、そうしない限りアトミックではありません。パラメータ化されたステートメントを宗教的に使用しないと、SQLインジェクション攻撃にさらされることになります。