Партиціонування як підхід до оптимізації зберігання та вибірки великих масивів даних у інформаційних системах

Особливості партиціонування в об'єктно-реляційній системі керування базами даних PostgreSQL. Дослідження наближеного до реальності випадка використання партиціонування для оптимізації зберігання та вибірки масивів даних на прикладі банківської системи.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 19.12.2024
Размер файла 128,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.Allbest.Ru/

ДВНЗ «Ужгородський національний університет»

Кафедра комп'ютерних систем та мереж

Партиціонування як підхід до оптимізації зберігання та вибірки великих масивів даних у інформаційних системах

Гедеон Т.С., асистент

Гедеон Г.О., асистент

м. Ужгород

Анотація

У статті розглядаються особливості партиціонування в об'єктно-реляційній системі керування базами даних PostgreSQL. Описано принцип побудови таблиці з діапазонним партиціонуванням, наведено приклад розподілу даних поміж однотипних таблиць і показано різницю між збереженням та вибіркою даних з використанням двох стратегій: з партиціонуванням та без нього. Досліджено наближений до реальності випадок використання партиціонування для оптимізації зберігання та вибірки великих масивів даних, побудовано спрощену базу даних на прикладі банківської системи. Виконано порівняння трьох однаково-логічних таблиць з різними властивостями: звичайна, з індексом та з партиціонуванням, досліджено обсяг на диску, що займають дані. При підході з партиціонуванням таблиці обсяг даних на 30-40% менший. Це пов'язано з різними вимогами до первинного ключа, що впливає на розмірність індексу.

При порівнянні швидкодії виконання запиту до вибірки малої кількості даних (у середньому 86 430 записів) результати показали зниження продуктивності у випадку з партиціонуванням таблиці. При розширенні діапазону вибірки даних (у середньому 2 636 104 записів) швидкість виконання запитів зросла у 3-5 разів, при об'єднанні таблиць - у 2-3 рази.

Виконуючи вибірку даних з об'єднанням таблиць, а також групуванням записів, отримано результати, що свідчать про зростання швидкості виконання запиту на 10-20% у таблиці з використанням партиціонування.

Отже, у статті описано використання діапазонної форми партиціонування, деталізовано її переваги та недоліки, зокрема суттєве збільшення швидкодії у конкретних випадках, а також економію використання дискового простору.

Ключові слова: база даних, Big Data, діапазонне партиціонування, інформаційна система, таблиця баз даних, PostgreSQL Partitioning, query performance, Explain Analyze.

Abstract

Partitioning as an approach to optimizing the storage and retrieval of large data arrays in information systems

Hedeon T.S., Hedeon H.O., Assistant, Uzhhorod National University, Uzhhorod

The article presents the specifics of partitioning in the object- relational database system PostgreSQL. The principle of constructing a table with range partitioning is described. An example of data distribution between tables with the same column structure was provided, demonstrating the difference in storing and retrieving data using two strategies: with and without partitioning.

A realistic case of using partitioning to optimize the storage and retrieval of large data arrays was studied, and a simplified database was built using a banking system as an example. A comparison of three logically identical tables with different properties was performed: normal, with index, and with partitioning. Additionally, the usage of disk space for those cases was investigated. With the table partitioning approach, the data volume is reduced by 30-40%. This is due to the different requirements for the primary key, which affect the properties of the index.

When comparing the performance of a query to retrieve a small amount of data (an average of 86,430 records), the results showed a decrease in performance when using table partitioning. When expanding the range of retrieved data (an average of 2,636,104 records), the query execution speed increased by 3-5 times, and when joining tables, it increased by 2-3 times.

When retrieving data with joined tables and grouped records, the results indicated a 10-20% increase in query execution speed for a partitioned table.

In this manner, the article describes the utilization of range partitioning, elaborating on its advantages and disadvantages, including a significant increase in speed in specific cases and its impact on disk space usage.

Keywords: database, Big Data, range partitioning, information system, database table, PostgreSQL Partitioning, query performance, Explain Analyze.

Постановка проблеми

Сучасні інформаційні системи та різноманітні сервіси потребують детальної хронології змін даних, що дозволяє підвищити їх захист та забезпечує можливість відновлення попередніх версій. Це актуально при навмисних спотвореннях або зміні даних зі сторони користувачів системи із відповідними правами, адже одним із аспектів хронології змін даних є збереження інформації про виконавця дії. Вагомий недолік збереження хронології змін об'єктів у системі - великий обсяг дискового простору, необхідний для цих даних.

При проектуванні архітектури інформаційної системи, важливим етапом є планування структури бази даних. Враховуючи рейтинг систем керування базами даних [1], реляційні бази даних є беззаперечним лідером, тому дослідження буде проводитися на базі системи керування базами даних PostgreSQL.

У даній статті описано стратегію розподілу даних поміж однотипних таблиць і показано різницю між збереженням та вибіркою даних з використанням двох стратегій: з партиціонуванням та без нього.

Аналіз останніх досліджень і публікацій. У статті [2] описано види та переваги різних форм партиціонування, наведено покрокову інструкцію побудови таблиць з прикладами їх цільового використання.

Дослідження продуктивності партиціонування за hash формою наведено у статті [3]. Автор використовує однотабличну базу даних з полем ідентифікатора (id) та цілочисельним полем. Результати тестування показують суттєву різницю у швидкості виконання запитів, однак примітивне представлення бази даних, наведене у статті, а також здійснення запиту без використання поля, яке бере участь у партиціонуванні, не відповідає ідеї використання партиціонування у реальних умовах, а, отже, отримані показники не можуть слугувати базою для подальших досліджень.

Результати швидкості виконання запитів копіювання [4] свідчать про зменшення швидкодії виконання запитів до таблиць, що використовують партиціонування, на 20-25%, однак відсутність деталізованого опису структури бази даних та її властивостей не дозволяє однозначно оцінити якість проведених досліджень.

Мета статті - дослідити наближений до реальності випадок використання партиціонування для оптимізації зберігання та вибірки великих масивів даних на базі системи керування базами даних PostgreSQL і форми партиціонування поділу на діапазони на прикладі бази даних транзакцій у банківській системі.

Виклад основного матеріалу дослідження

партиціонування база даний postgresql банківський система

Партиціонування - це механізм поділу великих масивів даних, зокрема, таблиць баз даних, на менші логічні частини / секції за деякими критеріями. Це забезпечує покращення продуктивності виконання запитів, особливо тоді, коли більшість записів таблиці бази даних, до яких виконується запит або набір запитів, розташована в межах однієї або невеликої кількості секцій. У цьому випадку розбиття ефективно замінює верхні рівні дерева індексів, підвищуючи ймовірність того, що часто використовувані частини індексів будуть знаходитися в пам'яті.

Коли запит або оновлення даних стосується значної частини однієї секції, продуктивність може бути покращена виконанням послідовного сканування цієї секції, замість використання індексу, що потребує доступу до читання по всій таблиці.

Завантаження та видалення великого обсягу даних може бути виконано шляхом додавання або видалення секцій, якщо цей метод передбачений у схемі партиціонування, за допомогою DROP TABLE або ALTER TABLE DETACH PARTITION. Це не тільки зменшує час виконання, а й допомагає уникнути використання операції VACUUM.

Переваги, наведені вище, особливо актуальні при роботі з великими обсягами даних (BIG DATA), проте користь від партиціонування залежить від застосування методу для конкретного випадку.

Об'єктно-реляційна система керування базами даних PostgreSQL підтримує вбудовані форми партиціонування:

- RANGE (Range Partitioning): таблиця розділяється на “діапазони”, визначені за ключовим стовпцем або набором стовпців, без перекриття між діапазонами значень, які призначені для різних розділів. Наприклад, можна розділити за діапазонами дат або ідентифікаторами для конкретних бізнес- об'єктів;

- LIST (List Partitioning): таблиця розділяється шляхом явного переліку значень ключів, які з'являються у кожному розділі, це може бути корисним при розподілу товарів магазину по категоріях;

- HASH (Hash Partitioning): таблиця розділяється за допомогою вказання модулю та залишку для кожного розділу. Кожен розділ буде містити рядки, для яких хеш-значення ключа розділу, поділене на модуль, буде давати вказаний залишок.

У даній статті механізм партиціонування розглядається на прикладі транзакцій у банківській системі у формі діапазонного партиціонування, де транзакція - це послідовність операцій, що виконуються, які не можуть бути розділені і є одним цілим [5].

Перший крок - побудова примітивної бази даних, що містить таблиці (див. рис. 1) для зберігання даних про користувачів, їх банківські рахунки та транзакції. Тип користувача (type) визначається його приналежністю до банку (працівник / клієнт): клієнт може мати банківські рахунки, працівник - бути виключно виконавцем (автором) транзакції. Таблиця даних транзакцій містить зв'язки з двома банківськими рахунками: джерелом та призначенням, а також автором транзакції.

Рис. 1 Структура бази даних

Для порівняння двох підходів, з партиціонуванням та без нього, створена таблиця partitioned transactions, яка має ідентичні зв'язки з таблицею transactions, але створена за принципом партиціонування за полем createdat. Останнє обумовлено тим, що для дослідження у даній роботі найбільш вагомим елементом транзакції для пошуку є час її проведення. Також, порівняння виконання запитів буде проведено без використання індексу та з індексом на полі created at у таблиці transactions.

Таблиця partitioned transactions містить набір розділів, що мають префікс partitioned transactions*, кожен з який відповідає за зберігання даних у певному місяці року, наприклад, partitioned_transactions_y2023m01 містить записи із значення поля created at у діапазоні між '2023-01-01 00:00:00' та '2023-02-01 00:00:00'. Закінчення назви розділу відповідає за певний рік та місяць, за якими буде виконуватись розподіл даних по розділах.

Наступний крок - заповнення бази даних для одного календарного року. Результат відображено у таблиці 1.

Таблиця 1

Таблиці та властивості їх вмісту

Назва таблиці

Кількість записів

Обсяг на диску

users

5 224 941

1 132 MB

bank_accounts

10 447 817

3 248 MB

transactions

31 633 249

9 534 MB

transactions (з індексом на created_at)

31 633 249

10 212 MB

partitioned_transactions_y2023m01

2 701413

483 MB

partitioned_transactions_y2023m02

2 498 354

491 MB

partitioned_transactions_y2023m03

2 674 724

524 MB

partitioned_transactions_y2023m04

2 591 900

506 MB

partitioned_transactions_y2023m05

2 678 180

523 MB

partitioned_transactions_y2023m06

2 591 748

508 MB

partitioned_transactions_y2023m07

2 678 011

527 MB

partitioned_transactions_y2023m08

2 677 872

524 MB

partitioned_transactions_y2023m09

2 591 428

506 MB

partitioned_transactions_y2023m10

2 681215

526 MB

partitioned_transactions_y2023m11

2 591 108

511 MB

partitioned_transactions_y2023m12

2 677 296

520 MB

Сукупність таблиць з префіксом partitionedtransactions* утворюють єдину partitionedtransactions і мають таку ж кількість і абсолютно ідентичні записи до таблиці transactions. Їх загальний обсяг на диску [6] - 6 149 MB, що приблизно в 1.5 разів менше за обсяг таблиці transactions. Різниця між таблицями полягає у первинному ключі та його індексі, transactions містить первинний ключ за полем id, а таблиця partitioned transactions - первинний ключ за двома полями id та created at.

Використовуючи команду explain [7, 8] для перегляду плану запиту [9, 10], буде проводитися порівняння вищезгаданих підходів. Вибірка всіх транзакцій за день виконується за допомогою запиту:

SELECT *

FROM transactions

WHERE created_at >= '2023-03-01 00:00:00'

AND created_at < '202303-02 00:00:00'

Результати виконання запиту показані у таблиці 2. Результати виконання того ж запиту з вибіркою транзакцій за місяць занесені у таблицю 3.

Таблиця 2

Час вибірки всіх транзакцій за день

Назва таблиці

Час планування

Час виконання

partitioned_transactions

0.944 ms

1 238.963 ms

transactions

1.533 ms

27 103.933 ms

transactions (з індексом на created_at)

0.344 ms

43.248 ms

Таблиця 3

Час вибірки всіх транзакцій за місяць

Назва таблиці

Час планування

Час виконання

partitioned_transactions

7.822 ms

1 414.116 ms

transactions

0.564 ms

7 629.995 ms

transactions (з індексом на created_at)

3.878 ms

5 046.443 ms

Порівнюючи результати двох запитів при різних підходах, можна зробити висновок, що при вибірці більшого числа записів зростає швидкодія виконання запиту до таблиці з партиціонуванням. Зокрема, середня кількість записів у таблиці транзакцій за один день складає 86 430, а за місяць 2 636 104.

Наступний запит для порівняння - вибірка всіх транзакцій користувачів за всіма їхніми банківськими рахунками протягом місяця та кварталу із використанням зовнішнього об'єднання таблиць. Результати представлено у таблиці 4 та таблиці 5 відповідно.

Запит:

SELECT u.*

FROM users u

LEFT OUTER JOIN bank_accounts ba ON ba.client_id = u.id LEFT

OUTER JOIN transactions t ON ba.id = t.source_bank_account_id OR ba.id

= t.destination_bank_account_id

WHERE t.created_at >= '2023-03-01 00:00:00' AND t.created_at <

'202304-01 00:00:00'

Таблиця 4

Час вибірки транзакцій клієнтів за місяць

Назва таблиці

Час планування

Час виконання

partitioned_transactions

7.195 ms

65 399.137 ms

transactions

11.444 ms

148 439.890 ms

transactions (з індексом на created_at)

28.440 ms

185 151.683 ms

При виконанні цього запиту до таблиці без партиціонування (transactions, але з індексом на полі createdat) індекс не застосовується. Як результат, середній час виконання запиту є більшим, ніж до таблиці без індексу. Натомість, середня швидкість виконання запиту є вдвічі більшою до таблиці з партиціонуванням.

Таблиця 5

Час вибірки транзакцій клієнтів за квартал

Назва таблиці

Час планування

Час виконання

partitioned_transactions

22.289 ms

149 129.622 ms

transactions

9.515 ms

283 171.693 ms

transactions (з індексом на created_at)

3.502 ms

357 819.174 ms

При вибірці квартального обороту всіх користувачів за всіма банківськими рахунками використано запит із групуванням та агрегатною функцією:

SELECT u.*, SUM(t.amount)

FROM users u

LEFT OUTER JOIN bank_accounts ba ON ba.client_id = u.id LEFT

OUTER JOIN transactions t ON ba.id = t.source_bank_account_id OR ba.id

= t.destination_bank_account_id

WHERE t.created_at >= '2023-01-01 00:00:00' AND t.created_at <

'202304-01 00:00:00'

GROUP BY u.id

Згідно з результатами (див. табл. 6), підхід з партиціонуванням показав пришвидшення на 11 і 23 секунди, у порівнянні з підходами без партиціонув ання.

Таблиця 6

Час вибірки транзакцій клієнтів за квартал

Назва таблиці

Час планування

Час виконання

partitioned_transactions

12.532 ms

93 526.626 ms

transactions

4.935 ms

105 053.716 ms

transactions (з індексом на created_at)

8.718 ms

116 919.910 ms

Висновки

При побудові інформаційних систем, призначених для зберігання і вибірки великих об'ємів даних, важливо визначити і використати оптимальний спосіб збереження інформації, який задовольнятиме вимоги системи.

Розглянувши можливості партиціонування у системі керування базами даних PostgreSQL, було побудовано базу даних на прикладі банківської системи, в якій порівнювалися три однаково-логічні таблиці з різними властивостями: звичайна, з індексом та з партиціонуванням.

Результати дослідження при однаковому наборі даних у цих таблицях показали, що при вибірці малої кількості записів (за день) підхід з партиціонуванням має гіршу продуктивність у порівнянні з таблицею з індексом, тоді як при вибірці більшої кількості записів (за місяць) підхід з партиціонуванням показує кращі результати. При виконанні запиту із об'єднанням таблиць, підхід з таблицею з індексом поступається у швидкодії у порівнянні з підходом без індексу. При виконанні запиту з групуванням записів підхід з партиціонува- нням демонструє пришвидшення на близько 10-20%.

Обсяг даних на диску при підході з партиціонуванням приблизно в 1.5-1.6 разів менший, це може бути пов'язано з різним первинним ключем та його індексом.

Література

1. DB-Engines Ranking [Електронний ресурс].

2. Suhail, R. (2023). Guide to PostgreSQL Table Partitioning [Електронний ресурс].

3. Schonig, H-J. (2023). Killing Performance with PostgreSQL Partitioning [Електронний ресурс].

4. Emerson, B. (2023). How table partitioning in PostgreSQL affects bulk load performance [Електронний ресурс].

5. Вознюк Г. Термінологічна орфографія: трансакція чи транзакція? / Г. Вознюк, І. Ментинська // Вісник Нац. ун-ту «Львівська політехніка». Серія «Проблеми української термінології» - 2012. - №733. - С. 6-9.

6. PostgreSQL wiki. Disk Usage [Електронний ресурс].

7. PostgreSQL. EXPLAIN [Електронний ресурс].

8. PostgreSQL. Using EXPLAIN [Електронний ресурс].

9. Pganalyze. The Basics of Postgres Query Planning [Електронний ресурс].

10. Medium. (2023). How to Read and Understand EXPLAIN Query Plans in PostgreSQL.

References

1. DB-Engines Ranking.

2. Suhail R. (2023). Guide to PostgreSQL Table Partitioning.

3. Schonig, H-J. (2023). Killing Performance with PostgreSQL Partitioning.

4. Emerson, B. (2023). How table partitioning in PostgreSQL affects bulk load performance.

5. Voznyuk, H. & Mentynska I. (2012). Terminological orthography: transaktsiya or tranzaktsiya? Bulletin of the National University «Lviv Polytechnic». Series «Problems of Ukrainian Terminology», 733, 6-9 [in Ukrainian].

6. PostgreSQL wiki. Disk Usage.

7. PostgreSQL. EXPLAIN.

8. PostgreSQL. Using EXPLAIN.

9. Pganalyze. The Basics of Postgres Query Planning.

10. Medium. (2023). How to Read and Understand EXPLAIN Query Plans in PostgreSQL.

Размещено на Allbest.Ru

...

Подобные документы

  • Особливості побудови та роботи з об’єктно-реляційною моделлю даних в інструментальній системі управління базами даних PostgreSQL. Розробка бази даних факультету, що має у підпорядкуванні кілька кафедр. Тестування роботи спроектованої бази даних.

    курсовая работа [1,8 M], добавлен 09.05.2014

  • Коротка історія розвитку об'єктно-реляційної СУБД - PostgreSQL. Проект POSTGRES департаменту Берклі. Основні концепції роботи з PostgreSQL: створення таблиць, внесення даних у таблицю та їх редагування. Основні елементи мови PLpgSQL, її структура.

    курсовая работа [1,0 M], добавлен 06.08.2013

  • Порівняльна характеристика систем зберігання даних MaxTronik i Qsan, дослідження їх структури й принципу роботи. Типи носіїв даних. Інтерфейси систем зберігання даних та причини їх втрати. Технологія та рівні RAID. Особливості продуктів MaxTronic та Qsan.

    курсовая работа [1,6 M], добавлен 20.11.2014

  • Використання системи керування базами даних (СКБД) Microsoft Access на реляційній моделі. Основні об’єкти баз даних: таблиці, запити, форми, звіти, макроси і модулі. Виконання обрахунків у запитах, підсумкові та перехресні запити, їх використання.

    курсовая работа [569,6 K], добавлен 01.11.2011

  • Організована структура, призначена для зберігання інформації. Системи управління базами даних. Зберігання та пошук інформації про можливості використання ресурсів психологічних тестів мережі Internet. Створення об'єктів бази даних та запити до них.

    курсовая работа [3,1 M], добавлен 21.10.2012

  • RAID - масив з декількох дисків, керованих контролером, взаємопов'язаних швидкісними каналами. Рівні RAID масивів: переваги та недоліки. Кількість жорстких дисків в комбінованих масивах. Розподіл файлів по JBOD-масиву. Мережеві системи зберігання даних.

    контрольная работа [1,6 M], добавлен 15.03.2013

  • Використання баз даних та інформаційних систем. Поняття реляційної моделі даних. Ключові особливості мови SQL. Агрегатні функції і угрупування даних. Загальний опис бази даних. Застосування технології систем управління базами даних в мережі Інтернет.

    курсовая работа [633,3 K], добавлен 11.07.2015

  • Бізнес процеси й елементи даних. Специфікація елементів даних. Діаграма класів проектування. Створення та використання об'єктів бази даних. Таблиці, обмеження цілісності, тригери, типові вибірки, представлення, індекси. Типові оператори модифікації даних.

    курсовая работа [255,3 K], добавлен 01.06.2019

  • Поняття бази даних та основне призначення системи управління. Access як справжня реляційна модель баз даних. Можливості DDE і OLE. Модулі: Visual Basic for Applications програмування баз даних. Система управління базами даних Microsoft SQL Server 2000.

    реферат [41,2 K], добавлен 17.04.2010

  • База даних як сумісно використовуваний набір логічно зв'язаних даних, передбачений для задоволення інформаційних потреб. Програмне забезпечення, яке взаємодіє з прикладними програмами користувачів, апаратне забезпечення, дані, процедури і користувачі.

    реферат [160,9 K], добавлен 20.06.2010

  • Регулярний тип даних мови Pascal, що дозволяє в програмі задавати структуру даних, яка називається масивом. Поняття одновимірного та багатовимірного масиву. Прямі методи сортування масивів, типи даних. Таблиця результативності гравців футбольної команди.

    лекция [411,2 K], добавлен 24.07.2014

  • База даних як організована структура, призначена для зберігання інформації. Проектування та реалізація в СУБД MS Access інформаційної системи "База даних Internet-ресурсів тестів з психології". Розробка логічної системи даних, інструкції користувача.

    курсовая работа [5,3 M], добавлен 22.10.2012

  • Архітектура Web-баз даних. Загальні відомості про мову SQL. Створення таблиць баз даних. Використання бібліотеки для пошуку інформації. Аутентифікація за допомогою РНР й MySQL. Зберігання паролів в окремому файлі на сервері, використання бази даних.

    курсовая работа [913,8 K], добавлен 12.01.2010

  • Розробка бази даних "Автовокзал". Функціональні залежності між атрибутами. Ідентифікація атрибутів, які в реляційної моделі даних використовуються в якості первинних ключів реляційних відносин. Організація вибірки інформації з бази за допомогою запиту.

    курсовая работа [35,6 K], добавлен 19.08.2012

  • Інтернет як система об'єднаних комп'ютерних мереж для зберігання і передачі інформації. Літературні джерела щодо сутності баз даних та їх функціонування. Порівняльний аналіз MySQL, Oracle та Microsoft Access. Створення бази даних за допомогою MySQL.

    курсовая работа [1,5 M], добавлен 05.02.2014

  • Робота користувача з базою даних, перегляд, редагування інформації в базі даних та здійснення пошуку у зручній формі. Інтерфейс системи сільській бібліотеці для обслуговування читачів і фіксування даних книжкового фонду. Структура реляційної бази.

    контрольная работа [182,3 K], добавлен 08.03.2015

  • Специфікація вимог для кожного з двох користувачів. Концептуальне та логічне проектування баз даних. Історія досліджень баз даних (програмного забезпечення). Система упрваління базами даних. Фази проектування баз даних: концептуальна, логічна, фізична.

    дипломная работа [105,8 K], добавлен 20.02.2010

  • Основні дії з файлами, які використовують програми. Диски і файли. Особливості використання даних, збережених на диску. Дискова фізична модель бази даних. Управління дисковим простором. Управління буферами даних. Стратегія заміни сторінок у фреймах.

    реферат [19,8 K], добавлен 10.08.2011

  • Операція: поняття, класифікація, склад та зміст типових технологічних операцій та організація їх виконання в економічних інформаційних системах. Технологія створення і ведення інформаційних масивів. Використання СУБД Ассеss для обробки даних по товару.

    контрольная работа [35,4 K], добавлен 27.07.2009

  • Методи використання традиційних файлових систем - набору програм, які виконують для користувачів деякі операції, наприклад, створення звітів. Системи керування баз даних. Основні поняття реляційної моделі даних. Реляційна алгебра і реляційне числення.

    реферат [40,2 K], добавлен 13.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.