Cassandra:如何用值初始化计数器列?

时间:2016-07-28 11:20:18

标签: cassandra

我必须使用Facebook Linkbench对Cassandra进行基准测试。基准测试期间有两个阶段,即负载和请求阶段。 在加载阶段,Linkbench使用默认值(图形数据)填充cassandra表:节点,链接和计数(用于链接计数)。

计数表如下所示:

keyspace.counttable ( link_id bigint, link_type bigint, time bigint, version bigint, count counter, PRIMARY KEY (link_id, link_type, time, version)

我的问题是如何插入默认计数器值(在Linkbench请求阶段递增和递减计数器之前)?

如果用cassandra不可能做到这一点,我应该如何增加/减少bigint变量(而不是计数器变量)

有任何建议和意见吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

默认值为零。给定

create table counttable ( link_id bigint, link_type bigint, time bigint, version bigint, count counter, PRIMARY KEY (link_id, link_type, time, version) );

update counttable set count = count + 1 where link_id = 1 and link_type = 1 and time = 1 and version = 1;

我们看到count的值现在为1。

select * from counttable ; link_id | link_type | time | version | count ---------+-----------+------+---------+------- 1 | 1 | 1 | 1 | 1 (1 rows)

因此,如果我们想将其设置为其他值,我们可以:

update counttable set count = count + 500 where link_id = 1 and link_type = 1 and time = 1 and version = 2; select * from counttable ; link_id | link_type | time | version | count ---------+-----------+------+---------+------- 1 | 1 | 1 | 1 | 1 1 | 1 | 1 | 2 | 500 (2 rows)

答案 1 :(得分:1)

没有优雅的方法来初始化具有非零值的计数器列。您可以对计数器字段执行的唯一操作是递增/递减。我建议将偏移量(例如您的预期初始值)保留在不同的列中,只需在客户端应用程序中添加这两个值即可。

答案 2 :(得分:0)

感谢您的回答。我实现了以下解决方案来初始化计数器字段。 由于计数器字段的初始值和默认值为0,我将使用我的默认值递增它。它看起来像Don Branson解决方案,但只有一列:

创建表counttable(     link_id bigint,     link_type bigint,     计数器,     PRIMARY KEY(link_id,link_type) );

我使用此语句设置值(在加载阶段):

update counttable set count = count + myValue where link_id = 1 and link_type = 1;

select * from counttable ;

 link_id | link_type | count
---------+-----------+--------
       1 |         1 |  myValue (added to 0)

(1 row)