Usando armazenamento orientado a colunas

Melhorando o Desempenho de Consultas no PostgreSQL

Amy McCarty

Instructor

Orientado a colunas

Armazenamento orientado a colunas

  • Relação entre linhas preservada
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

Armazenado como

Duas tabelas. A primeira é uma lista de ids e espécies. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. A segunda é uma lista de ids e idades. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

Melhorando o Desempenho de Consultas no PostgreSQL

Foco em analytics - ótima combinação

Propriedades do armazenamento por coluna

  • Uma coluna no mesmo local
  • Rápido para retornar todas as linhas
  • Rápido para cálculos por coluna

Foco em analytics

  • Contagens, médias, cálculos
  • Relatórios
  • Agregações por coluna

Armazenado como

Três tabelas. A primeira é uma lista de ids e nomes. 01 - Bob. 02 - Sunny. 03 - Beco. 04 - Coco. A segunda é uma lista de ids e espécies. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. A terceira é uma lista de ids e idades. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

Melhorando o Desempenho de Consultas no PostgreSQL

Foco transacional - combinação ruim

Relações entre linhas preservadas

  • Lento para retornar todas as colunas
  • Lento para carregar dados

Foco transacional

  • Inserção e exclusão rápidas de registros

Armazenado como

Três tabelas. A primeira é uma lista de ids e nomes. 01 - Bob. 02 - Sunny. 03 - Beco. 04 - Coco. A segunda é uma lista de ids e espécies. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. A terceira é uma lista de ids e idades. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

Melhorando o Desempenho de Consultas no PostgreSQL

Exemplos de bancos de dados

 

Postgres Citus Data, Greenplum, Amazon Redshift
MySQL MariaDB
Oracle Oracle In-Memory Cloud Store
Clickhouse, Apache Druid, CrateDB
Melhorando o Desempenho de Consultas no PostgreSQL

Information schema

Reduzindo as colunas

  • Evite 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
Melhorando o Desempenho de Consultas no PostgreSQL

Information schema

Reduzindo as colunas

  • Evite SELECT *
  • Use o information schema
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
Melhorando o Desempenho de Consultas no PostgreSQL

Escrevendo suas consultas

 

  • Analise cada coluna em sua própria consulta
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
-- Structure for column oriented
SELECT MIN(age), MAX(age)
FROM zoo_animals
WHERE species = 'zebra'
-- Structure for row-oriented
SELECT *
FROM zoo_animals
WHERE species = 'zebra'
ORDER BY age
Melhorando o Desempenho de Consultas no PostgreSQL

Vamos praticar!

Melhorando o Desempenho de Consultas no PostgreSQL

Preparing Video For Download...