这个简单的架构对Cassandra上下文有意义吗?或者我可以使用唯一约束索引而不是通过分区键手动索引用户名和电子邮件?我明白为了保证Cassandra的正常索引效率,consult必须包含分区键,所以如果我想在一个包含数百万行的表上执行“get by”而不规定分区键只是索引列,那么它可能不是尽可能快,因此通过创建新的分区键手动索引成为更好的选择。这个概念是否正确?手动索引的唯一问题是您需要手动执行此操作,如果删除“用户”上的行,则需要在删除之前获取相应索引列的相应值,以便能够一起删除索引,并且可能还需要批量处理它。我错误地概念卡桑德拉了吗?
CREATE TABLE users (
id uuid PRIMARY KEY,
username text,
email text,
password_hash text,
password_salt text,
display_name text,
timezone int,
created_at timestamp,
last_login_at timestamp
);
CREATE TABLE usernames (
username text PRIMARY KEY,
user_id uuid
);
CREATE TABLE user_emails (
email text PRIMARY KEY,
user_id uuid
);
答案 0 :(得分:0)
手动索引可能是一种开销,即在进行CRUD操作时需要维护索引和数据。
因此建议使用Cassandra的二级索引支持。
如果要查询用户名和电子邮件列,则应在该列上创建二级索引。二级索引是Cassandra内置索引机制,用于索引非键列。