卡桑德拉版本的差异

时间:2015-06-02 15:08:24

标签: cassandra cql

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

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

任何人都可以很快解释这些差异,特别是关于数据模型吗?

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

有人可以总结一下这些差异吗?也许我没有正确理解。

1 个答案:

答案 0 :(得分:1)

需要考虑的重要一点是,底层存储模型保持不变。 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中工作,那将非常难看) - 但那是另一篇博客文章。
  • 与Thrift所需的同步,呼叫响应通信相比,CQL协议允许异步通信。因此,与Thrift相比,CQL能够更快,更少资源密集 - 尤其是在使用单线程客户端时。
  

可以在同一行(同一个键)中拥有任意数量的字段。

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