мне нужно хранить последние обновления, которые нужно быть прижат к странице-ленты пользователей в Cassandra таблице для последующего извлечения и схема моей таблицы выглядит следующим образом:Cassandra CQL SELECT/УДАЛИТЬ проблемы из-за первичный ключом
CREATE TABLE newsfeed (user_name text,
post_id bigint,
post_type text,
favorited boolean,
shared boolean,
own boolean,
date timestamp,
PRIMARY KEY (user_name,date,post_id,post_type));
Первые три столбца (имя пользователя, postid и posttype) в комбинации будут строить фактический первичный ключ таблицы, однако, поскольку я хотел ЗАКАЗАТЬ запросы SELECT в этой таблице на основе «дат» строк, я поместил дату -column в поля первичного ключа как «вторая» запись (я должен был это сделать?).
Когда я хочу, чтобы удалить строку, давая только "user_name, POST_ID и post_type" следующим образом:
DELETE FROM newsfeed WHERE user_name='pooria' and post_id=36 and post_type='p';
Я получаю следующее сообщение об ошибке:
Bad Request: Missing PRIMARY KEY part date since post_id is set
мне нужна дата -column, чтобы быть частью первичного ключа, поскольку я хочу использовать его в своих предложениях ORDER BY, а с другой стороны, мне нужно удалить некоторые строки, не зная их значений «даты»!
Итак, как такие проблемы решаются в Кассандре? следует ли мне фиксировать мою модель данных и иметь другую схему для работы?
У вас все еще могут возникнуть проблемы с надгробиями даже с TTL, если ваш запрос приводит к чтению надгробных камней. Чтобы этого избежать, убедитесь, что вы не пытаетесь запросить диапазоны, содержащие удаленные записи. –
@rs_atl вы правы, но это предпочтительный дизайн для таблицы с удалением. – Aaron
определенно. Просто хочу указать, что TTL по-прежнему удаляются. Я не думаю, что он ищет исчерпывающие данные, но это не ясно из вопроса. –