Cassandra中的数据模型及适当的删除策略

Cassandra中的数据模型及适当的删除策略,cassandra,Cassandra,我在卡桑德拉有下表: CREATE TABLE article ( id text, price int, validFrom timestamp, PRIMARY KEY (id, validFrom) ) WITH CLUSTERING ORDER BY (validFrom DESC); 文章和历史价格信息(validFrom是新价格的时间戳)。商品价格经常变动。我想询问一下你的情况 特定物品的历史价格 一件商品的最后价格 根据我的理解,我可以通过以下查询解决这两个问题:

我在卡桑德拉有下表:

CREATE TABLE article ( 
id text, 
price int, 
validFrom timestamp,     
PRIMARY KEY (id, validFrom)
) WITH CLUSTERING ORDER BY (validFrom DESC);
文章和历史价格信息(validFrom是新价格的时间戳)。商品价格经常变动。我想询问一下你的情况

  • 特定物品的历史价格
  • 一件商品的最后价格
  • 根据我的理解,我可以通过以下查询解决这两个问题:
    选择id,从id=X有效的物品中选择价格,从
    此查询使用项目id作为限制,查询使用分区键。由于聚类顺序是基于validFrom时间戳的反向顺序,cassandra可以高效地执行此查询。
    我说得对吗


    删除旧数据的最佳方法是什么(内部管理)。让我们假设,我想删除所有
    validFrom>20150101和<20151231
    的文章。因为我没有主键,所以即使我在validFrom上使用索引,这也是低效的,对吗?如何实现这一点?

    您可以使用外部工具:

    • 使用火花点火(即使在本地模式下)。代码可以如下所示(注意,我使用validfrom作为名称,而不是validfrom,因为它在您的模式中没有转义):
    导入com.datastax.spark.connector_
    val数据=sc.cassandraTable(“测试”、“物品”)
    .其中(“有效期自>='2020-07-28T11:50:00Z'和有效期自<'2020-07-28T12:50:00Z')
    .选择(“id”、“validfrom”)
    data.deleteFromCassandra(“测试”、“文章”,keyColumns=SomeColumns(“id”、“validfrom”))
    
    • 用于查找匹配的条目并将其输出到文件中(
      output.csv
      ,在我的示例中),然后执行删除操作:
    bin/dsbulk卸载-url output.csv\
    -查询“从test.article中选择id,validfrom,其中token(id)>:start和token(id)='2020-07-28811:50:00Z',validfrom<'2020-07-28812:50:00Z'允许过滤”
    bin/dsbulk load-查询“从test.article中删除,其中id=:id和validfrom=:validfrom”\
    -url输出.csv
    
    为了补充Alex Ott的回答,您的评论不正确:

    此查询使用项目id作为限制,查询使用分区键。由于聚类顺序基于价格,cassandra可以高效地执行此查询


    行不是按
    价格
    排序的。它们按有效期从
    开始按时间倒序排列。干杯

    谢谢,你说得对。该表按validFrom时间戳排序。我在帖子中更改了描述