Понимание неизменяемости SSTable

Я пытаюсь лучше понять неизменность sstables в Кассандре. Очень ясно, что происходит как в операции вставки, так и в операции обновления / удаления, когда данные существуют в памяти. Но неясно, что происходит, когда я хочу изменить данные, которые уже были сброшены.

Поэтому я понимаю простой senario: я выполняю операцию вставки, и данные записываются в memtable. Когда память заполнена, она покраснела в sstable.

Теперь, как происходит изменение данных? Что происходит, когда я выполняю команду удаления или обновления (когда данные были сброшены)? Если sstable является неизменным, то как данные будут удалены / обновлены? И как работает memtable в командах удаления и обновления (данных, которые не существуют в нем, поскольку он был удален)? Что будет содержать память?

database,cassandra,nosql,bigdata,

1

Ответов: 1


5 принят

В Cassandra / Scylla вы ВСЕГДА добавляете. Значение любой операции, будь то вставка / обновление / удаление, создаст новую запись для этого раздела, содержащую новые данные и новую метку времени. В случае операции удаления новая запись будет фактически надгробиной с новой отметкой времени (указывающей, что предыдущие данные были удалены). Это относится к тому, сохраняются ли данные в памяти (memtable) или уже сброшены на диск -> sstable.

Несколько «версий» того же раздела с разными данными и разными метками времени могут одновременно находиться в нескольких схожих (и даже в памяти). SStables будет объединено с уплотнением продолжительности и существует несколько стратегий уплотнения, которые могут быть применены.

Когда gc_grace_periodсрок действия (по умолчанию: 10 дней, перестраиваемый) истек, при следующем уплотнении удаляется надгробная плита, что означает, что данные, которые были удалены, и надгробный камень с указанием последнего действия (удалить), не будут объединены в новый sstable.

Внутренняя реализация memtables может немного отличаться между Scylla и Cassandra, но для простоты предположим, что это одно и то же.

Вас приветствует, чтобы узнать больше об архитектуре в следующей документации:

базы данных, Cassandra, NoSQL, bigdata,
Похожие вопросы