MySQLデータベースでカスタムOpenX広告サーバーを実行しています。 1日あたり100万回のクリックこのクリック情報をすべて保存し、それに基づいて統計情報を表示する必要があります。MySQLのソリューションは1日あたり100万クリックです
今、すべてのクリック情報が2日ごとに集計され、特定のクリック情報が削除されます。しかし、私たちはアフィリエイトに動的トラッキングID(TID)を設定し、基本的にこれに基づいてクリック数とコンバージョン数をトラッキングできる新しい機能を提供したいと考えています。
問題は、クリックテーブルが1日に最低100万エントリ増加することです。このテーブルを検索して、特定の期間、1人のユーザーのすべてのクリックを表示できるようにする必要があります。上記のTIDによってグループ化されているか、TIDによって検索されています。
私はMySQLのパーティションを見ましたが、それは良い解決策のようですが、巨大なデータベース(おそらく何十億ものエントリ)でもうまくいくかどうかはわかりません。
あなたはこの問題の正しいアプローチになると思いますか?
EDIT:あなたの回答に基づいて
、私は今、混合溶液と思っています。
我々はすでに、このようなものになりますクリックは、メンテナンス時に集約されたときにエントリが削除された「LIVE」テーブル、持って:
表:
viewer_idをクリックし| ... | date_time |アフィリエイトID | ... | TID
(私はこの時点では重要ではないの列をスキップ)
メンテナンス時には、私は表を言って、ほとんど同じに見える別の毎月のテーブルにすべてを移動することができますインデックスを持っているclicks_2012_11、 date_time,affiliate_idおよびtidの場合、affiliate_idで区切られています。
だから今、アフィリエイトは、過去2ヶ月間、彼の統計情報を見たいとき、私は私が表内で見て知っている:clicks_2012_10と表:clicks_2012_11(私はに限られた時間の範囲を持っています最大2ヶ月)。 affiliate_idでパーティション化されたテーブルがあるので、必要なパーティションのみが2つのテーブルから検索され、過去2か月間に何らかのアクティビティを持つすべてのTIDがリストされます。
このアプローチについてどう思いますか?明らかな問題はありますか?しっかりとした理由なしに物事を複雑にすることはできますか?
ありがとうございます。 このaffiliate_idはすべてのクエリのすべてのWHERE句に表示されるため、affiliate_idでテーブルをパーティショニングすることを考えています。特定のアフィリエイトIDの過去2ヶ月間の統計情報をすべて取得しようとすると、クエリのスピードアップに役立たないでしょうか?このアプローチの小型化はどうでしょうか? – user1782560
あなたはそれを分割する必要はありません。 'affiliate_id、date_time desc'にテーブルをクラスタ化します。 – usr