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