为Cassandra中的地图中的元素选择TTL

时间:2013-06-11 07:07:03

标签: cassandra cql3

有没有办法在Cassandra中使用CQL3为地图中的元素选择TTL值?

我试过这个,但它不起作用:

SELECT TTL (mapname['element']) FROM columnfamily

1 个答案:

答案 0 :(得分:3)

可悲的是,我很确定答案是从Cassandra 1.2和CQL3开始不可能。您无法查询集合的各个元素。正如this blog entry所说,“你只能完整地检索一个集合”。不过,我真的很想拥有查询集合元素的能力。

您仍然可以为集合中的各个元素设置TTL。我想如果您想确保TTL对于您的集合元素有一些价值,您可以阅读整个集合,然后使用您想要的TTL更新集合(整个事物或只选择几个元素)。或者,如果您绝对需要知道单个数据的TTL,您可能只需要将模式从集合更改回旧的动态列,TTL查询肯定会起作用。

或者,第三种可能是您将另一列添加到包含集合的TTL的架构中。例如:

CREATE TABLE test (
  key text PRIMARY KEY,
  data map<text, text>,
  data_ttl text
) WITH ...

然后,您可以通过在更新“数据”时始终更新“data_ttl”列来跟踪整个地图列“数据”的TTL。然后,您可以像查询任何其他列一样查询“data_ttl”:

SELECT ttl(data_ttl) FROM test;

我发现这些解决方案都不是完美的......我仍在努力弄清楚什么对我来说最有效。