Cassandra добавляет TTL к существующим записям

Как я могу обновить всю таблицу и установить TTL для каждой записи?

Текущий сценарий (Кассандра 2.0.11):

стол:

CREATE TABLE external_users (
  external_id text,
  type int,
  user_id text,
  PRIMARY KEY (external_id, type)
) 

в настоящее время в этой таблице около 40 миллионов записей, и я хочу добавить TTL, скажем, 86 400 секунд (1 день). Это не проблема для новых записей с ИСПОЛЬЗОВАНИЕМ TTL (86400) или ОБНОВЛЕНИЕМ текущих записей, но как мне применить ttl для каждой уже существующей записи?

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

заранее спасибо


person Nicolas Gehlert    schedule 02.06.2015    source источник


Ответы (1)


Невозможно изменить TTL существующих данных в C*. TTL — это просто внутренний атрибут столбца, который записывается вместе со всеми другими данными столбца в неизменяемый SSTable. Цитата из документов:

Если вы хотите изменить TTL данных с истекающим сроком действия, вам необходимо повторно вставить данные с новым TTL. В Cassandra вставка данных на самом деле является операцией вставки или обновления, в зависимости от того, существует ли предыдущая версия данных.

person shutty    schedule 02.06.2015
comment
есть ли способ удалить все записи с TTL = null? @шатти - person Nicolas Gehlert; 02.06.2015
comment
Нет простого способа: просто переберите все ваши строки и удалите те, у которых ttl=0. - person shutty; 02.06.2015
comment
есть ли способ сделать это в cqlsh? - person Nicolas Gehlert; 02.06.2015
comment
Для этого вам нужно написать скрипт, cqlsh не может перебирать все строки базы данных. - person shutty; 02.06.2015