Выберите TTL для элемента на карте в Cassandra

Есть ли способ выбрать значение TTL для элемента на карте в Cassandra с помощью CQL3?

Я пробовал это, но это не работает:

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

person MCs88    schedule 11.06.2013    source источник


Ответы (1)


К сожалению, я почти уверен, что ответ в том, что это невозможно с 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 ...

Затем вы можете отслеживать TTL всего столбца «данные» карты, всегда обновляя столбец «data_ttl» всякий раз, когда вы обновляете «данные». Затем вы можете запросить «data_ttl», как и любой другой столбец:

SELECT ttl(data_ttl) FROM test;

Я понимаю, что ни одно из этих решений не идеально... Я все еще пытаюсь понять, что будет лучше для меня.

person adrian lange    schedule 24.10.2013