Базы данных

Распределённые базы данных

Секционирование

  • Разбиение таблицы на фрагменты
    • Хранятся в разных местах
    • Возможно, на разных компьютерах (шардинг)
    • Уменьшение числа чтений
  • Типы секционирования
    • Вертикальное
    • Горизонтальное

Вертикальное секционирование

  • Разрезание «по столбцам»
    • Проекция/соединение
  • Преимущества
    • Отделение «частых» данных от «редких»
    • Защита информации
    • Автоматическая поддержка для CLOB и BLOB
  • Недостатки
    • Нет специальной поддержки
    • Зависимость от представления
    • Необходимость обновляемых представлений

Пример вертикального секцион.

  • Исходная таблица
    • Students(SId, GId, FirstName, LastName,
          PassSeries, PassNo, PassIssued, Photo)
      
  • Секции таблицы
    • StudentDatum(SId, GId, FirstName, LastName)
      
    • StudentPasses(SId, Series, No, Issued)
      
    • StudentPhotos(SId, Photo)
      
    • create view Students as StudentDatum
          natural join StudentPasses natural join StudenPhotos
      
  • Права доступа
    • StudentDatum, StudentPhotos — все
    • StudentPases — деканат

Горизонтальное секционирование

  • Разрезание «по строкам»
    • Фильтрация/объединение
  • Преимущества
    • Отделение «близких» данных от «дальних»
    • Уменьшение размера секции
    • Встроенная поддержка
    • Прозрачность для пользователя
  • Недостатки
    • Возможное замедление работы

Пример горизонтального секцион.

  • Исходная таблица
    • Points(SId, CId, Points, Date)
      
  • Секции по Date
    • $Points_{2023-2}$ — оценки за осенний семестр 2023
    • $Points_{2023-1}$ — оценки за весенний семестр 2023
    • $Points_{2022-1}$ — оценки за весенний семестр 2022
    • ...

Методы секционирования

  • Простые
    • По диапазонам
    • По значениям
    • По хэшу
  • По выражению
  • Составные
    • По диапазону и хэшу
    • ...

По диапазонам

  • Секция содержит значения из диапазона
    • Задаются границами
  • Пример
    • create table Points (...)
      partition by range(Date) (
          partition pHist   values less than '2023-02-01',
          partition p2023s1 values less than '2023-07-01',
          partition p2023s2 values less than '2024-02-01',
          partition pFuture values less than maxvalue
      );
      

По значениям

  • Секция содержит значения из списка
    • Задаются списками значений
  • Пример
    • create table Points (...)
      partition by list(Term) (
          partition pHist       values in ('t2022-1', 't2022-2', ...),
          partition p2023s1 values in ('t2023-1'),
          partition p2023s2 values in ('t2023-2'),
          partition pFuture   values in ('t2024-1')
      )
      
  • Секция может быть не определена
    • insert into Points (Term) values ('t2001-1');
      

По хэшу

  • Разбиение на несколько корзин
    • Хэшируется набор столбцов
  • Пример
    • create table Points (...)
      partition by hash(Term)
      partitions 4;
      

По выражению

  • На секции разбиваются значение выражения
    • Любой метод простого секционирования
  • Пример
    • create table Points (...)
      partition by year(Date) (
          partition pHist values less than 2023,
          partition pCurrent values less than 2024,
          partition pFuture values less than maxvalue
      )
      

Составное секционирование

  • Секции разбиваются на подсекции
    • Возможно, по разным атрибутам
  • Пример
    • create table Points (...)
      partition by year(Date)
      subpartition by hash(Term) (
          partition History values less than 2023 (
              subpartition History1, subpartition History2
          ),
          partition Current values less than 2024 (
              subpartition Current1, subpartition Current2
          )
      )
      

Изменение состава секций

  • Удаление секции
    • alter table таблица drop partition секция;
      
  • Разбиение секции
    • alter table таблица reorganize секция into (...);
      
  • Перехэширование
    • alter table таблица add partition число;
      
    • alter table таблица coalesce partition число;
      

Отбрасывание секций

  • Оптимизатор «знает» о секциях
    • Где какие данные находятся
    • $=$, in, between, сравнения
  • Пример
    • select * from Points where Date = '2023-12-18'
      
    • Будет использована секция только 2023 года

Секционирование и индексы

  • Типы индексов
    • Локальный индекс — один на секцию
    • Глобальный индекс — один на таблицу
    • Секционированный индекс — разбит на секции по‑своему
  • Локальный и глобальный индексы
    • Ускорение при отбрасывании секций
  • Секционированный индекс
    • Согласованное секционирование
    • Среднее между глобальным и локальным

Секционирование и ключи

  • Определение секции по ключу
    • Секционируемые столбцы — подключ
    • Подключ всех ключей
  • Операции над значениями
    • «Склейка» значений — разрешена
    • «Разбиение» значений — нежелательно

Репликация

Содержание

Репликация

  • Поддержание одинаковых данных на нескольких узлах
  • Типы репликации
    • Синхронная (распределённые транзакции)
    • Асинхронная
  • Схемы репликации
    • С основной копией
    • Симметричная

Реализация репликации

Содержание

Репликация с основной копией

  • Согласованные изменения
  • Постоянное подключение

Симметричная репликация

  • Противоречивые изменения
  • Автономная работа

Реализация репликации

  • Где есть все данные об изменениях?
    • Протокол транзакций
  • Рассылка протоколов транзакций
  • Гранулярность
    • Операторы
    • Записи

Репликация операторов

  • На реплике выполняются те же операторы
  • Преимущества
    • Мало данных
  • Недостатки
    • Операторы должны быть детерминированы
    • Необходимо учитывать взаимный порядок выполнения транзакций

Репликация записей

  • Пересылается информация об изменении записей
  • Преимущества
    • Детерминированность
  • Недостатки
    • Большой объём данных

Применения

Содержание

Применения репликации

  • Вертикальное масштабирование
  • Горизонтальное масштабирование
  • Повышение доступности
  • Резервное копирование
  • Преобразование данных

Вертикальное масштабирование

  • Асимметричная схема
    • Большое количество чтений
    • Малое количество записей
  • Применение
    • Web-сервера
    • ERP-системы

Горизонтальное масштабирование

  • Симметричная схема
    • Большое количество локальных операций
    • Периодическая синхронизация
  • Применение
    • Географическая распределённость
    • Независимость по данным
    • Непостоянная связь

Повышение доступности

  • Асимметричная схема
  • Резервное копирование
    • Постоянная синхронизация
    • Резервное копирование с остановкой реплики
  • Доступность данных
    • Назначение новой основной копии

Преобразование данных

  • Асимметричная схема
    • Периодическая синхронизация
    • При репликации данные преобразуются
  • Применение
    • Изменение формата хранения
    • Консолидация данных
    • Унификация данных

Децентрализация

  • Локальная независимость
    • Узел должен функционировать даже в изоляции
  • Отсутствие центрального узла
    • Нет «уязвимого места»
  • Непрерывное функционирование
    • Надежность
    • Доступность
  • ⇒ Равноправие узлов
    • Выборы временного координатора

Прозрачность

  • Независимость от расположения
    • Программы могут работать на любом узле
    • Удаленный доступ к данным
  • Независимость от фрагментации
    • Программы не знают на каком узле находятся данные
    • Унифицированный доступ к данным
    • Географическое секционирование
  • Независимость от репликации
    • Автоматическая поддержка репликации
    • Выбор узла для обновления

Распределённые транзакции

  • Поддержка распределённых запросов
    • Один запрос получает данные с разных узлов
    • Удалённый доступ к данным
  • Распределённые транзакции
    • Несколько узлов участвуют в единой транзакции
    • Согласованность фиксации и отката

Независимость от окружения

  • Независимость аппаратуры
    • Write once, run anywhere
    • Унифицированное представление данных
  • Независимость от ОС
    • Прозрачная поддержка различных ОС
    • Конвертация данных
  • Независимость от сети
    • Прозрачная поддержка различных сетей
  • Независимость от типа СУБД
    • Прозрачная поддержка различных СУБД
    • Конвертация данных

Распределённые транзакции

  • В транзакции участвует несколько узлов
    • Либо на всех зафиксирована
    • Либо на всех откачена
  • Сбои
    • Участников
    • Коммуникаций

Двухфазная фиксация

Задача двух генералов (1)

  • Одновременная атака ⇒ победа
  • Одиночная атака ⇒ поражение
  • Обмен сообщений
    • Посыльные
    • Могут убить

Задача двух генералов (2)

  • Вероятностное решение
    • Послать гонца со временем
    • Ждать подтверждение
    • При необходимости повторить
  • Отсутствие гарантированного решения
  • Доказательство
    • Пусть существует конечный протокол
      • ⇒ минимальное по включению множество сообщений
    • Пусть последнее сообщение не доставлено
      • ⇒ принять решение нельзя

Обработка сбоев координатора

  • До принятия решения
    • Откат
  • Принятие решение
    • Запись в протокол транзакций
  • После принятия решения
    • Выполнение решения

Обработка сбоев участников

  • До получения решения
    • Запросить у координатора
  • Получение решения
    • Запись в протокол транзакций
  • После получения решения
    • Выполнение решения
    • Отсылка подтверждения
    • Запись в протокол транзакций

Улучшение протокола

  • Когда требуется помнить решение?
    • Между принятием и подтверждениями
  • Протокол предполагаемой фиксации
    • При решении «фиксировать» — «забыть» транзакцию
    • Неизвестная транзакция — фиксировать
  • Протокол предполагаемого отката
    • При решении «откатить» — «забыть» транзакцию
    • Неизвестная транзакция — откатить

Ложная фиксация

  • Протокол предполагаемой фиксации
  • Сбой на первой фазе
    • «Потеря» транзакции
    • Ответы «фиксировать»
  • Хранение всех участников транзакции
  • Протокол предполагаемого отката
    • Проблемы нет

Проблемы распределённых баз данных

Содержание

CAP-теорема

  • Два свойства из трех
    • Consistency — информация на разных узлах согласована
    • Availability — система отвечает на запросы
    • Partition tolerance — связи между узлами могут обрываться
  • Свойства не бинарные
    • Доказательство верно только для бинарных свойств

Partition tolerance

  • В случае обрыва связи
    • Частичный отказ от Availability ⇒ функционирует одна часть системы
    • Частичный отказ от Consistency ⇒ необходимость объединения состояний
  • Система не разделена
    • Полные Availability и Consistency

Подход BASE

  • Ослабление свойств
    • Basically Available — сбой узла приводит к отказу только для части пользователей
    • Soft-state — изменение состояния без внешнего вмешательства
    • Eventual Consistency — вре́менная несогласованность

Разрешение несогласованности

  • По времени
    • При чтении ⇒ замедляется чтение
    • При записи ⇒ замедляется запись
    • Асинхронная ⇒ требуется специальный процесс
  • Выбор варианта
    • Метки времени
    • Векторные часы

Оптимизация запросов

  • Цели оптимизации
    • Минимизировать время выполнения
    • Минимизировать количество данных
    • Минимизировать количество коммуникаций
  • Средства оптимизации
    • Выбор узлов получения и обработки данных
    • Полусоединения
    • Применение репликации

Управление параллельностью

  • Цели управления
    • Распараллеливание запроса
    • Изоляция транзакций
    • Детектирование распределённых взаимных блокировок
  • Средства управления
    • Распределённые транзакции
    • Распределённые блокировки
    • Стратегия основной копии

Управление каталогом

  • Цели
    • Независимость от расположения
    • Независимость от фрагментации
    • Возможность переноса данных
  • Методы
    • Централизованное хранение
    • Полная репликация
    • Локальное секционирование
    • Секционирование + репликация

Независимость от окружения

Задачи шлюза

  • Реализация протоколов
    • Семантическое взаимодействие
  • Конвертация
    • Данных
    • Запросов
    • Каталога
  • Поддержка
    • Распределённых транзакций
    • Блокировок

Литература

Содержание

Основная литература

  • Дейт К. Введение в системы баз данных (глава 18)

Дополнительная литература