我需要性能和查询方面的详细信息,我从某个站点了解到,使用列族时只能给出一个键,如果是这样,您对我的键空间有何建议,我需要使用 group by、order by、count、sum ,ifnull,concat,joins,有时还有嵌套查询。
6 回答
要回答您提出的原始问题:列族和表是一回事。
- 旧的Thrift API中使用了“列族”这个名称。
- 在较新的CQL API中使用了名称“table” 。
有关 API 的更多信息可以在这里找到: http ://wiki.apache.org/cassandra/API
如果您需要使用“group by,order by,count,sum,ifnull,concat,joins 和一些嵌套查询”,那么您可能不想使用 Cassandra,因为它不支持其中的大多数.
CQL 支持COUNT
,但最多只有 10000。它支持ORDER BY
,但仅限于集群键。您提到的其他内容根本不支持。
在 cassandra 中,表和列族之间没有区别。它们是一个概念。
参考文档:https ://cassandra.apache.org/doc/old/CQL-3.0.html
它指定 CQL 的 LRM 在支持 COLUMNFAMILY 的任何地方都支持 TABLE 关键字。
这证明了 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。
这里的小例子来理解概念。键空间是一个包含列族、用户定义类型的对象。
使用 replication={'class':SimpleStrategy, 'replication_factor': 3} 创建键空间大学;
create table University.student(roll int Primary KEY, dept text, name text, termint)
'创建表',表'学生'将在键空间'大学'中创建,列RollNo,Name和dept。RollNo 是主键。RollNo 也是一个分区键。所有数据都将在单个分区中。
在 Cassandra 中更改 Keyspace 时的关键方面
Keyspace Name:在 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 关系维护它们之间的关系。简单的!