Физическое расположение надгробия в Кассандре

Насколько я знаю, Кассандра использует "надгробную плиту" в качестве метки удаления. Поскольку SSTable неизменяем, он помечает удаленную запись с помощью надгробия. Итак, где надгробие было отмечено в файлах SSTable? Отмечен ли он в индексном файле в SSTable или в других местах? Я хочу понять конкретную логику потока надгробий.


person Terry Cho    schedule 17.07.2012    source источник


Ответы (1)


Эта статья от Аарона Мортона должна дать подробное объяснение о том, как работает надгробие и удаление. Кредит должен быть действительно приписан ему. Если вы хотите увидеть реализацию надгробия, прочитайте это для получения дополнительной информации. Ниже приведены некоторые пункты, взятые с сайта для ответа на этот вопрос.

Когда столбец удаляется, в Cassandra создается DeletedColumn, также известный как Tombstone. DeletedColumn будет иметь:

name: Имя удаленного столбца

значение: Текущее время сервера в секундах с эпохи unix (целое число). Это известно как localDeleteTime и используется во время процесса (cassandra) GC.

временная метка: как предоставлено клиентом

Затем мутация применяется к memtable одним из двух способов. Если memtable не содержит именованного столбца для строки, он просто добавляется в memtable. Если есть существующий столбец, он reconcile() ‘d с удаленным столбцом. Новый DeletedColumn заменит существующий столбец, если он имеет более высокую (предоставленную клиентом) отметку времени. LocalDeleteTime не используется для согласования. В этот момент любое предыдущее значение столбца в memtable будет потеряно и не будет сохранено на диск.

Теперь у нас есть надгробие. Если нет других мутаций, DeletedColumn позже будет сохранен в SSTable, как и любой другой столбец.

Таким образом, это memtable имеет отметку надгробной плиты. Объяснение продолжалось; выдержка с сайта.

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

Например, если в SSTable есть фрагмент строки для ключа «foo», в котором указано, что столбцы «bar» — это «baz», а DeletedColumn в другой SSTable с более высокой отметкой времени, когда они согласованы, DeletedColumn «выиграет». Текущее представление строки будет заключаться в том, что столбец «bar» удален.

person Jasonw    schedule 17.07.2012