Эта статья познакомит вас с уплотнением LSM.

задняя часть база данных Архитектура внешний интерфейс алгоритм Facebook

Автор: Ху Тинг, старший технический эксперт базы данных OceanBase компании Ant Financial.

В настоящее время очень распространены СХД на основе архитектуры LSM.Для этой архитектуры важной операцией является уплотнение.Эта статья познакомит вас со знаниями о уплотнении.

Google опубликовал статью о BigTable 10 лет назад, которая способствовала популярности системной архитектуры на основе LSM.Данные пользователя записываются сначала в WAL, затем в Memtable.После выполнения определенных условий Memtable замораживается, и выполняется операция дампа для формирования файл данных SSTable. Поскольку запись данных продолжает увеличиваться, количество дампов будет продолжать увеличиваться, и все больше и больше таблиц SST будут выгружаться. Однако слишком большое количество таблиц SSTable приведет к увеличению числа операций ввода-вывода запроса данных, поэтому фоновый процесс пытается постоянно объединять эти таблицы SST.Этот процесс объединения называется уплотнением. Уплотнение делится на две категории: незначительное уплотнение и значительное уплотнение.

Незначительное уплотнение относится к выбору одной или нескольких небольших смежных таблиц SSTable дампа и 0 или более Frozen Memtables и объединению их в более крупную SSTable. Результатом незначительного сжатия является меньшее количество SSTables и их больший размер.

Основное уплотнение относится к объединению всех дампов SSTable и одной или нескольких замороженных Memtables в одну SSTable.Этот процесс очистит удаленные данные. При нормальных обстоятельствах основное уплотнение будет длиться долгое время, и весь процесс будет потреблять много системных ресурсов, что окажет относительно большое влияние на бизнес верхнего уровня.​ ​ ​

коэффициент усиления уплотнения

Обычно уплотнение включает в себя три фактора усиления, и уплотнение должно найти компромисс между тремя.

написать зум

Усиление записи: Усиление записи, предполагая, что 10 МБ данных записываются в секунду, но наблюдается, что скорость записи на жесткий диск составляет 30 МБ/с, тогда усиление записи равно 3. Запись делится на немедленную запись и запись с задержкой.Например, журнал повторов — это немедленная запись, а традиционные грязные страницы на основе базы данных B-Tree и уплотнение LSM — это отложенная запись. Когда журнал повторов записывается с использованием прямого ввода-вывода, он должен быть выровнен не менее чем по байтам 512. Если запись журнала составляет 100 байтов, на диск необходимо записать 512 байтов, а усиление записи равно 5.

читать увеличение

Усиление чтения: Усиление чтения, соответствующее тому, сколько раз простой запрос должен прочитать жесткий диск. Например, простой запрос читает 5 страниц и происходит 5 операций ввода-вывода, тогда увеличение чтения равно 5. Если все неконечные узлы B-дерева кэшированы в памяти, то точка чтения-усилителя равна 1, а конечный блок может быть получен за одно чтение с диска; краткий диапазон чтения-усилитель равен 1~2, а 1 Можно использовать ~2 чтения с диска.Получите желаемый Leaf Block.

космическое увеличение

Расширение пространства: увеличение пространства, предположим, мне нужно хранить 10 МБ данных, но реальный жесткий диск занимает 30 МБ, тогда увеличение пространства равно 3. Существует много факторов, влияющих на увеличение пространства, таких как потребность во временном пространстве для хранения во время процесса сжатия, фрагментация пространства, небольшая доля действительных данных в блоке и старая версия данных, которая не удаляется вовремя.

В последние годы во многих статьях было проведено больше исследований усиления записи LSM, но для самого усиления записи это очень старая проблема.В компьютерной системе, если процессоры двух соседних слоев несовместимы или пара приложений согласована, и т. д. При особых потребностях могут возникнуть проблемы с усилением записи. Например, кэш ЦП и ячейка памяти, блок файловой системы и сектор диска, блок базы данных и блок файловой системы, повтор/отмена базы данных, журнал файловой системы и т. д. На следующем рисунке показано сравнение коэффициентов усиления нескольких популярных KV, протестированных в статье PebblesDB:

Коэффициент усиления RocksDB достигает 42 раз, а LevelDB также достигает 27 раз. Усиление записи означает увеличение количества операций чтения и записи, что приведет к колебаниям производительности системы. Например, для твердотельных накопителей это ускорит сокращение срока службы и будет потреблять больше энергии с точки зрения затрат. Использование лучшего алгоритма для предотвращения увеличения записи может использовать более дешевые SSD, усиление записи также влияет на пропускную способность непрерывной записи системы базы данных.Если пропускная способность диска составляет 500 МБ/с, а усиление записи равно 10, то максимальная пропускная способность непрерывной записи базы данных составляет 50 МБ/с, поэтому решение усиления записи становится проблемой. проблема очень важный вопрос.

Некоторые тестовые выводы, представленные в статье Facebook «Анализ HDFS в HBase: тематическое исследование сообщений Facebook», представленной на Fast 14: в бизнес-системе сообщений Facebook соотношение чтения и записи для бизнеса составляет 99: 1, что, наконец, отражено на диске , Соотношение чтения и записи изменилось на 36:64.

Суть проблемы увеличения заключается в том, насколько сильно система должна быть «всегда в порядке». Так называемое «в любое время» означает, что никакая запись не может привести к выходу системы из строя; так называемое «глобальное» означает, что любые метаединицы в системе должны содержаться в порядке. Серия B-Tree является типичным представителем глобального порядка в любое время, в то время как Fractal Tree разрушает глобальные ограничения, допускает локальный беспорядок и улучшает возможность случайной записи; серия LSM еще больше нарушает ограничения в любое время, позволяя сортировать и сортировка по фоновому уплотнению. В такой системе, как LSM, которая полагается на фоновую сортировку для обеспечения упорядочивания, чем строже требования системы к упорядочиванию, тем серьезнее будет усиление записи.

Трудно одновременно оптимизировать увеличение записи, увеличение чтения и увеличение пространства.Например, при внутренней дефрагментации SSD, чем больше фрагментация, тем серьезнее увеличение пространства и увеличение пространства для чтения.Чтобы улучшить увеличение пространства и увеличение чтения, страница. Действительные данные копируются на новую страницу (копирование), что приводит к увеличению записи.Если эффективная скорость передачи данных на странице ниже, увеличение пространства будет больше, а усиление записи копирование будет ниже Чем меньше значение, тем больше усиление записи при копировании.

Роль и побочные эффекты уплотнения

По мере увеличения числа операций записи данных продолжает срабатывать Minor Freeze, а данные дампа продолжают увеличиваться.Запрос может требовать все больше и больше операций ввода-вывода, а задержка чтения продолжает увеличиваться. Выполнение Minor Compaction сделает количество файлов дампа в основном стабильным, и тогда количество операций ввода-вывода будет стабильным, а задержка будет стабильной в пределах определенного диапазона. Однако операция Minor Compaction для перезаписи файлов вызовет большую нагрузку на полосу пропускания и кратковременную нагрузку на ввод-вывод. Следовательно, можно считать, что Minor Compaction использует кратковременное потребление операций ввода-вывода и пропускной способности в обмен на низкую задержку последующих запросов.

В обмен на низкую задержку для последующих запросов, в дополнение к кратковременному усилению чтения, уплотнение также оказывает большое влияние на запись. Когда запросов на запись слишком много, непрерывно запускается незначительное уплотнение для создания дампа SSTables. Несколько раз незначительного замораживания вызовут серьезное замораживание, что приведет к значительному уплотнению. Однако скорость сжатия не может соответствовать скорости записи данных. Ограничение запись пользовательских данных. Если уплотнение потребляет много операций ввода-вывода и пропускной способности, это также приведет к резкому падению производительности чтения. Чтобы избежать этого, скорость запросов на запись ограничивается, когда Memtable загружена.

Незначительное уплотнение освобождает память Memtable, очищает ненужные данные с несколькими версиями и обеспечивает стабильное количество выгружаемых SSTables для уменьшения задержки чтения; Основное уплотнение удаляет удаленные и просроченные данные, эффективно уменьшая пространство для хранения и задержку чтения. Уплотнение позволит поддерживать относительно стабильную задержку чтения данных, но расплатой за это является большое количество сбоев задержки чтения и определенная блокировка записи.

цель уплотнения

Дизайн Compaction всегда преследует точку баланса: с одной стороны, он должен обеспечить основной эффект Compaction, а с другой стороны, он не будет оказывать серьезного давления на ввод-вывод. Однако не существует единой стратегии проектирования, которая работала бы для всех сценариев приложений или всех наборов данных. Стратегия, которую выбирает уплотнение, должна определяться в соответствии с различными бизнес-сценариями и характеристиками различных наборов данных. Разработка стратегии сжатия должна основываться на характеристиках бизнес-данных.Цель состоит в том, чтобы уменьшить различные расширения и постоянно взвешивать следующие моменты:

Разумный контроль усиления чтения: избегайте значительного увеличения задержки чтения из-за увеличения незначительного замораживания и избегайте запросов на чтение слишком большого количества таблиц SSTable;

Разумный контроль увеличения записи: избегайте многократного сжатия одних и тех же данных;

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

Контролируйте ресурсы, используемые уплотнением: используйте меньше ресурсов в часы пиковой нагрузки и используйте больше ресурсов в часы пиковой нагрузки;

Контролируйте плавность уплотнения: при определенной нагрузке время отклика и пропускная способность бизнеса стабильны и предсказуемы;

Эволюция алгоритма уплотнения

Memtable (добавочные данные) + L1 (базовые данные)

Это идеальный сценарий. Память машины относительно велика, а дисковое пространство и бизнес-данные относительно малы. Почти все ежедневные модификации бизнеса могут храниться в Memtable, а добавочные данные и базовые данные обрабатываются ежедневно Основное уплотнение.Объединение, как показано на следующем рисунке:


Каждая таблица содержит добавочные данные Memtable и базовые данные SSTable.Этот ежедневный алгоритм крупного сжатия относительно прост.Усилитель чтения точки равен 1, усилитель чтения ближнего диапазона равен 1, усиление пространства равно 1, а усиление записи равно sizeof(база данных) / sizeof(memtable) + 1. Этот алгоритм сжатия обеспечивает оптимальное усиление чтения и увеличение пространства.В случае большой памяти Memtable и небольшого дискового пространства и бизнес-данных усиление записи также приемлемо, но с ростом объема бизнес-данных степень сжатия выше. быстрый рост пространства для хранения на одной машине, усиление записи стало очень огромным, а скорость ежедневного крупного сжатия становилась все медленнее и медленнее.

Memtable (добавочные данные) + L0 (добавочные данные дампа) + L1 (базовые данные)

С развитием бизнеса ежедневно обновляемые данные становятся все больше и больше, и Memtable больше не может хранить измененные данные в течение всего дня.Когда системной памяти мало, запускается Minor Freeze, а затем генерируется SSTable сброс, как показано на следующем рисунке:



Точка чтения-усилителя составляет >= 1 чтение с диска и несколько фильтров Блума, ближний диапазон чтения-усилитель представляет собой сумму количества L0+L1 SSTables на чтение с диска, а усиление записи равно sizeof(database) / sizeof(ежедневный прирост объема данных ) + 2 (журнал повторов, L0); за последние годы объем памяти отдельной машины почти не увеличился, но общий объем бизнес-базовых данных и ежедневных инкрементных данных значительно вырос, поэтому используется алгоритм ежедневного основного уплотнения написать большое количество усиления. По мере увеличения количества таблиц SSTable уровня L0 усиление чтения продолжает увеличиваться.Чтобы ограничить количество таблиц SSTable уровня L0, когда количество дампов достигает определенного числа, инициируется основное замораживание, а затем инициируется основное уплотнение. Эта стратегия приводит к множеству крупных сжатий в день.По мере роста базового объема данных увеличение объема записи становится больше, а основное сжатие становится все медленнее и медленнее.

Выберите стратегию уплотнения в соответствии со сценарием

Как выбрать увеличение чтения, увеличение записи и увеличение пространства в разных сценариях? Часто бывает трудно учесть различные подробные требования, когда стратегия уплотнения принята в системе единообразно, и настройка различных стратегий сжатия для разных таблиц может лучше адаптироваться к нагрузке чтения и записи таблицы.

Увеличьте вставку/обновление/удаление строки, независимо от отношения чтения/записи

Оптимальное усиление записи и усиление пространства, без усиления чтения, используйте режим Memtable + L1, если диапазонов удаления много, отметьте диапазон удаления в Memtable.

только запись, много случайных строк вставки/обновления/удаления

Оптимизируйте усиление записи, примите режим Memtable + L0 + L1, создайте SSTable для каждого дампа и выполните основное уплотнение, когда общий размер L0 совпадает с размером L1, чтобы свести к минимуму усиление записи.

в основном пишут, много случайных строк вставляют/обновляют/удаляют

Оптимизировать усиление записи, допустить немного большее усиление чтения, принять режим Memtable + L0 + L1, уровень L0 накапливает несколько инкрементных данных SSTable Major Freeze, уровень L0 содержит несколько таблиц SST, а количество таблиц SSTable и SSTable уровня L0 контролируется в соответствии с оптимизированной записью. Стратегия усиления.Размер, использование чередующегося уплотнения и стратегии прогрессивного слияния для уменьшения увеличения записи и увеличения временного пространства основного уплотнения.

только читать или писать редко

Оптимальное усиление записи, усиление чтения и увеличение пространства с использованием режима Memtable + L1, в Memtable нет данных или имеется только небольшой объем данных.

в основном читать, небольшое количество случайных вставок/обновлений/удалений rowkey

Оптимизируйте усиление чтения, примите режим Memtable + L0 + L1 и каждый раз объединяйте замороженную Memtable и предыдущую SSTable уровня L0 в новую SSTable уровня L0.Если диапазонов удаления много, отметьте диапазон удаления в Memtable и L0. -layer SSTable. , увеличение записи основного уплотнения, выполняемого L0 и L1, относительно невелико.

в основном читать, много случайных вставок/обновлений/удалений строки

Оптимизируйте усиление записи и усиление чтения. Принят режим Memtable + L0 + L1. Уровень L0 накапливает несколько инкрементных данных SSTable Major Freeze. Уровень L0 содержит несколько таблиц SST. Таблицы SST слоя L0 в диапазоне объединяются в соответствии с точками доступа пользователя. , Если существует много диапазонов удаления, пометьте диапазон удаления в SSTable слоя Memtable и L0, разделите L0 и L1 на несколько полос поддиапазонов и выполните основное уплотнение только после того, как каждый поддиапазон накопит достаточно добавочных данных, аналогично прогрессивному При слиянии каждое основное замораживание объединяет часть данных диапазона L0 и L1. Если удалений слишком много, увеличение пространства не является оптимальным, и место для хранения удаленных данных не может быть немедленно освобождено.