卡桑德拉版本差异



我开始阅读Cassandra的权威指南,这是基于Cassandra 0.7。现在,我正在尝试使用Cassandra 2.1.5,似乎有很多不同之处,这真的很令人困惑。

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

谁能简短地解释一下它们的区别,特别是关于数据模型的区别?

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

谁能总结一下它们的区别吗?也许我没理解对。

需要考虑的重要一点是,底层存储模型保持不变。CQL只是该模型之上的一个抽象层,使数据的处理和建模更容易。DataStax MVP John Berryman对此有一篇很棒的文章:理解CQL3如何映射到Cassandra的内部数据结构

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

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

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

  • 通过分区键提供快速查找,通过集群键提供高效扫描和切片。
  • 将相关数据分组为CQL行。这意味着您可以在一个查询中完成对不同列族进行多个查询的工作。
  • 允许独立添加、修改和删除单个字段。
  • 它严格优于旧的Cassandra范式。证明:您可以强制CQL表的行为完全像旧式Cassandra columnfamily。(参见此处的示例)
  • 它很容易扩展到实现集合列表和地图(如果你直接在旧的cassandra中工作,这是超级丑陋的)-但这是另一篇博客文章。
  • 与Thrift要求的同步调用-响应通信相比,CQL协议允许异步通信。因此,CQL能够比Thrift更快,更少的资源密集-特别是在使用单线程客户端时。

可以在同一行(相同的键)中有任意多的字段。

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

最新更新