在 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,因此数据重复是可以预料的。
假设我有这个 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,因此数据重复是可以预料的。