【问题标题】:Cassandra - difference in efficiency between simple and compound keyCassandra - 简单和复合键之间的效率差异
【发布时间】:2016-02-08 16:43:30
【问题描述】:

我在理解这篇文章中的一件事时遇到了问题 - http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

练习 - 我们希望按组名获取所有用户。

解决方案:

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    PRIMARY KEY (groupname, username)
);

SELECT * FROM groups WHERE groupname = 'footballers';

但是要查找组中的所有用户,我们可以设置:PRIMARY KEY (groupname),它也可以。

为什么在这种情况下需要一个集群键(用户名)?我知道当我们将用户名设置为集群键时,我们可以在WHERE 子句中使用它。但是只通过groupname来查找用户,PRIMARY KEY (groupname)PRIMARY KEY (groupname, username)在查询效率上有什么区别?

【问题讨论】:

    标签: cassandra datastax cql cassandra-2.0 nosql


    【解决方案1】:

    集群键提供多种好处:查询灵活性、结果集排序(在分区键内)和扩展的唯一性。

    但是要查找组中的所有用户,我们可以设置:PRIMARY KEY (groupname)

    尝试一次。仅使用groupname 作为主键创建一个新表,然后尝试为每个组插入多个usernames。您会发现只有一个组,并且该组中的每个新用户都会覆盖 username 列。

    但是只通过groupname查找用户,PRIMARY KEY (groupname)PRIMARY KEY (groupname, username)在查询效率方面有什么区别?

    如果PRIMARY KEY (groupname) 执行得更快,最可能的原因是因为只能返回一行。

    在这种情况下,将username 定义为集群键提供:

    1. 能够在组内按username 排序。

    2. 能够在组内查询特定的username

    3. 能够在组内添加多个usernames。

    【讨论】:

    • 这是我想知道的。非常感谢。
    【解决方案2】:

    如果要按组名查询,则不需要聚类键。

    如果您添加一个集群键(本例中的用户名),行将按用户名对组名进行排序。

    【讨论】:

    • 好的,我明白了,但是这种排序是否会使按组名搜索用户更快?
    • 不,它没有任何改变。集群顺序保证磁盘上的顺序,因此您的记录始终被排序。但是升序比降序更有效。
    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 2020-03-26
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多