2012-01-23 12 views
5

とサーバー側のキャッシュを実装する方法、私は(AMFPHPを使用して)サーバー側のプログラミングのために、データを保存するためのPHPとMySQLを使用しています私のブラウザのために(Facebookのプラットフォーム用)ベースのFlexゲームをPHP

私がいたので、ゲーム開発とPHPの両方に非常に新しく、私は自分のゲームが走っているのを見たいと思っていました。私は、フェッチのためにDBにヒットした非常に醜く汚れたコードですべてのサーバー側コーディング(amfPHPサービス)統計と在庫)。

これは効率的ではないので、私はキャッシングを実装するためにPHPで利用できる最良の方法を見つけ出しました。キャッシングすることで、私はプレーヤーの最新のゲーム状態を保存するためにDBを常に叩きたくないのですが、セッションの最後に保存するだけです(プレーヤーがアプリを離れるとき)。

一般的に、私のゲーム/アプリの流れがこの

  • のようなものであるプレイヤーは、FB
  • からアプリ/ゲームを起動
  • 認証
  • ロード・ユーザー・セッション(以前に保存されたゲーム状態).Thisがユーザーを取得含み彼の在庫、現在のアクティブなクエストなど、また市場のアイテム、オファー、落とし物などの静的な情報などの統計情報を表示します
  • 変更があったときなどにゲームの状態を更新します。ゲームでは、最も一般的にはユーザーがクリックすると収集する、エネルギーを消費する、コインを追加する、経験や報酬などを与えるためにいくつかの建物に設置されています。

「マーケットアイテムとその価格とグラフィックアセットなど」のように、すべてのプレーヤーに共通のデータであるものはほとんどなく、プレーヤー固有のデータもあります。

私にはいくつかのアイデアがあります。私は、自分の考えているものが良いか悪いか、あるいは良い方法があれば、専門家の助けが必要ですか?

キャッシュに静的(共通)データを永久に保存し、クリア/アップデートする管理パネルがあります 認証後、データが取得され、セッションが終了するまで(JSONオブジェクトとして)キャッシュに保存されます。セッションが終了した後、キャッシュデータをDBに保存します。

ここではAPCを使用します。信頼できると思いますか?

ウェブサーバがクラッシュしたときにキャッシュデータが失われてしまったので、私はセッション中にそれらを保存しようと考えていたと思いますが、PHPがファイルを保持していると思います。/Oはもうお勧めできませんか?それとも容認できますか?

また、ゲームの状態をシリアル化されたオブジェクトに保存することがどれほど良いと思いますか?

答えて

4

アプリケーションのプロファイルを作成し、DBをボトルネックと認識しましたか?おそらく問題にならない可能性の高いものを最適化しようとしているようです。

DBからデータを取得する速度は非常に速いです。特にトランザクションを使用する場合、DBへの書き込みは少し遅くなる可能性があります。しかし、DBは依然として1秒あたり多くの書き込み/更新呼び出しを容易に処理できます。

パフォーマンスのボトルネックとしてDBへの書き込みを本当に特定しない限り、ゲーム全体のセキュリティと安定性を低下させる早すぎる最適化を行っているようです。セッションが破棄されるため、再度、ユーザーの進捗状況を失いたくはありません。次にNoSQLのようなものをよく見てください。

+0

私は約30-50Kの同時ユーザーがピーク時にこのゲームをプレイすることを期待しています。 DBはまだ勧められますか? NoSQLをありがとうございますが、私はそれを選択しないかもしれませんが、それは私のために別の学習かもしれません。 –

+0

同時ユーザー数はそれほど重要ではありません。それはあなたが得るDBトランザクションの量に依存します...また、DBシステムは、ほとんどの場合スケーラブルです。だからあなたのコードが1つのDBよりも速いかもしれませんが、DBだけでなく、DBクラスターに切り替えることもできます。 – bummzack

+0

@ dev2dev PostgreSQL(無料)、Oracle、またはMsSQLを検討するとよいでしょう。クリティカルなパフォーマンスパッチ(クエリオプティマイザなど)は、現時点ではMySQLの実験ビルドにのみ含まれています。適切なオプティマイザやパーティション化されたビュー/テーブルのようなものは、あなたが本当に高いスケールを持っているときに大きな違いをもたらします。 –

関連する問題