Первичный ключ Cassandra Compound CQL3

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

CREATE TABLE user_data (
user_id TEXT,
log_day TEXT, -- store as 'yyyymmdd' string
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));

or

CREATE TABLE user_data (
user_id TEXT,
log_day TIMESTAMP, -- store as (timestamp-in-milli - (timestamp-in-mills mod 86400)
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));

person Gavin    schedule 23.05.2013    source источник


Ответы (2)


Что касается ключа вашего столбца «log_timestamp»: если вы работаете с несколькими пишущими клиентами, что я и предлагаю, поскольку в противном случае вы, вероятно, не приблизитесь к возможной пропускной способности в распределенной базе данных, оптимизированной для записи, такой как C *, вам следует рассмотреть возможность использования TimeUUID вместо меток времени, поскольку они не конфликтуют (при условии, что MAC-адреса уникальны) . В противном случае вам пришлось бы гарантировать, что две вставки не произойдут одновременно, иначе вы потеряете эти данные. Вы можете выполнять запросы среза столбца для TimeUUID и другие операции, основанные на времени.

person John    schedule 05.07.2013

Я бы использовал время unix (то есть 1234567890) вместо любого из этих форматы - чтобы указать на весь день, вы просто используете временную метку для 00:00.

Тем не менее, я очень рекомендую прочитать Расширенные временные ряды с Cassandra в блоге разработчиков DataStax. Он охватывает некоторые важные вещи, которые следует учитывать в вашей модели, в отношении группирования/разделения.

person mh.    schedule 23.05.2013
comment
Отметка времени просто длинная под капотом, поэтому вы можете использовать ее, если не достаточно разрешения int. - person jbellis; 23.05.2013