有没有办法在Cassandra中使用CQL3为地图中的元素选择TTL值?
我试过这个,但它不起作用:
SELECT TTL (mapname['element']) FROM columnfamily
答案 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;
我发现这些解决方案都不是完美的......我仍在努力弄清楚什么对我来说最有效。