如何使Cassandra对特定的行键具有可变的列键?

如何使Cassandra对特定的行键具有可变的列键?,cassandra,cql,cassandra-2.0,Cassandra,Cql,Cassandra 2.0,我在读以下关于卡桑德拉的文章: 这似乎意味着对于给定的行键,可以在cassandra中使用不同的列键。这是真的吗?如果是真的,那么如何允许不同的行键 我认为这可能是真的,因为假设我们有一个用户,它可以喜欢许多项目,我们只是希望userId是rowkey。我们让这个行键(userID)映射到特定用户可能喜欢的所有项目。每个特定用户可能需要不同数量的项目。因此,如果我们可以有多个列键,每个用户喜欢的itemID对应一个列键,那么我们就可以这样解决问题 因此,对于特定的行键,是否可能有不同长度的ca

我在读以下关于卡桑德拉的文章:

这似乎意味着对于给定的行键,可以在cassandra中使用不同的列键。这是真的吗?如果是真的,那么如何允许不同的行键

我认为这可能是真的,因为假设我们有一个用户,它可以喜欢许多项目,我们只是希望userId是rowkey。我们让这个行键(userID)映射到特定用户可能喜欢的所有项目。每个特定用户可能需要不同数量的项目。因此,如果我们可以有多个列键,每个用户喜欢的itemID对应一个列键,那么我们就可以这样解决问题

因此,对于特定的行键,是否可能有不同长度的cassandra列键?(你是如何做到的)

提供一个示例和/或一些cql代码将非常棒

让我困惑的是,我看到了一些.cql文件,它们事先定义了键空间,而且在如何使其动态化方面似乎非常不灵活,也就是说,允许它随意增加列。例如:

CREATE TABLE IF NOT EXISTS results (
    test blob,
    tid timeuuid,
    result text,
    PRIMARY KEY(test, tid)
);

这怎么可能允许不断增长的列呢?我们是否需要事先指定名称?或者根据应用程序的需要指定其他自定义列?

您是否想过探索cassandra中的集合支持,以便以共位方式处理此类关系{例如,在同一数据节点上}

不确定是否有帮助,但将用户id保留为行键,并将包含项id的映射保留为键和一些值如何


-Vivel

是的,每行键可以有不同数量的列。从关系的角度来看,tid是否是变量的名称并不明显。它充当变量列键的占位符。注:在下面的inserts语句中,语句中从未提及“tid”、“结果”和“数据”

CREATE TABLE IF NOT EXISTS results (
    data blob,
    tid timeuuid,
    result text,
    PRIMARY KEY(test, tid)
);
因此,在您的示例中,需要标识表的行键、列键和有效负载。 主键包含行键和列键

测试是您的行键。 tid是您的列键。 数据是你的有效载荷

以下插入内容均有效:

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');