8

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

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

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

1 回答 1

3

可悲的是,我很确定答案是从 Cassandra 1.2 和 CQL3 开始是不可能的。您不能查询集合的单个元素。正如此博客条目所说,“您只能检索整个集合”。不过,我真的很想拥有查询集合元素的能力。

您仍然可以为集合中的各个元素设置 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;

我意识到这些解决方案都不是完美的......我仍在努力找出最适合我的解决方案。

于 2013-10-24T16:03:41.993 回答