【问题标题】:Cassandra secondary index issue - returning zero rowsCassandra 二级索引问题 - 返回零行
【发布时间】:2014-11-15 21:22:20
【问题描述】:

我有一个问题,即二级索引在 cassandra 中返回零行:

我正在关注入门文档:

http://www.datastax.com/documentation/getting_started/doc/getting_started/gettingStartedCQL.html

基于此,我有以下 cassandra 脚本

/* 你好.cql */ 删除键空间测试; CREATE KEYSPACE 测试 WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; 使用测试; CREATE TABLE 用户(user_id int PRIMARY KEY,fname 文本,lname 文本); 描述表格; 插入用户(user_id、fname、lname) 价值观(1745,“约翰”,“史密斯”); 插入用户(user_id、fname、lname) 价值观(1744,“约翰”,“能源部”); 插入用户(user_id、fname、lname) 价值观(1746,“约翰”,“史密斯”); 从用户中选择 *; 在用户上创建索引(lname); /* 这些查询都返回 0 行 ??? */ SELECT * FROM users WHERE lname = 'smith'; SELECT * FROM users WHERE lname = 'doe';

不过……

cqlsh

这应该很简单——我错过了什么吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    要返回结果的 2 个 SELECT 查询意味着 CREATE INDEX 将同步执行并且它将在所有现有数据都被编入索引后返回。

    如果您更改脚本中的顺序以在插入任何数据之前定义索引,我希望 2 选择返回结果。

    【讨论】:

    • 是的,我以为我已经尝试过了,但我一定是粗心大意。再试一次,你是对的。 Datastax 文档错误。
    【解决方案2】:

    使用 Cassandra 2.1.0,无论索引是在插入数据之前还是之后创建,我都能得到结果。

    在 127.0.0.1:9042 连接到测试集群。 [cqlsh 5.0.1 |卡桑德拉 2.1.0 | CQL 规范 3.2.0 |本机协议 v3] 使用帮助寻求帮助。 qlsh> cqlsh> CREATE KEYSPACE test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; cqlsh> 使用测试; cqlsh:test> CREATE TABLE users (user_id int PRIMARY KEY, fname text, lname text); cqlsh:test> INSERT INTO users (user_id, fname, lname) ...价值(1745,'约翰','史密斯'); cqlsh:test> INSERT INTO users (user_id, fname, lname) ...价值(1744,'约翰','doe'); cqlsh:test> INSERT INTO users (user_id, fname, lname) ...价值(1746,'约翰','史密斯'); cqlsh:test> CREATE INDEX ON users (lname); cqlsh:test> SELECT * FROM users WHERE lname = 'smith'; 用户 ID |名称 |名字 ---------+-------+-------- 1745 |约翰 |史密斯 1746 |约翰 |史密斯 (2 行) cqlsh:test> SELECT * FROM users WHERE lname = 'doe'; 用户 ID |名称 |名字 ---------+-------+-------- 1744 |约翰 |母鹿 (1 行)

    【讨论】:

    • 在 hello.cql 脚本中运行命令也会返回 3 行、2 行和 1 行。
    • 很公平——可能是特定于平台或版本的。为了完整起见,当我回到那个框时会发布具体的版本信息。
    【解决方案3】:

    这是我安装的平台和版本信息:

    john@piggies:~/Dropbox/source/casandra$ nodetool -h localhost 版本 发布版本:2.0.10 john@piggies:~/Dropbox/source/casandra$ lsb_release -a 没有可用的 LSB 模块。 经销商编号:Ubuntu 说明:Ubuntu 14.04.1 LTS 发布:14.04 代号:靠谱 john@piggies:~/Dropbox/source/casandra$ ^C john@piggies:~/Dropbox/source/casandra$

    【讨论】:

    • 此问题在 2.0.10 tarball 安装或任何以前的 2.0 tarball 安装中不存在。我刚才尝试在云中的ubuntu上安装2.0.10包失败,所以我无法检查你的平台。是否可以将石板擦干净并重试?
    • 更正--在 2.0.5 issues.apache.org/jira/browse/CASSANDRA-6517 上有一个稍微类似的问题,但已解决。如果你愿意,请尝试,nodetool rebuild_index 测试用户
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2016-06-29
    • 2013-09-30
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多