Разработка и реализация алгоритма отложенного обновления вторичных индексов
на LSM-деревьях в базах данных

Составитель:

Шпилевой Владислав Дмитриевич

Заказчики:

Mail.Ru Group & Tarantool

Актуальность

B-tree

Read/Write

balance

HDD

Память

Диск

Уровень 0

Уровень 1

Уровень N

LSM-tree

Баланс скорости случайных чтения/записи

Дисбаланс скорости последовательных

чтения/записи

"Бесплатные" чтения

 > 100х скорость HDD 

Актуальность

SSD

Обновление индексов

Б-дерево

LSM-дерево

INSERT OR REPLACE

DELETE

INSERT OR REPLACE

DELETE

Индекс

Индекс

Найти старую запись 

Вставить новую запись

Заменить старую запись

Запись на диск

Найти старую запись

Удалить

старую запись

Чтение диска

Вставить в нулевой уровень:

{данные, INSERT, версия}

Вставить в нулевой уровень:

{ключ, DELETE, версия}

Нет обращений к диску. Последовательная запись при сбросе уровня 0 на диск.

Проблема нескольких LSM-индексов: итог

Версионность вторичных индексов не работает

Больше индексов - медленнее обновления

...

Найти старое, вставить новое

Старые версии данных нужно удалять из вторичных индексов сразу, из-за чего:

Цель проекта

Разработать алгоритм обновления LSM-деревьев с отложенным удалением старых данных

Требования к реализации:

  • Разработка на языке C;
  • На основе БД заказчика - Tarantool;

Требования к алгоритму:

  • Применим к любой БД;
  • Ускорение - минимум в два раза;
  • Формальное описание алгоритма;
  • Экспериментальное исследование;
  • Публикация;

ДЗ по запросу проекта

By Vladislav Shpilevoy

ДЗ по запросу проекта

  • 1,474