Есть ли способ выбрать значение TTL для элемента на карте в Cassandra с помощью CQL3?
Я пробовал это, но это не работает:
SELECT TTL (mapname['element']) FROM columnfamily
Есть ли способ выбрать значение TTL для элемента на карте в Cassandra с помощью CQL3?
Я пробовал это, но это не работает:
SELECT TTL (mapname['element']) FROM columnfamily
К сожалению, я почти уверен, что ответ в том, что это невозможно с 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;
Я понимаю, что ни одно из этих решений не идеально... Я все еще пытаюсь понять, что будет лучше для меня.