2012-04-15 48 views
2

如何在Cassandra中创建计数器列表作为复合列。我试图解决的问题是存储访问特定对象的次数。在JSON表示的模型是这样的:如何使用复合列在cassandra中创建桶计数器

的ColumnFamily:view_counts RowKey:OBJECT_ID

值: { 总:10, 引荐:{ Facebook的:2, 叽叽喳喳:5, 直接:2, 其他:1 } 国家:{ 澳大利亚:4, 我们:如图4所示,其他 :2 } }

在此先感谢

回答

-3

为什么不只是使用supercolumnfamily,为推荐人和国家的超级列?

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 } 

然后当你到Object6通过Twitter来自澳大利亚一个新的访问,您做如下增量:

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_referrerview_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这样的查询,它可以计算出幕后所有适当的计数器。

(附注:Supercolumns已被弃用,因为你不能修改supercolumn,这会减慢速度的一部分。)

+0

非常感谢队友, 我找不到计数器API赫克托API复合列。只有创建计数器和超级列的API。 你可以请一个非常小的样本与hector客户端? 干杯 – 2012-04-17 11:27:56

相关问题