Cassandra NoSQL/BigTable数据建模中的列表&;超级柱(带卡桑德拉)

Cassandra NoSQL/BigTable数据建模中的列表&;超级柱(带卡桑德拉),cassandra,nosql,cql,Cassandra,Nosql,Cql,我是NoSQL和BigTable的新手,我正在尝试学习如何(如果应该的话)使用超级列来创建一个BigTable友好的模式 基于NoSQL数据建模,听起来我应该将数据聚合到更大的表中,尽可能地进行反规范化,而不是使用以连接为中心的RDBMS模式。基于此,我为“用户”设想了一个简单的模式,我正试图为Cassandra创建这个模式: User: { KEY: UserId { name: { first, last

我是NoSQL和BigTable的新手,我正在尝试学习如何(如果应该的话)使用超级列来创建一个BigTable友好的模式

基于NoSQL数据建模,听起来我应该将数据聚合到更大的表中,尽可能地进行反规范化,而不是使用以连接为中心的RDBMS模式。基于此,我为“用户”设想了一个简单的模式,我正试图为Cassandra创建这个模式:

User: {
    KEY: UserId {
        name: {
           first, 
           last
        },
        age,
        gender
    }
};
上面的列族(用户),其键是“UserID”,由3列(姓名、年龄、性别)组成。其列“name”将是一个超级列,由“first”和“last”列组成

所以我要问的是:

  • 创建包含“name”超级列的列族“User”时的外观如何?(更新:这似乎不可能。)
  • 我应该使用超级列(像这样)吗?我应该用别的东西吗
  • 表示此模式的另一种方式是什么
  • 如何表示表/列族中的值列表
  • 以下是我找到的一些有用的链接,但我不太清楚,无法回答我的问题:

    谢谢

    更新:

    经过大量研究,我学到了一些东西:

    • 不能使用CQL创建超级列;可能还有其他机制可以做到这一点,但CQL似乎不是其中之一
    • SQL 3.0的语法似乎正在从以“列族”为中心的方法转向类似SQL的基于“表”的语法
    相应地改变了我的问题

    我应该使用超级列(像这样)吗?我应该用吗 还有别的吗

    您可以使用您建议的数据模型。但一般情况下,不建议出于本手册中提到的这些原因

    我还将注意到,通常不鼓励使用超级列,因为 它们有几个缺点。超级列中的所有子列 在读取一个子列时需要反序列化,而您不能 在超级列上设置辅助索引。他们也只支持一个 嵌套级别

    因此,考虑你的情况的这些原因。

    表示此模式的另一种方式是什么

    您可以尝试使用复合列。阅读了解更多信息。或者你可以只使用标准列族,我认为标准cf将适合你的情况。例如,以下建议:

    User : {
      key: userId {
        columnName:firstname
        ColumnName:lastname 
        ColumnName:age
        ColumnName:gender
        ColumnName:zip
        ColumnName:street
      }
      ..
    };
    
    如何表示表/列族中的值列表

    可以将列表存储在cf中的ByTestType中。也可以将列表拆分为单个元素并存储为CompositeType