【发布时间】:2013-09-20 09:19:57
【问题描述】:
我需要性能和查询方面的详细信息,我从 some 网站了解到,使用列族时只能给出一个键,如果是这样,你对我的键空间有什么建议,我需要使用 group by、order by、count、sum、ifnull、concat、joins 和有时嵌套查询。
【问题讨论】:
我需要性能和查询方面的详细信息,我从 some 网站了解到,使用列族时只能给出一个键,如果是这样,你对我的键空间有什么建议,我需要使用 group by、order by、count、sum、ifnull、concat、joins 和有时嵌套查询。
【问题讨论】:
回答您提出的原始问题:列族和表是一回事。
可在此处找到有关 API 的更多信息: http://wiki.apache.org/cassandra/API
如果您需要按照您的说明使用“group by,order by,count,sum,ifnull,concat,joins 和某些时候嵌套查询”,那么您可能不想使用 Cassandra,因为它不支持其中的大多数。
CQL 支持COUNT,但最多只能支持 10000。它支持ORDER BY,但仅限于集群键。您提到的其他内容根本不支持。
【讨论】:
group by 不是有效的CQL。您不能只运行随机 SQL 语句并期望它们正常工作。
参考文档:https://cassandra.apache.org/doc/old/CQL-3.0.html
它指定 CQL 的 LRM 在任何支持 COLUMNFAMILY 的地方都支持 TABLE 关键字。
这证明了 TABLE 和 COLUMFAMILY 是同义词。
【讨论】:
在 cassandra 中,table 和 columnfamily 没有区别。它们是一个概念。
【讨论】:
对于 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默认使用table。
【讨论】:
这里是理解概念的小例子。 键空间是一个包含列族、用户定义类型的对象。
创建键空间大学 复制={'class':SimpleStrategy, 'replication_factor': 3};
创建表 University.student(roll int Primary KEY, 部门文本, 名称文本, 学期 in)
'Create table',表'Student'将在键空间'University'中创建,列RollNo、Name和dept。 RollNo 是主键。 RollNo 也是一个分区键。 所有数据都将在单个分区中。
在 Cassandra 中更改 Keyspace 时的关键方面
键空间名称:在 Cassandra 中无法更改键空间名称。
策略名称:可以通过指定新策略名称来更改策略名称。
复制因子:复制因子可以通过指定新的复制因子来改变。 DURABLE_WRITES:DURABLE_WRITES 值可以通过指定其值 true/false 来更改。默认情况下,它是真的。如果设置为 false,则不会将任何更新写入提交日志,反之亦然。
执行:这是执行命令“Alter Keyspace”的快照,该命令将键空间策略从“SimpleStrategy”更改为“NetworkTopologyStrategy”,并将 DataCenter1 的复制因子从 3 更改为 1。
【讨论】:
列族与关系型数据库的表有些关联,存在分布差异,甚至可能是理想主义的特征。
想象您有一个可能包含 15 列的用户实体,在一个关系数据库中,您可能希望将这些列划分为我们都知道的基于小相关列的结构体表。在 Cassandra 等分布式数据库中,您将能够将所有这些表条目连接到一个长行中,因此如果您使用分析器/数据库管理器,您将看到一个包含 15 列而不是 2/3 个表的表。另一个有趣的事情是,每个列族都被写入不同的节点,可能在不同的集群上并被行键识别,这意味着您将拥有所有列族的单个键,并且不需要维护 PK 或对每个表进行 FK,并通过 1-1、1-n、nn 关系维护它们之间的关系。简单!
【讨论】: