2

Cassandraで複合列としてカウンターのリストを作成するにはどうすればよいですか。私が解決しようとしている問題は、特定のオブジェクトへの訪問数を保存することです。json表現のモデルは次のようなものです。

ColumnFamily:view_counts RowKey:object_id

値:{合計:10、リファラー:{facebook:2、twitter:5、direct:2、other:1}国:{オーストラリア:4、us:4、other:2}}

前もって感謝します

4

2 に答える 2

2

必要なのは次のようなものです(X:Yは複合列です)。

ColumnFamily: view_counts
Rows:
object_id -> { "total": 10,
               "referrer:facebook": 2,
               "referrer:twitter": 5,
               "referrer:direct": 2, 
               "referrer:other": 1,
               "country:australia": 4,
               "country:us": 4, 
               "country:other": 2 }

次に、オーストラリアからTwitter経由でObject6に新たにアクセスすると、次の増分を実行します。

incr view_counts[Object6]['total']
incr view_counts[Object6]['referrer:twitter']
incr view_counts[Object6]['country:australia']

もちろん、これを配置する方法はいくつかあります。コンポジットを行キーに配置することもできます。

total:object_id    -> { "count": 10 }
referrer:object_id -> { "facebook": 2,
                        "twitter": 5,
                        "direct": 2, 
                        "other": 1 }
country:object_id  -> { "australia": 4, 
                        "us": 4, 
                        "other": 2 }

または、コンポジットカラムを完全に省略し、とに別々のカラムファミリを使用しview_counts_by_referrerますview_counts_by_country

Acunu Analyticsのようなリアルタイム分析システムはこれをすべて行うので、のようなクエリを指定するだけSELECT COUNT_DISTINCT(user_ip_address) FROM view_counts WHERE object = Object6 AND time > '7 days ago' GROUP BY referrerで、舞台裏ですべての適切なカウンターが機能します。

(psスーパーカラムは非推奨です。スーパーカラムの一部しか変更できないため、処理速度が低下します。)

于 2012-04-16T11:06:43.427 に答える
-3

リファラーと国のためのスーパーカラムを備えたスーパーカラムファミリーを使用しないのはなぜですか?

于 2012-04-15T07:15:07.707 に答える