我是卡桑德拉的新手,试着去理解数据模型。所以我知道如何在"james“后面加上"bob”。我还知道如何查询以获得所有跟随"bob“的人的列表,并且我知道如何查询以获得"bob”跟随者的列表。
我的问题是,在下面的情况下,如果我想知道"bob“是否跟在"james”后面,那么查询是什么样子的呢?(是或否)
这是正确的查询吗?
SELECT * FROM followers WHERE username="bob" AND following="james" 是否需要对以下内容设置第二个索引才能执行上述查询?
-- 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)
);发布于 2014-01-12 22:33:30
在这种情况下不需要二级索引。您可以使用cqlsh测试像这样的快速想法。
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您不必创建辅助索引的原因(如果您希望在规模上执行此类查询,也不应该这样做),原因是“下面”被指定为群集键。这意味着“以下”描述了分区中数据的布局,这意味着我们可以非常快地在“后续”上进行筛选。
顺便说一句,如果经常执行的查询需要一个辅助索引(允许过滤),这表明您应该重新考虑数据模型。
https://stackoverflow.com/questions/21077153
复制相似问题