卡桑德拉宽行与常规行

时间:2015-02-20 00:10:48

标签: cassandra cassandra-2.0

我需要一些Cassandra数据建模方面的帮助。 这是问题描述: 我有3台服务器处理用户请求NodeA,NodeB和NodeC。我有1000个不同的开发人员(可能是10000),并且必须为每个处理节点维护每个开发人员的$余额。 我可以看到两种建模方式: 1)使用developerid + balanceid作为行键的CF。列名称将是NodeA,NodeB和NodeC。

create table {
     developerBalanceid int primarykey;
     nodeA varchar;
     nodeB varchar;
     nodeC varchar;
}

2)带宽节点的CF,节点ID为键。列名称为developerid + balanceid。这看起来类似于存储在Cassandra中的时间序列数据。

create table {
       nodeid varchar as primary key;
       developerBalanceid int; //this will be dynamic columns
}

运营: a)写入:每隔5秒,每个节点都会为每个开发者更新$ balance。更具体地,在每个时间t + 5,节点A将写入1000个平衡值。节点B也会写入1000个余额值和节点C.

b)读取:读取也会每5秒钟读取一次特定的开发者平衡。

看来2)是建模的最佳方式。 我确实有一些关于行如何与我想要的查询一起工作的问题。 在最坏的情况下,宽行读取的iops数量是多少。 我应该考虑其他优化,例如写入压缩吗?

我知道我可以运行一些测试并检查性能。但我也希望听到其他经历。

1 个答案:

答案 0 :(得分:1)

使用Cassandra进行建模时的基本规则是"来自您的查询的模型"。你问题的主要论点是:

  

阅读特定的开发人员平衡。

如果您通过developerBalance查询,那么developerBalance必须是您主键的开头。你的解决方案1对我来说更好。

使用解决方案2,您无法编写

select * from my_table where developerBalanceid=?

...不扫描整个群集

你必须明白Cassandra查询不能做什么,partition key and cluster key是什么。 Another link