1

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

根据这篇关于 NoSQL 数据建模的文章,听起来我不应该使用以 JOIN 为中心的 RDBMS 模式,而是应该将我的数据聚合到更大的表中,以便在可能的情况下进行去规范化。基于此,这是我为“用户”设想的一个简单模式,我正在尝试为 Cassandra 创建它:

User: {
    KEY: UserId {
        name: {
           first, 
           last
        },
        age,
        gender
    }
};

上面的列族(User),其键是'UserID',由3列(name,age,gender)组成。它的列'name'将是一个超级列,由'first'和'last'组成列。

所以我要问的是

  1. CQL 3.0看起来如何创建这个列族“用户”,其中包含“名称”超级列?更新:这似乎不可能。)
  2. 我应该使用超级列(像这样)吗?我应该使用别的东西吗?
  3. 表示此模式的另一种方法是什么?
  4. 如何表示表/列族中的值列表?

以下是我发现的一些有用的链接,但我不太清楚,无法回答我的问题:

谢谢!

更新:

经过大量研究,我正在学习一些东西:

  • 您不能使用 CQL 创建超级列;可能还有其他机制可以这样做,但 CQL 似乎不是其中之一。
  • SQL 3.0 的语法似乎正在从以“COLUMN FAMILY”为中心的方法转向基于类似 SQL 的“TABLE”语法。

相应地改变了我的问题。

4

1 回答 1

0

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

您可以使用您建议的数据模型。但由于链接中提到的这些原因,通常不建议这样做。

我还要注意,通常不鼓励使用超级列,因为它们有几个缺点。超级列中的所有子列在读取一个子列时都需要反序列化,并且不能在超级列上设置二级索引。它们也只支持一层嵌套。

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

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

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

User : {
  key: userId {
    columnName:firstname
    ColumnName:lastname 
    ColumnName:age
    ColumnName:gender
    ColumnName:zip
    ColumnName:street
  }
  ..
};

如何表示表/列族中的值列表?

可以将列表存储在 cf. 或者您可以将列表分解为单个元素并存储为 CompositeType。

于 2012-06-25T06:50:27.927 回答