Я довольно долго работал с Кассандрой (DSE) и пытаюсь понять что-то не совсем понятное.Мы используем DSE 5.1.9 для этой иллюстрации.Это кластер с одним узлом (если у вас кластер из нескольких узлов, убедитесь, что RF = nodeCount упростит задачу).
Это очень простой пример: создайте следующую простую таблицу:
CREATE TABLE mytable (
status text,
process_on_date_time int,
PRIMARY KEY (status, process_on_date_time)
) WITH CLUSTERING ORDER BY (process_on_date_time ASC)
AND gc_grace_seconds = 60
У меня есть фрагмент кода, который вставляет записи по 5 тыс. Одновременно, всего до 200 тыс. Записей с TTL 300 секунд.Статус ВСЕГДА "ожидает рассмотрения", а process_on_date_time представляет собой счетчик, который увеличивается на 1, начиная с 1 (все уникальные записи - в основном от 1 до 200 тыс.).
Я запускаю код, а затем, когда он завершается, я сбрасываюпамятка на диск.Там только один созданный sstable.После этого не выполняется ни сжатие, ни восстановление, ни выполнение каких-либо других действий, которые могли бы создать или изменить конфигурацию sstable.
После дампа sstable я вхожу в cqlsh, включаю трассировку, устанавливаю согласованность в LOCAL_ONE и выключаю подкачку страниц.Затем я повторяю это:
SELECT * from mytable where status = 'pending' and process_on_date_time <= 300000;
Что интересно, я вижу такие вещи (вырезая текст для удобства чтения):
Run X) Read 31433 live rows and 85384 tombstone cells (31k rows returned to my screen)
Run X+1) Read 0 live rows and 76376 tombstone cells (0 rows returned to my screen - all rows expired at this point)
Run X+2) Read 0 live rows and 60429 tombstone cells
Run X+3) Read 0 live rows and 55894 tombstone cells
...
Run X+X) Read 0 live rows and 0 tombstone cells
Что происходит?Sstable не меняется (очевидно, что он неизменный), ничего больше не вставляется, не очищается и т. Д. Почему количество надгробий уменьшается до тех пор, пока оно не станет равным 0?В чем причина такого поведения?
Я ожидаю увидеть каждый прогон: чтение 100 тыс. Надгробий и прерывание запроса, поскольку все TTL истекли в одном sstable.