DB設計の考察

現在アクセスログツールを開発中だったりします。
で、GoogleAnalytics(以下GA)の結果と照らし合わせて
テストを行ったりもします。
基本的な集計結果はGAとほぼ一致するんですが、一つだけわからん事が。

その前に大量ログのさばき方

アクセスログともなると、生ログだけで持っていると
際限なくボリュームが増えていってしまいます。
PVが多いサイトですと月に数百万や数千万PVというのはあたりまえ。
さらにGAはほぼアクセス解析の標準みたいな感じで
大抵のサイトでは導入されています。*1
全部合わせると数十億レコードは下らないでしょう。
(一サイトで月間1億PVのサイトでも導入してるみたいですし)


なので普通は時間軸*2+集計軸*3
あらかじめレコードを集計します。
もちろんGAも例外ではないでしょう。画面から大体の物理テーブル設計は見えます。

ユニークユーザの計算方法

まず初めに、ユニークユーザ(以下UU)の計算方法を考えてみます。
ユーザAさんは以下のような行動履歴を取ったとします。

2009/1/1 トップページ→ページA→ページB(離脱)
2009/1/4 トップページ(離脱)
2009/1/5 トップページ→ページC(離脱)

ユーザBさんは以下のような行動履歴を取ったとします。

2009/1/4 トップページ(離脱)

ユーザCさんは以下のような行動履歴を取ったとします。

2009/1/5 トップページ→ページD(離脱)

(A)この時、2009/1/5のUU数は2人(AさんとBさんCさん*4)です。
(B)次に2009/1/1〜2009/1/10のUU数は何人でしょうか?3人ですよね。
(C)では、これを日別に集計したら何人になりますか?

  • 2009/1/1→1人
  • 2009/1/4→2人
  • 2009/1/5→2人

この結果を集計してしまうと、5人になってしまいます。
つまり、期間内UU数はあらかじめ集計しておくことが出来ないという事です。

GAはどうなっているか

GAの結果と自作ログ解析を比べてみると、
GAは「期間内のUU数は上記(B)の結果と同様」という事がわかりました。
GAの仕様から、日付の範囲は自由に選択することが可能です。
つまり
リアルで生ログを集計している
としか考えられないんです。


生ログとは言わず、「ユニークユーザ別アクセス履歴」に丸める事は可能ですが、
それでもかなりのレコード数になってしまうと思われます。
それを毎回再集計しているんでしょうか?
でもGAのレスポンスは特別悪いわけでもないんですよねー。


Googleだから普通じゃないDB持ってる


と済ませれば簡単ですが、それじゃつまらないじゃないですかw
何か他に方法が無いかと考察中です…*5

*1:無料ですしね

*2:月別/日別/時間etc...

*3:URL/検索キーワード/ブラウザetc...

*4:2009/2/15修正

*5:ご意見歓迎