是否可以使用cql连续查询集合?

我不是*_*個鳳梨 8 cql cassandra

假设你有一行电影和一个类别列表,即

create table movie(
    uuid timeuuid,
    name text,
    category list<text>
    primary key (uuid)
);

insert into movie (uuid,name,category) values(now(), 'my movie', ['romance','comedy']);
insert into movie (uuid,name,category) values(now(), 'other movie', ['action','comedy']);
Run Code Online (Sandbox Code Playgroud)

是否有可能有效地执行以下操作:

select * from movie where category='comedy'
select * from movie where category='comedy' and category='action'
Run Code Online (Sandbox Code Playgroud)

此用例是针对MySQL数据库的最常见查询.

Lyu*_*rov 16

从cassandra 2.1开始,是的,它是:

create table cinema.movie(
    id timeuuid,
    name text,
    category list<text>, 
    primary key (id)
);

CREATE index ON cinema.movie (category);
INSERT INTO cinema.movie (id, name, category) VALUES (now(), 'my movie', ['romance','comedy']);
SELECT * FROM cinema.movie WHERE category CONTAINS 'romance';


 uuid                                 | category               | name
--------------------------------------+------------------------+----------
 b9e0d7f0-995f-11e3-b11c-c5d4ddc8930a | ['romance', 'comed`y'] | my movie

(1 rows)
Run Code Online (Sandbox Code Playgroud)

PS你的查询中有错误,你,在类别声明后的create table语句中缺少一个,而你无法now()在UUID上使用该函数,而是在寻找TIMEUUID类型.

请记住,当使用这些集合时,性能不会很好(如何定量),为这种事情创建一个单独的表可能更好.

  • Cassandra二级索引很有用,但通常无法用于系统的"主要用例".由于二级索引不会向外扩展,因为它们使用分散/聚集算法.如果这是一个主要用例,您应该将查询非规范化为第二个表. (2认同)