Источником увеличения объема чтения в LSM-деревьях является то, что для выполнения операции чтения мы должны обращаться к нескольким дисковым таблицам. Это происходит потому, что мы не всегда заранее знаем, содержит ли дисковая таблица запись данных для искомого ключа.
Одной из проблем многоуровневого уплотнения по размеру является недостаток таблиц (table starvation): если уплотненные таблицы все еще достаточно малы после уплотнения (например, записи были затенены отметками полного удаления и не попали в объединенную таблицу), более высокие уровни могут содержать слишком мало таблиц для выполнения уплотнения, и их отметки полного уплотнения не будут приняты во внимание, что увеличит затраты на операции чтения.
Если бы мы реализовали удаление с помощью простого удаления элементов из резидентной таблицы, то наши операции удаления в конечном итоге либо не оказывали бы никакого влияния, либо заново восстанавливали бы прежние значения.
В LSM-деревьях для выполнения операций вставки, обновления и удаления не требуется искать записи данных на диске. Вместо этого обновления и удаления представлены как отдельные записи, которые согласовываются во время чтения.
Необходимость читать из нескольких источников вместо одного может привести к большим затратам. Чтобы смягчить эту проблему и свести количество таблиц к минимуму, запускается периодический процесс слияния, называемый уплотнением (compaction)