【问题标题】:Cassandra table - select query with where clauseCassandra 表 - 使用 where 子句选择查询
【发布时间】:2017-04-27 08:08:53
【问题描述】:
I am trying to create a table in Cassandra. 

CREATE TABLE users (
  user_name varchar PRIMARY KEY,
  password varchar,
  gender varchar,
  session_token varchar,
  state varchar,
  birth_year bigint
);

现在如果我想查询我的 session_token = 1000001 的表用户名和密码

Select user_name,password from users where session_token = 1000001;

Will this query work or do I have to create an index on session_token first and then do select query?

【问题讨论】:

  • session_token 是唯一的吗?
  • 不..它不是唯一的
  • 单个 session_token 有可能有多个用户名吗??
  • @AshrafulIslam :是的,这是可能的。

标签: cassandra cql bigdata


【解决方案1】:

你必须先在上面创建索引。

记住什么时候不使用索引:

  • 在高基数列上,因为您随后会针对少量结果查询大量记录
  • 在低基数列上
  • 在使用计数器列的表中
  • 在经常更新或删除的列上
  • 除非经过严格查询,否则在大分区中查找行。请参阅使用索引在大分区中查找行时遇到的问题,除非在下面进行了严格查询。

在您的情况下,session_token 似乎是高基数列

最好再创建一张表:

CREATE TABLE user_by_session (
    session_token varchar,
    user_name varchar,
    password varchar,
    PRIMARY KEY(session_token, user_name)
);

现在可以查询了:

SELECT user_name, password FROM user_by_session WHERE session_token = '1000001';

来源:http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html#concept_ds_sgh_yzz_zj

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多