Nosql 如果行可以具有不同数量/类型的列,那么将行划分为列族的目的是什么?
考虑到列族可以具有任意结构的行,我们可以将所有行存储在一个“存储”中(故意避免使用“columnfamily/table”这个名称)。Nosql 如果行可以具有不同数量/类型的列,那么将行划分为列族的目的是什么?,nosql,cassandra,conceptual,Nosql,Cassandra,Conceptual,考虑到列族可以具有任意结构的行,我们可以将所有行存储在一个“存储”中(故意避免使用“columnfamily/table”这个名称)。 那么,列族的用途是什么呢?最简单的原因就是名称本身“列族”。柱族将一组相关柱组合在一起。可以将其视为包含相关列的命名空间。 例如,“Name”列本身缺乏上下文,可以由“Employees”或“Cities”等列族提供上下文。或者,每一列都需要单独承载它的所有上下文,而不需要相关列的概念。原子性 在Cassandra 1.1及以下版本中,唯一的原子保证是写入同一行
那么,列族的用途是什么呢?最简单的原因就是名称本身“列族”。柱族将一组相关柱组合在一起。可以将其视为包含相关列的命名空间。 例如,“Name”列本身缺乏上下文,可以由“Employees”或“Cities”等列族提供上下文。或者,每一列都需要单独承载它的所有上下文,而不需要相关列的概念。原子性 在Cassandra 1.1及以下版本中,唯一的原子保证是写入同一行(即使用相同的键)将是原子的 因此,您需要非常仔细地考虑您希望在列中包含什么,以及这些列应该位于哪一行,以便在写入失败时应用程序能够正常运行。原因:
- 对行中的列具有不同的排序顺序。比较器是在列族创建时指定的,以后不能更改。因此,如果您有行,哪些列必须按字母或数字排序,则必须创建不同的列族。
- 自定义可以按列族设置的存储选项。例如缓存或行、压缩、删除过期列等。可以找到每个列系列的存储选项
- 不能在同一列族中混合使用计数器列和非计数器列
- 正如在其他答案中提到的,由于逻辑内聚性,列表示由行id标识的某些实体的属性。