5

私は現在、データベースにmongodbを使用するソーシャルゲームアプリを持っています。私の質問は、ポイントとバッジシステムを作成したい場合のいくつかの提案は何ですか。アチーブメント/バッジのビジネスロジックは非常に複雑になる可能性があり、非常にアドホックであるため、バッジのリアルタイムの授与を行うことは効率的ではないようです。追跡されたアクションをどこかのキュー、つまりAmazon SQSに追加するか、ユーザーのアクティビティフィードをキューとして使用し、別のオフラインワーカープロセスを実行して、すべてのアクション/アクティビティの効果を処理して、特定のバッジが交差しています。

この方法での私の心配は、バッジクエリが非常に集中的になる可能性があり、非常に多くのアクションも追跡する必要があるように思われることです。過去4週間、毎週2位を獲得した人のバッジから、50の州のすべてに友達がいる人のバッジなど、さまざまな成果を想像できます。

このタイプのもののためのよりエレガントなまたは実証済みの方法はありますか?mongo以外に実績/アクティビティフィード/リーダーボードに別のデータベースを使用して、mongo /その他のdbハイブリッド環境を作成することは理にかなっていますか?

ハイブリッドソリューションには、Redis、Neo4J、または単なる古いSQL Serverなどの選択肢が適していますか?私はMongoが好きなので、プライマリデータベースとして残りますが、ミックスに別のデータベースを追加することが役立つかどうかを知りたいと思っています。

4

2 に答える 2

3

これは、データベースでmapreduceを実行するのに適した候補です。必要なデータのオフライン計算に使用して、あまり定期的に実行することはできません。

http://www.mongodb.org/display/DOCS/MapReduce

他のツールを使用してこれを行うこともできますが、要約すると、この段階で複雑さを追加する説得力のある理由はわかりません。マップリデュースを調べて試してみて、ニーズに合わない場合はオプションを拡張します。しかし、その時点では、少なくとも具体的なボトルネックがあればそれを特定しているはずです。

于 2011-11-04T17:13:13.720 に答える
0

Neo4jのようなgraph-dbの使用に関する注意事項。あなたのバッジ情報はいつもですか?具体的なユーザーに対してクエリを実行すると、これらはローカルクエリであり、グローバルクエリではありません。

したがって、ドメインをオブジェクトのネットワークとしてモデル化し(おそらくすでにそうであるように)、バッジロジックをユーザーから開始するセットトラバーサルまたはグラフクエリとして表現できる場合、ローカルグラフクエリは関係なく十分に高速であるため、それらを永続化することなく機能します。データセットのサイズ。

最も簡単なのは、タイムボックス化されたPoCを作成して、それが機能するかどうかを確認することです。ユーザーIDをgraph-dbインデックスに格納し、ノードのプロパティとして2つのストアを相互接続すると、かなり簡単に機能するはずです。コミット/保存フックでデータベースを同期することも、非同期で同期することもできます。おそらく、他の「ソーシャルネットワーク」データもグラフに移動し、ゲームデータとドキュメントをmongodbに保持するのが賢明でしょう。

于 2011-11-07T00:12:05.120 に答える