Предыстория
Диапазон (партиционирование) — это технология управления базами данных и организации данных. В распределенной системе мы можем организовать данные в несколько диапазонов в соответствии с определенными правилами и обеспечить динамическое управление посредством разделения и слияния, чтобы оптимизировать производительность запросов и помочь улучшить масштабируемость и доступность системы, а также балансировку нагрузки. Основное содержание этой прямой трансляции: Разделение и объединение диапазона в распределенной системе KaiwuDB.
Ниже приведен отрывок части контента. Для просмотра полного содержимого нажмите, чтобы просмотреть содержимое полной версии >> Воспроизведение видео полной версии .
Разделение диапазона KaiwuDB
Введение в раскол
SplitQueue отвечает за разделение диапазона. Условия, запускающие разделение диапазона, следующие:
- Создайте новую базу данных или таблицу.
- Размер диапазона превышает range_max_bytes.
- QPS Range слишком высок и превышает kv.range_split.load_qps_threshold (значение по умолчанию 250, настраивается).
- Измените зону настройки индекса или раздела, чтобы сделать ее независимой от родительского уровня. В особых случаях разделение adminSplit будет вызываться напрямую, минуя SplitQueue.
- При импорте большого объема данных один диапазон автоматически разбивается на несколько диапазонов.
- При импорте данных пустой диапазон предварительно разделяется на данные, которые можно импортировать позже.
- Ручное разделение: измените разделение таблицы table_name по значениям (key1,key2,…); где значения представляют значение первичного ключа. Если это совместный первичный ключ, вы можете записать несколько значений, и оно не может превышать количество. столбцы первичного ключа.
Блок-схема алгоритма разделения
Определенный узел в KaiwuDB имеет отдельный поток/работник, работающий в фоновом режиме для обработки разделения связанных диапазонов. Разделение диапазона разделено на 2 этапа: Этап 1 — Подготовка параметров разделения диапазона. Этап 2 — Обновление диапазона и его структуры индекса.
Как показано на рисунке, процесс слева — это в основном подготовка к разделению Range:
Сначала заблокируйте ключевое значение ключа разделенного диапазона. Найдя это значение ключа, система скорректирует текущий диапазон диапазона и будет использовать значение ключа разделения в качестве конечного значения ключа раздела.
Процесс создаст новый диапазон справа, его начальное значение ключа — это значение ключа, используемое для разделения, а конечное значение ключа — это конечное значение ключа исходного диапазона. В то же время после разделения исходного диапазона его версия будет итеративно обновляться на 1, а обновленная версия будет применяться к левому и правому разделенным диапазонам одновременно.
Когда параметры разделения в левой и правой частях диапазона готовы, процесс переходит в фазу обновления системных данных. Таким образом, необходимо подготовить запросы на запись и обработать запросы. Этот процесс связан с транзакцией и всем. транзакция должна выполнить следующие вопросы:
Начать новую транзакцию, статус ожидает
- Обновить левый диапазон
- Напишите новый правый диапазон
- Обновите соответствующий путь поиска двухуровневой древовидной структуры индекса Биг-Мака в левом диапазоне.
- Вставьте соответствующий путь поиска двухуровневой древовидной структуры индекса Биг-Мака в правый диапазон.
- Статус транзакции обновления — «Зафиксировано».
- Обновите MVCC левого и правого диапазона.
- Очистите намерение письма
На этом разделение всего Диапазона завершено.
Пример разделенного триггера
Следующий сценарий триггера отладки возникает после того, как размер диапазона превышает заранее определенное критическое значение. Каждый диапазон обрабатывается в последовательном режиме ожидания таймера. После пробуждения часов будет проверен размер диапазона. Если будет обнаружено, что размер диапазона составляет около 70 МБ и превышает заданный диапазон в 64 МБ, система активирует функцию разделения диапазона, чтобы разделить диапазон, превышающий предел емкости.
Фоновый поток или рабочий процесс будет постоянно проверять все диапазоны на предмет обработки в цикле.
KaiwuDB Объединение диапазонов (Объединение)
Пример слияния
Как показано на рисунке, когда пользователь удаляет большой объем данных, размер двух соседних диапазонов резко уменьшается, и система объединяет их.
На следующем рисунке показан эффект после слияния. После того как предыдущие два диапазона: lem-str, str- были объединены, str- исчез, остались только значения lem-. . Соответственно, структура данных второго уровня индекса Биг-Мака также была скорректирована, а горошина в древовидной структуре индекса первого уровня исчезла.
Условия объединения
Условия для объединения диапазонов относительно строгие, в основном они включают в себя: Объединение не отключено. Имеется следующий диапазон и та же зона настройки. Размер двух объединяемых диапазонов меньше, чем range_min_bytes. Разделение диапазона QPS не будет активировано после слияния.
Последнее означает, что если в диапазоне, в котором расположены данные, есть горячие данные, слияние не будет выполнено, поскольку слияние вызовет разделение, что приведет к сбою в нормальной работе системы.
Блок-схема алгоритма слияния
Как показано на рисунке, слияние, как и разделение, также делится на два этапа: первый этап — подготовка параметра Range, второй этап — включение транзакций для обработки обновления Range; Для просмотра полного содержимого нажмите, чтобы просмотреть полную версию >> [Воспроизведение видео полной версии] ( https://www.bilibili.com/video/BV11y421z7jH/?spm_id_from=333.999.0.0 )
Пример отладки слиянием Следующие две схематические диаграммы показывают конкретный процесс отладки слияния диапазона и соответствующие параметры, связанные с диапазоном.