【问题标题】:Cassandra sort using updatable queryCassandra 使用可更新查询进行排序
【发布时间】:2015-01-09 14:00:12
【问题描述】:

我有一个包含属性内容和年份的数据集。我想将它们放入带有属性('content','year','frequency')的CF'words'中。 CF 应该支持以下操作。

  • 可以更新列的频率属性(即 - :可以运行类似“UPDATE words SET frequency = 2 WHERE content='abc' AND year=1990;)的查询,where 子句应包含内容和年份
  • 应该支持像“Select content from words where year = 2010 ORDER BY frequency DESC LIMIT 10;”这样的选择查询(where 子句只有年份)可以使用频率对结果进行排序

使用 Cassandra 可以满足这种要求吗?我需要在这里使用的 CF 结构和索引是什么?我应该使用哪些查询来创建 CF 和索引?

【问题讨论】:

    标签: database-design cassandra data-modeling datastax denormalization


    【解决方案1】:

    我使用下面的表结构作为解决方案。

    create table words (
      year int,
      frequency int,
      content text,
      primary key (year, frequency, content) );
    

    UPDATE 语句不起作用,因为我们无法更改集群列的值。但是我们可以使用 DELETE 和 INSERT 来代替。由于我们事先不知道旧的频率是多少(进行删除),所以我们需要保留另一个表映射内容,年份 -> 频率。

    【讨论】:

      【解决方案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)

      创建表词( 内容文字, 年份 int, 频率整数, 主键(年份、频率)); 插入单词(内容、年份、频率)VALUES('lorem ipsum dolor sit amet', 2014, 10); 插入单词(内容、年份、频率)VALUES('Sed ut perspiciatis unde', 2010, 3 ); 插入单词(内容、年份、频率)VALUES('Excepteur sint occaecat', 2010, 4 ); 从年份 = 2010 ORDER BY frequency desc limit 2 的单词中选择内容、频率; 内容 |频率 --------------------------+------------ 例外情况 | 4 Sed ut perspiciatis unde | 3 (2 行)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 2014-10-21
        • 2016-01-29
        • 2015-11-09
        • 2014-10-17
        • 1970-01-01
        • 2015-02-11
        相关资源
        最近更新 更多