我正在尝试学习cassandra,但我对术语感到困惑。
许多实例表示该行存储键/值对。
但是,当我定义一个表时,它更像是声明一个SQL表,即;您创建一个表并指定列名和数据类型。
有人可以澄清一下吗?
答案 0 :(得分:3)
Cassandra是一个基于列的NoSQL数据库。虽然在最低级别是,但它存储了简单的键值对,它将这些键值对存储在集合中。这种键和集合的分组类似于传统关系模型中的行和列。 Cassandra表包含一个模式,可以使用类似SQL的CQL语言引用(有限制)。
在评论中,您会询问苹果是否存储在与橘子不同的表格中。这个具体问题的答案是否,它将在同一个表格中。然而,Cassandra表有一个额外的概念称为分区键,它在关系世界中并没有真正的分析概念。以下面的表定义
为例 CREATE TABLE fruit_types {
fruit text,
location text,
cost float,
PRIMARY KEY ((fruit), location)
}
在此表定义中,您将注意到我们正在为表定义模式。您还会注意到我们正在定义PRIMARY KEY
。这个主键很相似,但不完全像关系概念。在Cassandra中,PRIMAY KEY
由PARTITION KEY
和CLUSTERING COLUMNS
两部分组成。 PARTITION KEY
是PRIMARY KEY
中指定的第一个字段,可以包含一个或多个由括号分隔的字段。 PARTITION KEY
的目的是进行散列并用于定义拥有数据的节点,并且还用于将磁盘上的信息物理划分为文件。 CLUSTERING COLUMNS
组成了PRIMARY KEY
中列出的其他列,其中包括用于定义数据如何在PARTITION KEY
指定的不同文件内物理存储在磁盘上。如果您对更多细节感兴趣,我建议您在这里PRIMARY KEY
做一些额外的阅读:
https://docs.datastax.com/en/cql/3.0/cql/ddl/ddl_compound_keys_c.html
答案 1 :(得分:0)
基本上cassandra存储就像稀疏矩阵,早期版本有一个名为cqlsh的命令行工具,它可以显示你的columnfamily(也就是最新版本的表)的确切存储空间。后来社区决定保留RDBMS的语法以便更好地理解,因为查询语言(CQL)语法类似于sql。
主存储是密钥(分区)(这是表中所选分区列的哈希函数结果,其余列将像稀疏矩阵一样标记到它。