2016-09-16 6 views
0

のためのTOP10検索を取得するために効率的にデータベースに(ソース - デスティネーションの組み合わせを)頻繁にデータを格納します。 ユーザーが2つのエンティティ(ソース - デスティネーション)の異なる組み合わせを検索できるとします。ユーザー検索でカウントを含むデータを保存するたびに、同じ組み合わせ(ソース - デスティネーション)を検索するとカウントが更新されます。 この場合、Usersが1000の場合、Userが0の異なる組み合わせ(Source-Destination)を検索し、30日間データが保存される場合。は、どのように私は頻繁にデータ検索の挿入を行うアルゴリズムを記述しようとしています過去30日間

だから行の合計数は100000 * 30 * 30 =1350万(13億)行であろう。これを書くためのより良い方法がある場合は

(MySQLを使用して)私を提案してください。

ゴール:私はトップ10のSearachをいつでも取得したいと思っています。

+0

これらの目的のためのデータベースがありますので、最も簡単な方法は、それらの1つを取得し、独自のものを使用する代わりに使用することです。 – Kayaman

+0

では、データテーブルを使用した例を示します。ユーザーレベルであるかどうか。どのように高齢。この質問はあいまいです。これはjavaとは関係ありません。余分な解説を得るための最良の方法は、それらをディスカッションに追加することです – Drew

答えて

0

1,000ユーザーと60,000行は、今日の基準では何もありません。それについて考えることさえしないでください。パフォーマンスに関する懸念はまったくありません。ゆっくりと心配するのではなく、適切に行うことに集中してください。遅さはありません。

適切な方法は、各行に検索用語(ケース内の[source、destination])と合計を含むテーブルを作成し、[source、destination ]対の列。これら2つの列を主キーにすることと同じです。

100,000,000行があり、パフォーマンスが重視されていて、巨額の予算があって、何か奇妙なことがあればそれをやり遂げることができます。索引レステーブルへの各検索(最速の追加を可能にする)を行い、夜間のバッチ処理で合計を計算します。しかし、100万行未満の場合、そのようなアプローチは完全な過剰なものになります。

編集:

なるほど、そう本当の問題は、「スライディングウィンドウ」のOPの必要性です。まあ、その場合、私はすべての単一の検索を、それが起こった時間とともに、およびバッチプロセスでa)合計を計算すること、およびb)「ウィンドウ」よりも古いエントリを削除する以外のアプローチを見ることはできません。

+0

それはちょうど例だった、私は13億のデータを持っており、私は非常に迅速にデータを欲しいです。 – user2888996

+0

パフォーマンスに関する質問をし、間違った数字の例を与えるのはどのような意味ですか?いずれにしても、わかりましたが、私はすでに私の答えを編集しており、巨大なデータセットのケースもカバーしました。 –

+0

Mike、ユニークなインデックスはPKではありません。また、テーブルスキャンを愚かにすることもできます。統計情報のために要約されたサマリーテーブルを提案してみませんか?またはパーティショニング?または答えていない:p – Drew

関連する問題