我正在阅读以下关于Cassandra的文章:
http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/#.UzIcL-ddVRw
它似乎意味着你可以在cassandra中为给定的行键设置不同的列键。真的吗?如果是真的,你如何允许变化的行键。
我认为这可能是真的原因是因为我们有一个用户,它可以喜欢很多项目,我们只想让userId成为rowkey。我们将此rowKey(userID)映射到特定用户可能喜欢的所有项目。每个特定用户可能喜欢不同数量的项目。因此,如果我们可以有多个列密钥,每个用户喜欢的每个itemID一个,那么我们可以通过这种方式解决问题。
因此,是否可以为特定的rowKey设置不同长度的cassandra列密钥? (以及如何做到这一点)
提供一个示例和/或一些cql代码会很棒!
让我感到困惑的是,我已经看到了一些.cql文件并且他们事先定义了键空间,并且它似乎非常不灵活,如何使其动态化,即允许它随意添加其他列。例如:
CREATE TABLE IF NOT EXISTS results (
test blob,
tid timeuuid,
result text,
PRIMARY KEY(test, tid)
);
这怎么可能允许增长列?我们不需要事先指定名称吗?或者根据应用程序的需要添加其他自定义列?
答案 0 :(得分:2)
是的,每行row_key可以有不同数量的列。从关系的角度来看,tid是变量的名称并不明显。它充当变量列键的占位符。请注意以下插入语句中的" tid","结果"和"数据"在声明中从未提及。
CREATE TABLE IF NOT EXISTS results (
data blob,
tid timeuuid,
result text,
PRIMARY KEY(test, tid)
);
因此,在您的示例中,您需要标识表的row_key,column_key和payload。 主键包含row_key和column_key。
测试是你的row_key。 tid是你的column_key。 数据是你的有效载荷。
以下插入内容均有效:
INSERT your_keyspace.results('row_key_1', 'a4a70900-24e1-11df-8924-001ff3591711', 'blob_1');
INSERT your_keyspace.results('row_key_1', 'a4a70900-24e1-11df-8924-001ff3591712', 'blob_2');
#notice that the column_key changed but the row_key remained the same
INSERT your_keyspace.results('row_key_2', 'a4a70900-24e1-11df-8924-001ff3591711', 'blob_3');
请参阅here
答案 1 :(得分:1)
你有没有想过在cassandra中探索收集支持以便以共处方式处理这种关系(例如。在同一数据节点上}。
不确定它是否有帮助,但是将用户ID保存为行键以及包含项ID为关键字和某些值的地图呢?
-Vivel