Есть ли у вас какие-либо предложения по улучшению дизайна таблицы для такого случая?
Когда моделирование данных для сценария ios такое, я рекомендую шаблон, который использует три вещи :
- Значение TTL по умолчанию, установленное для таблицы.
- Кластеризация по временному компоненту в порядке убывания.
- Настройка запроса на использование диапазона временной метки, никогда не запрашивая данные за TTL.
TTL:
позже мы go и очистим "более тяжелые" разделы
Сколько времени (в среднем) до очистки? Одна вещь, которую я хотел бы сделать, это использовать TTL на этом столе, установленный где-то около максимального количества времени, прежде чем ваша команда обычно должна их очистить.
Ключ кластеризации, Порядок убывания:
Итак, ваше определение PRIMARY KEY выглядит следующим образом:
PRIMARY KEY ((user_id,event_type),timestamp)
Убедитесь, что вы также кластеризуетесь в порядке убывания на временной метке.
WITH CLUSTERING ORDER BY (timestamp DESC)
This важно использовать в сочетании с вашим TTL. Здесь ваши надгробия находятся в «нижней части» раздела (при сортировке по timestamp
descinding), а последние данные (данные, которые вас интересуют) находятся в «верхней части» раздела.
Range Query:
Наконец, убедитесь, что ваш запрос имеет компонент диапазона в timestamp
.
Например: если сегодня 11-е число, а мой TTL составляет 5 дней, я могу запросить данные за последние 4 дня, не возвращая надгробия:
SELECT * FROM events
WHERE user_id = 11111 AND event_type = 'B'
AND timestamp > '2020-03-07 00:00:00';