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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Запит:

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.

Источник: https://otherreferats.allbest.ru/download/1517991/