1

各試合が 5 対 5 で、各プレイヤーが試合の開始時に固有のキャラクターまたはヒーローを選ぶオンライン ゲームの試合データをデータマイニングしています。

私の最終的な目標は、頻繁にアイテムセットを生成して、どのヒーローの組み合わせが最も人気があり、どの組み合わせがより頻繁に勝つ可能性があるかを判断することです。

ユーザーが相手チームが選んだヒーローと、あなたのチームが現在選んでいるヒーローを入力し、選択するヒーローを推奨する Web ベースのアプリケーションが欲しいです。これらのヒーローは、対戦チームが選択したヒーローとの勝利ゲームでより頻繁に表示されるヒーローになります.

より頻繁にピックされるヒーローは、勝利したゲームでもより頻繁に表示されることを知っています。そのため、ヒーローが各プレイヤーに対してランダムに選択されるゲームモードのヒーローのみを含むトランザクション データベースを使用することがあります。

Matchテーブル、Heroテーブル、および(MatchId、HeroId)の主キーとそのヒーローが勝ったかどうかのboolを含むMatchHeroテーブルを持つMySQLデータベースがあります。このテーブルには現在、約 2600 万のエントリがあります。問題は、レコードの数に応じて、データのフェッチに 3 ~ 14 秒かかることです (ユーザーの選択が少ないほど、フェッチされるレコードが多くなります)。

データのフェッチと計算の実行がWebアプリにとって十分高速である場合に、これを実装できるようにするための最良の設計は何でしょうか? テーブルをメモリに保存しますか? アプリオリですでにまともなパフォーマンスを発揮しているので、実際のアイテムセット生成アルゴリズムについてはあまり心配していません。アイテムセットの頻繁な生成に関連するものを事前に計算できますか? ご協力いただきありがとうございます!

4

1 に答える 1

0

データ アクセスを高速化するには、インデックスを使用します。アプリケーションにデータをコピーしないように、データベースでできるだけ多くのデータ分析を行います。クエリの数を減らし、代わりにストアド プロシージャと準備済みステートメントを使用します。

アプリオリを本当に理解していることを確認してください。

SQL クエリを使用して各アイテムセットのサポートを計算している場合、それは間違っています。アイテムセットの長さごとにデータベースを 1 回パスします。つまり、すべての 1 アイテムセットに 1 パス、すべての 2 アイテムセットに 1 パス、すべての 3 アイテムセットに 1 パスです。

Apriori の基本的な考え方は難しいものではありませんが、多くの人は詳細を理解していないため、必要以上に遅くなります。

于 2013-08-22T16:10:05.507 に答える