2

假设我有这张桌子:

CREATE TABLE "users" (
    username text,
    created_at timeuuid,
    email text,
    firstname text,
    groups list<text>,
    is_active boolean,
    lastname text,
    "password" text,
    roles list<text>,
    PRIMARY KEY (username, created_at)
) 

我想按用户名对用户进行排序,这是不可能的,因为只能通过聚类列进行排序。如何按用户名订购我的用户?

我需要按用户名查询用户,这就是为什么用户名是索引列的原因。

这里的正确方法是什么?

4

2 回答 2

1

如果您绝对必须对用户名进行排序,并在一个查询中返回所有用户名,那么您需要为此效果创建另一个表:

CREATE TABLE "users" (
field text,
value text,
PRIMARY KEY (field, value)
)

不幸的是,这会将所有用户名放在一个分区中,但这是保持它们排序的唯一方法。另一方面,您可以扩展表以存储需要以相同方式检索的不同值。因此,例如,分区字段 =“用户名”将包含所有用户名,但您可以创建另一个分区字段 =“姓氏”来存储所有排序的用户名。

Cassandra 是 NoSQL,因此可能会出现数据重复。

于 2018-02-01T15:34:37.870 回答
0

Cassandra 通过散列值来存储分区键数据。因此,当返回数据时,顺序是由哈希值完成的,而不是数据本身的顺序。因此,您不能对分区键进行排序。

回到您的问题,我不确定它是哪种数据以及您要运行哪种查询。假设每封电子邮件有多个用户,我将创建下表:

CREATE TABLE "users" (
username text,
created_at timeuuid,
email text,
firstname text,
groups list<text>,
is_active boolean,
lastname text,
"password" text,
roles list<text>,
PRIMARY KEY (email, username)

)

于 2018-01-31T18:16:38.557 回答