Cassandra - определение глобального TTL и изменение уже существующего

Я знаю, что можно определить TTL при выполнении INSERT / UPDATE в столбец / таблицу Cassandra и т. Д. (INSERT INTO ... USING TTL 1234). Также можно определить TTL по умолчанию при создании таблицы (CREATE TABLE ... WITH default_time_to_live="1234";).

Однако можно ли определить более глобальные значения по умолчанию? Возможные сценарии включают:

Другой вопрос:

  • Есть ли быстрый и дешевый способ изменить (увеличить, уменьшить) TTL для уже существующих данных (как можно более глобально - надеюсь, на уровне таблицы)? Согласно документам требуется повторная вставка (https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useExpire.html#useExpire__setting-a-ttl-for-a-specific-column-RYjSo4Iu), поэтому простой ALTER TABLE работать не будет. Это правильно? Кто-нибудь может предложить лучшие идеи?

person theo    schedule 20.11.2019    source источник


Ответы (1)


Вы вроде ответили на свой вопрос. 1. TTL возможен только на уровне столбца или таблицы. 2. Чтобы изменить TTL существующего столбца, вам необходимо повторно вставить его с новым значением.

Вы можете установить TTL на уровне таблицы с помощью команды create table ddl и свойства таблицы default_time_to_live.

Когда вы переписываете столбец, он обновит его с новым TTL. двух рядов не будет. Помните, что каждый DML входит в cassandra с отметкой времени, и последнее обновление побеждает.

person GAK    schedule 20.11.2019
comment
1. Есть ли возможность заранее определить TTL по умолчанию для таблиц? Таким образом, каждая таблица получает набор TTL, даже если пользователь / приложение не устанавливает его явно. 2. Правильно ли я предполагаю, что это приведет к перезаписи исходного столбца, или это приведет к тому, что оба столбца (старый, новый) займут дисковое пространство? - person theo; 20.11.2019
comment
You can set the TTL at table level with the create table ddl and with the table property default_time_to_live. Это я знаю. Я спрашиваю, можно ли вместо установки TTL по умолчанию при создании любой новой таблицы установить TTL по умолчанию, который каждая новая таблица каким-то образом унаследует (не лучшее слово, но все же) без необходимости явно указывать значение TTL . - person theo; 20.11.2019
comment
Если вы используете драйверы Java или GO для создания таблицы, вы можете добиться этого программно, вы не можете достичь этой глобальной цели с помощью cql. - person GAK; 21.11.2019