如果行可以具有不同数量/类型的列,那么将行划分为列族的目的是什么?

时间:2013-01-18 09:36:14

标签: nosql cassandra conceptual

鉴于列族可以具有任意结构的行,我们可以将所有行存储在单个“存储”中(故意避免使用名称“columnfamily / table”)。 那么列族的目的是什么?

3 个答案:

答案 0 :(得分:1)

最简单的原因在名称本身“列族”中很明显。列族将一堆相关列组合在一起。您可以将其视为包含相关列的命名空间。

例如,列“名称”本身缺少上下文,可以由像“员工”或“城市”这样的ColumnFamilies提供。或者每个列都需要自己承载所有上下文,而不需要相关列的概念。

答案 1 :(得分:1)

原子性

在Cassandra 1.1及以下版本中,唯一的原子保证是写入同一行(即使用相同的密钥)将是原子的。

因此,您需要仔细考虑列中的内容,以及这些列应该在哪一行,以便在写入失败时应用程序将正常运行。

答案 2 :(得分:0)

原因:

  • 为行内的列设置不同的排序顺序。比较器在列族创建时指定,之后不能更改。因此,如果您的行必须按字母顺序或数字顺序排序,则必须创建不同的列族。
  • 自定义可以按列系列设置的存储选项。例如。缓存或行,压缩,删除过期的列等。可以找到每列的系列存储选项here
  • 不能在同一列族中混合计数器列和非计数器列
  • 如其他答案所述,由于逻辑内聚 - 列表示由行ID标识的某个实体的属性。