Невозможно удалить или обновить запись в Cassandra 3.11.2 с помощью cqlsh - PullRequest
2 голосов
/ 07 августа 2020

У меня есть семейство столбцов в Cassandra со следующей схемой.

CREATE TABLE app_documents (
    key text PRIMARY KEY,
    created_at timestamp,
    created_by text,
    details text,
    id text
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
CREATE INDEX app_documents_id_idx ON app_documents (id);

В этом CF у меня есть запись с ключом 'ab c', и я могу выбрать запись с помощью запроса

select * from app_documents WHERE key = 'abc';

Теперь я пытаюсь удалить или обновить его, используя следующие запросы.

delete from app_documents WHERE key = 'abc';
update app_documents set created_by = 'pd' where key = 'abc';

, но приведенные выше команды не влияют на запись. Другие записи в таблице работают должным образом, но только эта запись застряла в этом состоянии.

Моя установка Cassandra - только один узел.

1 Ответ

3 голосов
/ 09 августа 2020

Обычно это происходит, когда данные в базе данных имеют метку времени в будущем, и это было подтверждено действием select writetime(created_by) from app_documents WHERE key = 'abc'; - запись имела метку времени 9 августа - 2 дня в будущем. Обычные причины получения таких записей:

  • часы на клиентском компьютере отключены на некоторое время - всегда рекомендуется, чтобы ntp работал и на клиентских машинах, а не только на Cassandra. серверы
  • временная метка явно устанавливается клиентом - это может привести к непредсказуемому поведению, и явные временные метки следует устанавливать только тогда, когда это требуется, например, в бизнес-логах c, но даже в этом случае это имеет смысл чтобы иметь некоторые проверки, которые предотвратят вставку меток времени в далеком будущем
...