MySQLデータベースでカスタムOpenX広告サーバーを実行しています。1日あたり100万回のクリック。このクリック情報をすべて保存し、それに基づいて統計を表示する必要があります。
現在、すべてのクリック情報は2日ごとに集計され、特定のクリック情報は削除されます。ただし、アフィリエイトに動的追跡ID(TID)を設定し、基本的にこれに基づいてクリック数とコンバージョン数を追跡できる新機能を提供したいと考えています。
したがって、問題は、クリックテーブルが1日に最低100万エントリ増加することです。このテーブルを検索して、TIDでグループ化された、特定の期間における1人のユーザーのすべてのクリックを表示できる必要があります。上記、またはTIDで検索します。
MySQLのパーティショニングを調べたところ、それは良い解決策のように思えますが、それでも巨大なデータベース(おそらく数十億のエントリ)でうまく機能するかどうかはわかりません。
この問題に対する正しいアプローチは何だと思いますか?
編集:
あなたの答えに基づいて、私は今、混合ソリューションを考えています。
メンテナンス時にクリックが集計されたときにエントリが削除される「LIVE」テーブルがすでにあります。これは次のようになります。
表:クリック数
Viewer_id | ... | date_time | affiliate_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を一覧表示できるようになりました。
このアプローチについてどう思いますか?明らかな問題はありますか?私は確かな理由なしに物事を複雑にしすぎていますか?