我有一个包含属性内容和年份的数据集。我想用属性('内容','年','频率')将它们放入CF'单词'中。 CF应支持以下操作。
使用Cassandra可以满足这种要求吗?我需要在这里使用什么CF结构和索引?我应该使用什么查询来创建CF和索引?
答案 0 :(得分:2)
要使用ORDER BY,频率必须是复合PRIMARY KEY(http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html?scroll=reference_ds_d35_v2q_xj__using-compound-primary-keys-and-sorting-results)中的第二列。使用频率作为密钥禁止更新密钥的值:"通过包括组成分区密钥的所有列,在WHERE子句中指定要更新的行。仅支持分区键的最后一列的IN关系。 UPDATE SET操作在主键字段上无效。" (http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/update_r.html)
create table words ( content text, year int, frequency int, PRIMARY KEY (year, frequency)); insert into words (content, year, frequency) VALUES ('lorem ipsum dolor sit amet', 2014, 10 ); insert into words (content, year, frequency) VALUES ('Sed ut perspiciatis unde', 2010, 3 ); insert into words (content, year, frequency) VALUES ('Excepteur sint occaecat', 2010, 4 ); select content, frequency from words where year = 2010 ORDER BY frequency desc limit 2; content | frequency --------------------------+----------- Excepteur sint occaecat | 4 Sed ut perspiciatis unde | 3 (2 rows)
答案 1 :(得分:0)
我使用以下表格结构作为解决方案。
create table words (
year int,
frequency int,
content text,
primary key (year, frequency, content) );
UPDATE语句不起作用,因为我们无法更改聚类列的值。但我们可以使用DELETE和INSERT代替。由于我们不知道提前的旧频率(要删除),我们需要保留另一个表映射内容,年 - >频率。