Как устроен путь записи в LSM-дереве, лежащем в основе Cassandra и подобных хранилищ?
- Почему Cassandra быстро пишет?
Запись → журнал (commit log) и memtable в памяти → при заполнении сброс неизменяемым отсортированным файлом SSTable → фоновая компакция сливает файлы.
- Вся запись последовательная — отсюда скорость
- Чтение проверяет memtable и несколько SSTable, отсекая лишние фильтрами Блума
- Удаление — надгробие, место освобождается при компакции
А ещё Цена — усиление записи при компакции и всплески задержки
Подробно
Ключевая идея в том, что диск получает только последовательные записи: ничего не обновляется по месту, что радикально быстрее случайных обновлений B-tree. Плата возникает при чтении — искомый ключ может лежать в памяти или в любом из накопившихся файлов, поэтому обращений становится несколько; смягчают это фильтры Блума, отсеивающие файлы без нужного ключа, и разреженные индексы. Вторая часть цены — компакция: она потребляет диск и процессор в фоне и способна повлиять на задержки, а до её выполнения удалённые данные физически остаются на диске в виде надгробий. Отсюда практическое правило: такие хранилища выбирают под нагрузку с преобладанием записи и доступом по известному ключу.
Что хотят услышать
- Путь записи по шагам.
- Почему быстро.
- Чтение, фильтры Блума, компакция и надгробия.
Частые ошибки
- Считать удаление в таких хранилищах немедленным освобождением места.
- Игнорировать влияние компакции на задержки и планирование дискового пространства.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Записи копятся в памяти и теряются при сбое узла
- ✗Каждая запись сразу обновляет страницу на диске по месту, а журнал пишется уже после
- ✗Данные пишутся в B-tree с перебалансировкой при каждой вставке
- ✓Журнал и память → сброс неизменяемым файлом на диск → фоновая компакция
Что спросят дальше
- Зачем нужны фильтры Блума при чтении?
- Что такое надгробия и чем опасно их накопление?
Разбор темы
- Колоночные БД: wide-column и аналитические
Разница между wide-column (Cassandra) и column-oriented OLAP (ClickHouse), partition/clustering keys, LSM-дерево и зачем хранить по колонкам.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.