Секція (бази даних)

Секція (англ. partition) — поділ логічної бази даних або її складових елементів на окремі незалежні частини. Розбиття бази даних зазвичай виконується за для покращення керованості, збільшення продуктивності чи доступності, а також балансування навантаження.

Переваги багатьох секцій[ред. | ред. код]

  • Покращення керованості - менший розмір секції дозволяє проводити незалежне обслуговування від інших секцій. Реорганізація та побудова індексів.
  • Балансування навантаження - Зменшення розміру секції може зменшити навантаження. викидаючи секції які не прийматимуть участь у запиті.
  • В деяких системах наявність розбиття може призвести до пришвидшення виконання запиту, тому що СКБД дозволить паралельну обробку даних в всіх секціях.
  • Керування даними на базі часової оперативності (Tiering). Деякі СКБД дозволяють управляти розташуванням даних на дискових системах. таким чином оперативні секції можна розмістити на швидких продуктивних носіях, а архівні на менш продуктивних але дешевших. Це протилежний підхід

Критерії розбиття[ред. | ред. код]

Сучасні реляційні системи керування базами даних пропонують різні критерії розділення бази даних. Всі вони базуються на тому, що у таблиці є поле яке визначає ключ розбиття (англ. partitioning key), на основі певного критерію від його значення. В результаті такому рядку призначається секцію.

Поширеними критеріями є:

  • Діапазонне розбиття (англ. range partitioning) — обирає секцію визначенням, чи ключ розбиття перебуває всередині певного діапазону. Воно розподіляє кортежі на основі інтервалів (діапазонів) значення деякого атрибуту. Популярним прикладом є секціонування по діапазону дат. Наприклад, є таблиця в якій реєструються події, з колонкою "дата", яка містить дату та час події, яка стає ключем розбиття. Ми можемо можете використовувати діапазонне розбиття, щоб розбити дані на секції за місяцями, кварталами або роками. На додачу до підтримки запитів точної відповідності (як у гешуванні), воно добре підходить для запитів діапазонних. Наприклад, запит із умовою знайти дані за минулий місяць, сервер буде шукати дані лише в тих секціях де зберігаються дані за минулий місяць, і не читати в інших. Процес коли СКБД помічає що деякі секції можна не використовувати для виконання такого запиту називається відкиданя секцій (elimination partition).
  • Спискове розбиття (англ. list partitioning) — секція призначається словником, який описує список значень та секції які їм відносяться. Якщо ключ розбиття рядка приймає має одне з цих значень - секцію обирається з словника. Наприклад, всі рядки, де колонка Country є одним з Ісландія, Норвегія, Швеція, Фінляндія чи Данія, можуть будувати секцію для нордичних країн, для інших країн - секція з відповідним регіоном. Для значень які не описані, може існувати секція за замовчуванням.
  • Кругове розбиття (англ. round-robin partitioning) — найпростіша стратегія, що забезпечує рівномірний розподіл даних. Ключем розбиття стає числовий ідентифікатор, секції нумеровані, і номер секції визначається функцією залишок від ділення на номер секції (i mod n). Ця стратегія дозволяє знижувати навантаження при точному пошуку по ключу. Однак пошук по діапазону значень вимагатиму доступу до всіх секцій таблиці.
  • Геш-розбиття (англ. hash partitioning) — узагальнений випадок round-robin partitioning, застосовує геш-функцію до деякого атрибуту, що дає номер секції. Ця стратегія дозволяє обробляти запити точної відповідності на атрибут вибірки в точності одним вузлом, а всі інші запити обробляти паралельно всіма вузлами.
  • Складене розбиття (англ. composite partitioning) — дозволяє певні комбінування вищенаведених схем розбиття, наприклад, спочатку діапазонного, а потім геш-розбиття. Наприклад PostgreSQL пропонує ієрархічне розбиття, коли секція в свою чергу бути розбита на секції.

Способи розбиття[ред. | ред. код]

Популярним застосування розбиття (англ. partitioning) є в розподілених системах керування базами даних. Кожна секція може поширюватися на декілька вузлів, і користувачі на вузлі можуть виконувати локальні транзакції на секції. Це підвищує продуктивність для місць, які мають регулярні транзакції з залученням певних розрізів даних, зберігаючи доступність і безпеку.

Терміни секція або партиція, а також процес розбиття (секціонування, партиціонування) частіше використовуються коли фізично всі частини таблиці знаходяться на одному сервері, і переважно стосуються реляційних СКБД. Коли частини даних таблиці знаходяться на окремих серверах розподіленої бази, і дані які в них знаходяться є незалежними від даних в інших секціях, то використовується термін шард (осколок з англ. shard).

Детальніші відомості з цієї теми ви можете знайти в статті Шард (архітектура баз даних)[en].

Розбиття може здійснюватися або побудовою окремих малих баз даних (кожна з власними таблицями, індексами та журналами транзакцій), або розділенням вибраних елементів, наприклад, просто однієї таблиці.

Горизонтальне розбиття[ред. | ред. код]

Горизонтальне розбиття (англ. horizontal partitioning) залучає вставку різних рядків у різні таблиці. Наприклад, замовники з ZIP-кодами менше за 50000 зберігаються в CustomersEast, тоді як замовники з ZIP-кодами понад 50000 зберігаються в CustomersWest. Тоді двома таблицями розділів є CustomersEast і CustomersWest, тоді як для забезпечення повного перегляду всіх замовників над ними обома може бути створено розріз з об'єднанням.

Вертикальне розбиття[ред. | ред. код]

Вертикальне розбиття (англ. vertical partitioning) залучає створення таблиць із меншою кількістю колонок та застосування додаткових таблиць для зберігання решти колонок[1]. Нормалізація також залучає таке розділення колонок між таблицями, але вертикальне розбиття виходить за рамки цього та розбиває навіть вже нормалізовані колонки. Для реалізації вертикального розбиття також можуть використовуватися різні фізичні носії; наприклад, одним зі способів вертикального розбиття є зберігання на інших пристроях нечасто використовуваних або дуже широких колонок. Здійснюваний явно чи неявно, цей тип розбиття називається «розділенням рядків» (англ. row splitting, рядок розділено його колонками). Поширеною формою вертикального розбиття є відділення динамічних даних (повільних для пошуку) від статичних даних (швидких для пошуку) до таблиці, де динамічні дані не використовуються так часто, як статичні. Створення розрізу над двома новоствореними таблицями відтворює початкову таблицю зі втратою продуктивності, проте, продуктивність зростатиме при доступі до статичних даних, наприклад, для статистичного аналізу.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Vertical Partitioning Algorithms for Database Design. — Стенфордський університет, 1984. — DOI:10.1.1.97.8306. Архівовано з джерела 20 жовтня 2012. Процитовано 26 березня 2018.