首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra DataModel查询

Cassandra DataModel查询
EN

Stack Overflow用户
提问于 2014-01-12 16:28:41
回答 1查看 64关注 0票数 1

我是卡桑德拉的新手,试着去理解数据模型。所以我知道如何在"james“后面加上"bob”。我还知道如何查询以获得所有跟随"bob“的人的列表,并且我知道如何查询以获得"bob”跟随者的列表。

我的问题是,在下面的情况下,如果我想知道"bob“是否跟在"james”后面,那么查询是什么样子的呢?(是或否)

这是正确的查询吗?

代码语言:javascript
复制
SELECT * FROM followers WHERE username="bob" AND following="james" 

是否需要对以下内容设置第二个索引才能执行上述查询?

代码语言:javascript
复制
    -- User storage
CREATE TABLE users (username text PRIMARY KEY, password text);

-- Users user is following
CREATE TABLE following (
    username text,
    followed text,
    PRIMARY KEY(username, followed)
);

-- Users who follow user
CREATE TABLE followers (
    username  text,
    following text,
    PRIMARY KEY(username, following)
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 22:33:30

在这种情况下不需要二级索引。您可以使用cqlsh测试像这样的快速想法。

代码语言:javascript
复制
cqlsh> use ks;
cqlsh:ks> CREATE TABLE followers (
      ...     username  text,
      ...     following text,
      ...     PRIMARY KEY(username, following)
      ... );
cqlsh:ks> INSERT INTO followers (username, following ) VALUES ( 'bob', 'james' );
cqlsh:ks> SELECT * FROM followers WHERE username='bob' and following='james';

 username | following
----------+-----------
      bob |     james

您不必创建辅助索引的原因(如果您希望在规模上执行此类查询,也不应该这样做),原因是“下面”被指定为群集键。这意味着“以下”描述了分区中数据的布局,这意味着我们可以非常快地在“后续”上进行筛选。

顺便说一句,如果经常执行的查询需要一个辅助索引(允许过滤),这表明您应该重新考虑数据模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21077153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档