Cassandra 版本差异

Cassandra version differences

我开始阅读基于 Cassandra 0.7 的权威指南 Cassandra。现在,我正在尝试使用 Cassandra 2.1.5 进行试验,似乎存在很多差异,这确实令人困惑。

比如我看到0.7版本的CQL是不存在的。另一方面,数据模型似乎完全不同。您现在可以使用 CQL 定义模式,而在 0.7 版中没有模式。

任何人都可以简要解释一下差异,尤其是关于数据模型的差异吗?

我知道在 0.7 版本中,想法是关于不同长度的行,即具有不同列数的行。但现在我明白了,每一列实际上是一个包含许多参数的字段,所以你可以在同一行(相同的键)中拥有任意多的字段。

有人可以总结一下区别吗?可能是我没理解正确

需要考虑的重要一点是,底层存储模型保持不变。 CQL 只是该模型之上的一个抽象层,可以更轻松地处理和建模数据。 DataStax MVP John Berryman 对此有一篇很棒的文章:Understanding How CQL3 Maps to Cassandra’s Internal Data Structure

在这篇文章中,Berryman 观察到:

  • CQL 主键的值在内部用作行键(在新的 CQL 范例中称为“分区键”)。
  • 非主键 CQL 字段的名称在内部用作列名称。非主键 CQL 字段的值然后在内部存储为相应的列值。

此外,他概述了使用基于 CQL 的方法的好处:

  • 它提供了分区键的快速查找和簇键的高效扫描和切片。
  • 它将相关数据组合在一起作为 CQL 行。这意味着您可以在一个查询中执行原本需要对不同列族进行多个查询的操作。
  • 它允许单独添加、修改和删除各个字段。
  • 它比旧的 Cassandra 范式要好得多。证明:您可以强制 CQL 表的行为与旧式 Cassandra ColumnFamilies 完全一样。 (请参阅此处的示例。)
  • 它很容易扩展到集合列表和映射的实现(如果你直接在旧的 cassandra 中工作,它们会非常丑陋)——但那是为了另一个博客 post。
  • 与 Thrift 所需的同步、调用-响应通信相比,CQL 协议允许异步通信。因此,CQL 能够比 Thrift 更快且占用资源更少——尤其是在使用单线程客户端时。

can have as much fields as you want within the same row (same key).

实际上,每个分区 (rowkey) 有大约 20 亿列的硬性限制。