2

私の頭はデータベースについて読んで爆発しています。どちらを選択するかは、特定のユースケースによって異なることを理解しています。だからここに私のものがあります:

  • 私はウェブアプリを持っています。ゲーム。
  • レベルベースで、前に進むことはできますが、戻ることはできません。ただし、プレイした各レベルから続行できます。たとえば、レベル2を終了してから、レベル3をプレイします。次に、Level3を再度起動し、Level3bとして保存します。これで、Level3とLevel3bから続行できます。
  • 一度に再生できるレベルは1つだけです。
  • サーバーには、「progress」、「choices」、「vars」の3つのデータ配列が格納されます。
  • レベルをプレイしている間に変更され、最初から始めたいときに備えて冷蔵保管されます。

現在のMySQLのセットアップは次のとおりです。

  • テーブル「saves」は、各セーブゲームのメタデータ、重要なのはそれが属するsaveIDとuserIDを保持します。
  • 各データ配列には、対応するテーブルがあります。
  • プレーヤーが選択した場合、挿入は次のようになります。

    INSERT INTO choices VALUES saveid=:saveid, choice=:choice
    
  • したがって、アレイは次のことを行うことで再構築できます。

    SELECT * FROM choices WHERE saveid=:saveid
    
  • レベルが終了すると、データ配列はシリアル化され、これ専用の3つの列を持つ「saves」テーブルに格納されることにより、コールドストレージに配置されます。
  • それらの値は、他の3つのテーブルからクリアされます。
  • プレーヤーがLevel3bからLevel4を開始すると、レベル4の新しいsaveIDを使用していても、シリアル化された配列が「saves」テーブルからフェッチされ、シリアル化されずにそれぞれのテーブルに戻されます。

これがある程度理解できることを願っています。私はそれを考えます:

  • 読み取りよりも多くの書き込みがあります
  • プレーヤーは自分のデータしか操作できないので、それを正しく理解していれば、一貫性は必要ありません。
  • それぞれのデータ配列にデータを入力するには、各テーブルを個別に読み取る必要があるため、(m)JOINSを実行することはないと思います。
  • ですから、リレーショナルDBのように多くを必要とするとは思いません。
  • インサートが小さいので、ほとんどの場合、DBにとっては本当に軽い負荷になるはずです。

  • データストレージは信頼できるものでなければなりません!私たちが定期的にセーブゲームを失い始めたら、プレイヤーが私たちに固執することはないと思います。ここではミッションクリティカルなものを扱っていないので、Redisのディスクへの毎秒のフラッシュで十分だと思います。ゲームがプレーヤーの最後の1つか2つのアクションを忘れた場合、それは悪くありません。セーブゲーム全体を忘れないでください。

私のユースケースのDBについてアドバイスしてもらえますか?MySQLを使い始めましたが、CouchDB、MongoDB、Riak、Cassandraについて読みました。データセットがRAMを超えると、Redisはひどく劣化するように見えるため、Redisは視野に入れていないと思います。しかし、私はすべてにオープンです。私はまた、MySQLを使い続けるかPostgreSQLに行くと言っている人にも門戸を開いています。

また、ストレージの設定方法についての批判も受け入れます。あなたが言うなら:カサンドラを選んで、このようにそれを保存してください、私は聞きます。

これは健全性チェックです。ゲームが公開される前にDBを変更できるのはこれが最後であり、最後にやりたいのは、スケーリングが悪いために3か月以内にDBを交換する必要があるためです。

そうそう、アプリはJavascriptで書かれており、サーバーとの通信はPHPを介して行われます。

4

1 に答える 1

0

私はあなたがデータベースについてあまり心配する必要はないと思います-あなたが最初から大規模なユーザーベースを持っていると確信していない限り(ウェブアプリは一般的に一夜にして有名になることはありません)。

知っていること(MySQL)を続行する方がはるかに良いでしょうが、すべてのデータベースコマンドを別のラッパークラスに保持します(とにかく実行する必要があります)。これを行う場合、標準SQLを使用し、そのデータベースに固有のことを行わない限り、別のデータベースへの変換はそれほど難しくありません。

于 2013-03-25T09:43:32.237 に答える