在 Cassandra 中按用户名排序

Ordering by username in Cassandra

假设我有这个 table:

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)
) 

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

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

这里正确的方法是什么?

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

回到你的问题,我不确定它是什么类型的数据以及你想要什么样的查询运行。假设每个电子邮件有多个用户,我将创建以下 table:

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)

)

如果您绝对必须对用户名进行排序,并且 return 一个查询中的所有用户名,那么您将需要创建另一个 table 为此效果:

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

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

Cassandra 是 NoSQL,因此数据重复是可以预料的。