假设你有一部电影和一个类别列表,即
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']);
是否可以有效地执行以下操作:
select * from movie where category='comedy'
select * from movie where category='comedy' and category='action'
此用例是针对MySQL数据库的最常见查询。
答案 0 :(得分:16)
As of 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)
P.S。您的查询中有错误,在类别声明后您在create table语句中缺少,
并且您无法在UUID上使用now()
函数,而是在寻找TIMEUUID类型。
请记住,在使用这些集合时,性能不会很高(对定量而言如何),为这类事件创建一个单独的表可能会更好。