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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Реализации[править | править код]

Секционирование реализовано во многих реляционных СУБД, среди таковых — IBM DB2, Informix, Oracle Database, Teradata Database, Microsoft SQL Server, PostgreSQL, MySQL, Adaptive Server Enterprise.

В различных СУБД возможности реализации несколько отличаются. В частности, в Oracle Database поддерживаются следующие методы:

  • секционирование по диапазонам значений (range partitioning),
  • хеш-секционирование (hash partitioning),
  • секционирование по списку значений (list partitioning),
  • ссылочное секционирование (reference partitioning, начиная с версии 11g),
  • секционирование по интервалу (interval partitioning, 11g),
  • составное секционирование:
    • диапазонное секционирование с хеш-подсекционированием (range-hash composite partitioning),
    • диапазонное секционирование со списочным подсекционированием (range-list composite partitioning).

Также в Oracle Database существует три типа секционированных индексов:

  • локально секционированный индекс (local index), то есть секции индекса соответствуют секциям таблицы;
  • глобально секционированный индекс (global partitioned index), такой индекс разбивается на секции по другим правилам, нежели сама таблица;
  • глобально несекционированный индекс (global non-partitioned index), такой индекс не разбивается на секции хотя таблица разбита;
  • всевозможные комбинации из этих трёх.

В Informix секционирование называется фрагментацией (framentation), и также позволяет разбивать таблицы и индексы на отдельные фрагменты по разным схемам:

  • круговая фрагментация,
  • по выражениям,
  • по списку значений,
  • по интервалам.

В MySQL начиная с версии 5.1 поддерживает следующие типы секционирования[1]:

  • по интервалам (range partitioning),
  • по списку значений (list partitioning),
  • по хешу (hash partitioning),
  • по ключам (key partitioning).

Примечания[править | править код]

Ссылки[править | править код]