Партиционирование данных

Содержание раздела
  1. Управление партиционированием данных
  2. Возможности масштабирования данных
  3. Шардирование данных с помощью партиций
  4. Репликация партиционированных данных
  5. Ключ и диапазоны партиционирования
  6. Модификация партиционированных данных
    1. Загрузка и вставка данных в партиционированную таблицу
    2. Удаление данных из партиционированной таблицы
    3. Загрузка и вставка данных в партицию, удаление данных из партиции
  7. Чтение и выгрузка партиционированных данных
    1. Чтение и выгрузка данных из партиционированной таблицы
    2. Чтение и выгрузка данных из партиции
  8. Сочетание с retention-правилами

Партиционирование данных — распределение данных логической таблицы на подмножества (партиции). Партиционирование увеличивает эффективность работы с большим количеством данных за счет обращения к отдельным партициям, а не к полному объему данных таблицы.

Партиционирование доступно только для СУБД ADP.

Управление партиционированием данных

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

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

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

Возможности масштабирования данных

Все партиции одной партиционированной таблицы могут размещаться в одном или разных датасорсах. Это позволяет организовать масштабирование следующих видов:

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

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

Пример горизонтального масштабирования без репликации

Шардирование данных с помощью партиций

С помощью партиций также можно реализовать шардирование данных по разным серверам (инстансам) СУБД. Для этого следует разместить партиции в разных датасорсах, представляющих собой разные серверы СУБД.

Репликация партиционированных данных

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

На рисунке ниже показан пример размещения трех партиций одной партиционированной таблицы по разным датасорсам. Для двух партиций (Б 1 и Б 2) используется репликация данных: каждая из партиций размещается в двух датасорсах одновременно. Для наглядности каждая партиция и ее реплики выделены на рисунке одним цветом.

Пример горизонтального масштабирования с репликацией данных

Ключ и диапазоны партиционирования

Каждая партиция партиционированной таблицы содержит свой набор записей, определяемый диапазонами значений ключа партиционирования. Диапазоны партиционирования задаются при создании партиции, ключ партиционирования — при создании партиционированной таблицы.

Ключ партиционирования должен быть подмножеством первичного ключа. Например, первичным ключом может быть сочетание идентификатора записи и кода региона, ключом партиционирования — код региона, а диапазонами партиционирования — списки кодов регионов.

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

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

Модификация партиционированных данных

Модифицировать партиционированные данные можно любым из способов:

  • через партиционированную таблицу,
  • напрямую в партиции — как в обычных логических таблицах, минуя партиционированную таблицу.

Загрузка и вставка данных в партиционированную таблицу

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

Данные, для которых не нашлось партиции с подходящим диапазоном партиционирования, игнорируются системой.

На рисунке ниже показана схема распределения вставленных записей по партициям. Предполагается, что в записях 2, 3 и 5 значение ключа партиционирования относится к партиции 1 (принадлежит ее диапазону партиционирования), а в записях 1 и 4 — к партиции 3.

Загрузка и вставка данных в партиционированную таблицу

Удаление данных из партиционированной таблицы

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

На рисунке ниже показана схема удаления данных партиции через партиционированную таблицу. Предполагается, что запрос содержит условие WHERE, которое однозначно определяет партицию и соответствует записям 1 и 4 партиции 3.

Удаление данных из партиционированной таблицы

Загрузка и вставка данных в партицию, удаление данных из партиции

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

На рисунке ниже показана схема загрузки и обновления данных напрямую в партиции. Предполагается, что только записи 1 и 4 относятся к указанной партиции 3 (принадлежат ее диапазону партиционирования), поэтому после применения фильтра остаются только они.

Загрузка и обновление данных в партиции

Чтение и выгрузка партиционированных данных

Чтение и выгрузка данных из партиционированной таблицы

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

Запрос чтения или выгрузки данных из партиционированной таблицы должен содержать условие на основе столбцов ключа партиционирования, позволяющее однозначно определить партицию с подходящим диапазоном партиционирования. Возможные варианты условия: условие WHERE, условие JOIN-соединения или комбинация этих двух условий.

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

Чтение из нескольких партиций одновременно не поддерживается.

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

Чтение и выгрузка данных из партиционированной таблицы

Чтение и выгрузка данных из партиции

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

На рисунке ниже показана схема чтения и выгрузки данных напрямую из партиции. Предполагается, что только записи 1 и 4 относятся к указанной партиции 3 (принадлежат ее диапазону партиционирования), поэтому после применения фильтра выбираются только они.

Чтение и выгрузка данных из партиции

Сочетание с retention-правилами

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

Настройка единого retention-правила сразу для всех партиций партиционированной таблицы недоступна.