Cassandraで複合列としてカウンターのリストを作成するにはどうすればよいですか。私が解決しようとしている問題は、特定のオブジェクトへの訪問数を保存することです。json表現のモデルは次のようなものです。
ColumnFamily:view_counts RowKey:object_id
値:{合計:10、リファラー:{facebook:2、twitter:5、direct:2、other:1}国:{オーストラリア:4、us:4、other:2}}
前もって感謝します
Cassandraで複合列としてカウンターのリストを作成するにはどうすればよいですか。私が解決しようとしている問題は、特定のオブジェクトへの訪問数を保存することです。json表現のモデルは次のようなものです。
ColumnFamily:view_counts RowKey:object_id
値:{合計:10、リファラー:{facebook:2、twitter:5、direct:2、other:1}国:{オーストラリア:4、us:4、other: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スーパーカラムは非推奨です。スーパーカラムの一部しか変更できないため、処理速度が低下します。)
リファラーと国のためのスーパーカラムを備えたスーパーカラムファミリーを使用しないのはなぜですか?