我必须使用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变量(而不是计数器变量)
有任何建议和意见吗?非常感谢。
答案 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)