Секционирование — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (rollbackEdits.php mass rollback)
 
Строка 1: Строка 1:
{| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;"
 
|+
 
|-align="center"
 
|'''НЕТ ВОЙНЕ'''
 
|-style="font-size: 16px;"
 
|
 
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.
 
 
Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.
 
 
Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.
 
 
Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.
 
 
''Антивоенный комитет России''
 
|-style="font-size: 16px;"
 
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
 
|-style="font-size: 16px;"
 
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].
 
|}
 
 
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =

Текущая версия на 19:34, 4 сентября 2022

Определение:
Секционирование — это разделение таблицы базы данных на отдельные фрагменты с раздельными настройками физического хранения.

Фрагменты могут хранится на разных компьютерах или дисках одного компьютера. Секционирование используется в целях повышения производительности и доступности больших баз данных. Это достигается за счет параллельного чтения и записи на различных дисках, а также работы оптимизатора запросов.

Типы секционирования

Вертикальное

Разбиение таблицы «по столбцам». Условие корректности: секции содержат надключ (следует из теоремы Фейгина).

Преимущества:

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

Недостатки:

  • Нет специальной поддержки
  • Зависимость от представления
  • Необходимость обновляемых представлений

Горизонтальное

Разбиение таблицы «по строкам». Условие корректности: каждая строка попадает ровно в одну секцию.

Преимущества:

  • Отделение «близких» данных от «дальних» (например, зависящих от времени).
  • Уменьшение размера секции
  • Встроенная поддержка
  • Прозрачность для пользователя

Недостатки:

  • Возможное замедление работы

Пример: таблица Points(SId, CId, Mark, Date), секции разбиты по Date на основе года.

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

  • Простые
    • По диапазонам (задается границами)
    • По значениям (списки конкретных значений)
    • По хешу (записи разбиваются по хеш значению заданного набора столбцов)
  • По выражению (секция задается любым методом простого секционирования)
  • Составные (секции разбиваются на подсекции, например, сначала по диапазону, а затем по хешу)

При попытке записи значения, которое не попадает ни в одну секцию, происходит ошибка.

Управление секциями

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

Удаление секции

 alter table таблица drop partition секция;

Разбиение секции

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

 alter table таблица reorganize секция into (...);

Перехеширование

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

 alter table таблица add partition число;
 alter table таблица coalesce partition число;

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

Оптимизатор запросов умеет использовать секционирование для повышения производительности. Ненужные секции могут быть отброшены, а запросы на оставшихся станут параллельными. Например, может быть оптимизирована операция select со сравнениями, =, in, between.

Индексы

Индексы могут быть секционированы.

Типы индексов:

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

Локальный и глобальный индекс нужны для оптимизации запросов.

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

Литература