Використання колонкового зберігання

Покращення продуктивності запитів у PostgreSQL

Amy McCarty

Instructor

Колонкове

Колонкове зберігання

  • Зв'язок між рядками збережено
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016

Зберігається як

Дві таблиці. Перша — список id і species. 01 — panda. 02 — zebra. 03 — zebra. 04 — koala. Друга — список id і age. 01 — 2. 02 — 3. 03 — 10. 04 — 5.

Покращення продуктивності запитів у PostgreSQL

Аналітика — вдалий вибір

Властивості колонкового зберігання

  • Одна колонка зберігається разом
  • Швидке повернення всіх рядків
  • Швидкі обчислення по колонках

Фокус на аналітику

  • Підрахунки, середні, обчислення
  • Звітність
  • Агрегації по колонках

Зберігається як

Три таблиці. Перша — список id і names. 01 — Bob. 02 — Sunny. 03 — Beco. 04 — Coco. Друга — список id і species. 01 — panda. 02 — zebra. 03 — zebra. 04 — koala. Третя — список id і ages. 01 — 2. 02 — 3. 03 — 10. 04 — 5.

Покращення продуктивності запитів у PostgreSQL

Транзакції — невдалий вибір

Зв'язки між рядками збережено

  • Повільно повертати всі колонки
  • Повільне завантаження даних

Транзакційний фокус

  • Швидкі вставлення й видалення записів

Зберігається як

Три таблиці. Перша — список id і names. 01 — Bob. 02 — Sunny. 03 — Beco. 04 — Coco. Друга — список id і species. 01 — panda. 02 — zebra. 03 — zebra. 04 — koala. Третя — список id і ages. 01 — 2. 02 — 3. 03 — 10. 04 — 5.

Покращення продуктивності запитів у PostgreSQL

Приклади баз даних

 

Postgres Citus Data, Greenplum, Amazon Redshift
MySQL MariaDB
Oracle Oracle In-Memory Cloud Store
Clickhouse, Apache Druid, CrateDB
Покращення продуктивності запитів у PostgreSQL

Інформаційна схема

Менше колонок

  • Рідше використовуйте SELECT *
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_catalog = 'schema_name'
AND table_name = 'zoo_animals'
column_name data_type
id integer
name text
species text
Покращення продуктивності запитів у PostgreSQL

Інформаційна схема

Менше колонок

  • Рідше використовуйте SELECT *
  • Використовуйте інформаційну схему
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_catalog = 'schema_name'
AND table_name = 'zoo_animals'
column_name data_type
id integer
name text
species text
Покращення продуктивності запитів у PostgreSQL

Пишемо запити

 

  • Перевіряйте кожну колонку окремим запитом
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016
-- Структура для колонково-орієнтованого зберігання
SELECT MIN(age), MAX(age)
FROM zoo_animals
WHERE species = 'zebra'
-- Структура для рядково-орієнтованого зберігання
SELECT *
FROM zoo_animals
WHERE species = 'zebra'
ORDER BY age
Покращення продуктивності запитів у PostgreSQL

Давайте потренуємось!

Покращення продуктивності запитів у PostgreSQL

Preparing Video For Download...