在Cassandra中创建表和创建列家族有什么区别?

时间:2013-09-16 09:17:21

标签: cassandra cassandra-cli

我需要来自性能和查询方面的详细信息,我从某些网站了解到,在使用columnfamily时只能给出一个密钥,如果是这样,你会为我的密钥空间建议什么,我需要使用group by,order by,count,sum,ifnull,concat,join,以及有时嵌套查询。

6 个答案:

答案 0 :(得分:43)

回答你提出的原始问题:列族与表是相同的。

  • 旧版Thrift API中使用了名称“列族”。
  • 名称“table”用于较新的CQL API

有关API的更多信息,请访问: http://wiki.apache.org/cassandra/API

如果 需要 使用“group by,order by,count,sum,ifnull,concat,joins和有时嵌套查询”,那么你可能会说不想使用Cassandra,因为它不支持大多数。

CQL支持COUNT,但最多只支持10000.它支持ORDER BY,但仅支持群集密钥。你提到的其他事情根本不受支持。

答案 1 :(得分:2)

请参阅文档:https://cassandra.apache.org/doc/old/CQL-3.0.html

它指定在支持COLUMNFAMILY的地方,CQL的LRM支持TABLE关键字。

这证明TABLE和COLUMNFAMILY是同义词。

答案 2 :(得分:2)

在cassandra中,table和columnfamily之间没有区别。他们是一个概念。

答案 3 :(得分:0)

对于Cassandra 3+和cqlsh 5.0.1

要进行验证,请在键空间(ksp)内输入cqlsh提示符:

CREATE COLUMNFAMILY myTable (
     ...  id text,
     ...  name int
);

然后输入“ desc myTable”。
您会看到:

CREATE TABLE ksp.myTable (
      ...  id text,
      ...  name int
);

它们是同义词,Cassandra默认使用表。

答案 4 :(得分:0)

这里是理解概念的小例子。 键空间是一个包含列族、用户定义类型的对象。

创建keyspace大学 复制={'class':SimpleStrategy, 'replication_factor': 3};

创建表 University.student(roll int Primary KEY, 部门文字, 名称文字, 学期int)

'Create table', 表 'Student' 将在键空间 'University' 中创建,其中包含 RollNo、Name 和 dept 列。 RollNo 是主键。 RollNo 也是一个分区键。 所有数据都将在单个分区中。

在 Cassandra 中更改 Keyspace 时的关键方面

键空间名称:不能在 Cassandra 中更改键空间名称。

策略名称:可以通过指定新策略名称来更改策略名称。

复制因子:可以通过指定新的复制因子来改变复制因子。 DURABLE_WRITES :DURABLE_WRITES 值可以通过指定其值 true/false 来更改。默认情况下,它是真的。如果设置为 false,则不会将任何更新写入提交日志,反之亦然。

执行:这是已执行命令“Alter Keyspace”的快照,该命令将 DataCenter1 的密钥空间策略从“SimpleStrategy”更改为“NetworkTopologyStrategy”,并将复制因子从 3 更改为 1。

答案 5 :(得分:-1)

列族与关系数据库表有些相关,具有分布差异甚至可能是理想主义的特征。

映像您有一个可能包含15列的用户实体,在关系数据库中,您可能希望将列分成基于小相关列的结构,我们都知道这些结构为表。在像Cassandra这样的分布式数据库中,您将能够将所有这些表条目连接成一个长行,因此如果您使用profiler / db管理器,您将看到一个包含15列的单个表2/3表。另一个有趣的事情是,每个列族都写入不同的节点,可能在不同的集群上,并被行键识别,这意味着您将拥有所有列族的单个键,并且不需要为每个表维护PK或FK,并保持它们之间的关系为1-1,1-n,nn关系。简单!