【问题标题】:Cassandra, counters and delete by fieldCassandra,计数器和按字段删除
【发布时间】:2015-01-25 01:23:34
【问题描述】:

我有这个特定的用例。我将计数器存储在与时间戳关联的表中:

CREATE TABLE IF NOT EXISTS metrics(
  timestamp timestamp,
  value counter,
  PRIMARY KEY ((timestamp))
);

我想删除所有时间戳低于特定值的指标,例如:

DELETE FROM metrics WHERE timestamp < '2015-01-22 17:43:55-0800';

但此命令返回以下错误:

code=2200 [Invalid query] message="Invalid operator < for PRIMARY KEY part timestamp"

我该如何实现这个功能?

【问题讨论】:

    标签: database cassandra counter cql


    【解决方案1】:

    要使删除工作,您需要提供一个带有等号运算符的精确键。使用大于/小于运算符删除不起作用。基本上,您必须获取要删除的时间戳列表,并使用(Python?)脚本或简短的(Java/C#)程序遍历它们。

    一种可能的解决方案(如果您碰巧知道要将数据保留多长时间)是为数据设置生存时间 (TTL)。在具有计数器列的表上,您不能将其作为UPDATE 命令的一部分来执行。唯一的选择是在创建表时设置它:

    CREATE TABLE IF NOT EXISTS metrics(
      timestamp timestamp,
      value counter,
      PRIMARY KEY ((timestamp))
    ) WITH default_time_to_live=259200;
    

    这将在 3 天(259200 秒)后删除所有放入表中的数据。

    编辑

    事实证明,可能解决方案确实是不可能的。尽管 Cassandra 允许您创建带有 default_time_to_live 集的计数器表,但它不会强制执行。

    回到我原来的段落,执行DELETE 的唯一方法是提供您要删除的特定密钥。而对于柜台来说,这似乎是唯一可行的方法。

    【讨论】:

    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 2020-01-22
    • 2022-12-10
    • 1970-01-01
    • 2019-05-12
    • 2014-03-23
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多