Какое влияние оказывает количество уровней при выровненном уплотнении? - PullRequest
5 голосов
/ 27 января 2020

Я знаю, как работает выравнивание с уплотнением в DBS, таких как Cassandra, rocksdb et c. У одних максимальное количество уровней 4, а у других 7. Как это число влияет на процесс уплотнения? Почему я не могу иметь только 2 уровня: 1-й, который сбрасывает данные таблицы памяти (возможно перекрытие между файлами), и 2-й, который содержит неперекрывающиеся SST?

Если есть какой-либо вопрос do c или повторяющийся вопрос Пожалуйста, перенаправьте.

Edit-1: Количество дублирующихся данных увеличивается при увеличении количества уровней.

Ответы [ 2 ]

5 голосов
/ 28 января 2020

LCS решает проблему пространственного усиления STCS. Это также уменьшает усиление чтения (среднее число операций чтения с диска, необходимых для запроса на чтение).

Выровненное сжатие делит небольшие sstables («фрагменты») на уровни:

Уровень 0 (L0) равен новые sstables, недавно сброшенные из memtables. По мере того, как их число растет (и чтение замедляется), наша цель - переместить sstables с этого уровня на следующий. Каждый из остальных уровней, L1, L2, L3 и т. Д. c., Представляет собой один прогон экспоненциально увеличивающегося размера: L1 - это прогон из 10 стабил, L2 - это прогон из 100 стабил, L3 - это прогон из 1000 sstables и тд. (Фактор 10 является настройкой по умолчанию как для Scylla, так и для Apache Cassandra.)

Решая или, по крайней мере, значительно улучшая проблему пространственного усиления, LCS создает еще одну проблему, усиление записи, хуже.

«Усиление записи» - это количество байтов, которое нам пришлось записать на диск для каждого байта вновь очищенных sstable-данных. Усиление записи всегда больше, чем 1,0, потому что мы записываем каждый фрагмент данных в commit-log, и затем запишите его снова в sstable, а затем каждый раз, когда сжатие включает этот фрагмент данных и копирует его в новый sstable, это еще одна запись.

Подробнее об этом здесь:

4 голосов
/ 29 января 2020

Выровненное уплотнение работает в Scylla очень похоже на то, как оно работает в Cassandra и Rocksdb (с некоторыми небольшими отличиями). Если вам нужен краткий обзор того, как работает выравнивание с уплотнением в Scylla и почему, я предлагаю вам прочитать мой пост в блоге https://www.scylladb.com/2018/01/31/compaction-series-leveled-compaction/.

Ваш конкретный c вопрос о том, почему два уровня (L0 недавно очищенных sstables, Ln sstables диапазона непересекающихся диапазонов) недостаточно - очень хороший вопрос:

Основная проблема заключается в том, что один очищенный memtable (sstable в L0), содержащий случайную коллекцию пишет, часто будет пересекать все sstables в Ln. Это означает, что необходимо переписывать всю базу данных каждый раз, когда появляется новая записываемая таблица, и в результате получается огромное усиление записи, что совершенно неприемлемо.

Один из способов значительно уменьшить это усиление записи (но, возможно, нет). достаточно) ввести каскад промежуточных уровней L0, L1, ..., Ln. Конечным результатом является то, что у нас есть L (n-1), который составляет 1/10 (скажем) размера Ln, и мы объединяем L (n-1) - ни одного sstable - в Ln. Это тот подход, который используется в выровненной стратегии сжатия (LCS) во всех упомянутых вами системах.

Совершенно другой подход может заключаться не в объединении одного sstable в Ln, а в попытке сначала собрать большой объем данных. и только затем объединить его в Ln. Мы не можем просто собрать 1000 таблиц в L0, потому что это сделает чтение очень медленным. Скорее, чтобы собрать этот большой объем данных, можно использовать многоуровневое сжатие (STCS) внутри L0. Другими словами, этот подход представляет собой «смесь» STCS и LCS с двумя «уровнями»: L0 использует STCS на новых sstables, Ln содержит серию sstables (sstables с непересекающимися диапазонами). Когда L0 достигает 1/10 (скажем) размера Ln, L0 уплотняется до Ln. Такой смешанный подход может иметь более низкое усиление записи, чем LCS, но, поскольку большая часть данных выполняется в Ln, он будет иметь такое же малое пространство и усиление чтения, что и в LCS. Насколько мне известно, ни одна из упомянутых баз данных (Scylla, Cassandra или Rocksdb) не поддерживает такое «смешанное» уплотнение.

...