2012-02-10 8 views
2

データモデル

'{ 
    "uri": "http://foo.com/bar/index.html", 
    "metric1": 74, 
    "metric2": 123, 
    "conntime": "2011-12-30T13:43:34", 
    "city": "CAMBRIDGE", 
    "state": "MA", 
    "ua": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2", 
    "plat": "Win32" 
}' 

文字列はURI、番号が含まれていますジオ/ブラウザ/プラットフォームのデータが続きます。あなたが想像している通り、URI/UA/Plats/Cities/Statesの個数はより少なくなりますが、各メトリックの値は大きく異なります。

私はthisthis、読みましたが、私のクエリは、複数のカウンタのために良いフィットしていないようです以下、次のようになります。中央値「metric1」はそれぞれ何のためにあるのか

  • ( 'ua'、 'plat'、 'state'、 'city')?
  • 「conntime」の「metric2」の95パーセンタイルは「2011-12-30T13:43:34」ですか?

私のデータをカウンタとして非正規化することはできますか(そして賢明ですか)?それとも、データをモデル化する良い方法がありますか?

ありがとうございます!

答えて

1

インジケータセットとクエリーディメンションが明確に定義されているかどうかによって異なります(つまり、それぞれの 'ua'、 'state'の平均値、中央値のみが必要です。

添加剤指標はカウンター列(あなたが&合計をカウントしている場合、あなたは常に平均値を計算することができます)に格納される可能性があります:中央値とパーセンタイルを計算するには

CF[event.ua].metric1_sum += event.metric1; 
CF[event.ua].metric1_count++; 
CF[event.state].metric1_sum += event.metric1; 
CF[event.state].metric1_count++; 
.... 

、私はスーパーの列を作成することをお勧めしたいですカウンタサブカラム。メトリック値は、サブ列名で、イベントのカウントがサブ列値は次のとおりです。ここで

CF[event.ua].metric1_values[event.metric1]++; 
CF[event.state].metric1_values[event.metric1]++; 
... 

個別のメトリック値の量が高くなりすぎた場合、重大な危難せずにメトリック値を切り上げるために、おそらく可能でしょう。

その他のインジケータの種類には、他の最適化が必要な場合があります。

さらに、JSONと同様に、個々のイベントを非正規化形式で保存することをお勧めします。カサンドラは非常に速くデータを書きます。また、未処理のデータを使用すると、完全なデータセットでMap/Reduceを実行することにより、追加のインジケータの履歴値を計算できます。

+0

これは意味があります。私が正しく理解していれば、中央値を計算すると、データはおおよそ次のようになります: 'CF [" http://foo.com/bar/index.html "。" Mozilla/5.0(Windows NT 6.1)AppleWebKit/535.2 (KHTML、Geckoのように)Chrome/15.0.874.121 Safari/535.2 ".metric1_74 [" http://foo.com/bar/index.html ".metric1] ++;'または、ほとんどのデータ分析はオフラインで(例えば1時間に1回)実行すると、生のJSONと* only * Map/Reduceを保存する方が良いでしょうか? – septagram