SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
PostgreSQL como NewSQL
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
Roteiro
Quem sou eu
Bancos de dados relacionais e os NoSQLs
O que ´e NewSQL?
PostgreSQL - “one database to rule them all”
Schemaless - JSON e chave/valor
Buscas por similaridade
Consultas em grafos e hierarquias
Performance e Escalabilidade
E quando o PostgreSQL n˜ao resolve meu problema?
Conclus˜ao
2 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a mais de 2 anos
• Apaixonado pelo PG (do psql ao c´odigo-fonte...)
3 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a mais de 2 anos
• Apaixonado pelo PG (do psql ao c´odigo-fonte...)
• ...mas tamb´em conhece alguns NoSQLs
3 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a mais de 2 anos
• Apaixonado pelo PG (do psql ao c´odigo-fonte...)
• ...mas tamb´em conhece alguns NoSQLs
Dextra • Desenvolvimento sob-medida, consultoria/suporte
• Mais de 15 anos trabalhando com o PostgreSQL
• “Crafting Software, Transforming Business”
• http://www.dextra.com.br/
3 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a mais de 2 anos
• Apaixonado pelo PG (do psql ao c´odigo-fonte...)
• ...mas tamb´em conhece alguns NoSQLs
Dextra • Desenvolvimento sob-medida, consultoria/suporte
• Mais de 15 anos trabalhando com o PostgreSQL
• “Crafting Software, Transforming Business”
• http://www.dextra.com.br/
Dextraining • Treinamento de verdade, “Aprenda com quem faz na
pr´atica”
• Mais de 10 anos na estrada
• Mais de 10 mil profissionais capacitados em todo o
Brasil.
• http://www.dextraining.com.br/
3 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Bancos de dados relacionais / SQLs
• Baseados no modelo relacional
• Transa¸c˜oes ACID
◦ Atomicidade
◦ Consistˆencia
◦ Isolamento
◦ Durabilidade
• Interface de consulta padr˜ao – SQL
• Armazenamento em rela¸c˜oes – estrutura acoplada
• ...
4 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
NoSQLs
• Transa¸c˜oes BASE:
◦ Basic Availability
◦ Soft-state
◦ Eventual consistency
• Interface de consulta pr´opria
• Schemaless – estrutura desacoplada
◦ Chave-Valor
◦ Documento
◦ Grafos
◦ ...
• Performance como prioridade
◦ In-place update
◦ Replica¸c˜ao
◦ Sharding
◦ ...
5 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
NoSQLs
• Transa¸c˜oes BASE:
◦ Basic Availability
◦ Soft-state
◦ Eventual consistency
• Interface de consulta pr´opria
• Schemaless – estrutura desacoplada
◦ Chave-Valor
◦ Documento
◦ Grafos
◦ ...
• Performance como prioridade
◦ In-place update
◦ Replica¸c˜ao
◦ Sharding
◦ ...
• <entre com sua buzzword aqui>
5 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
O que ´e NewSQL
“ In the context of transaction processing, I would define a NewSQL
DBMS as one having the following 5 characteristics:
1. SQL as the primary mechanism for application interaction
2. ACID support for transactions
3. A non-locking concurrency control mechanism so real-time reads
will not conflict with writes, and thereby cause them to stall.
4. An architecture providing much higher per-node performance than
available from the traditional ‘elephants’
5. A scale-out, shared-nothing architecture, capable of running on a
large number of nodes without bottlenecking
”
Michael Stonebraker – MIT 1
1
http://cacm.acm.org/blogs/blog-cacm/
109710-new-sql-an-alternative-to-nosql-and-old-sql-for-new-oltp
fulltext6 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
O que ´e NewSQL
“A DBMS that delivers the scalability and flexibility promised by
NoSQL while retaining the support for SQL queries and/or ACID, or
to improve performance for appropriate workloads”
451 Group
7 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
PostgreSQL
“one database to rule them all”
• FOSS – Free Open
Source Software
• Quase 30 anos de
experiˆencia
• Robustez, confiabilidade,
maturidade
• Diversas funcionalidades,
e novas a cada vers˜ao
• Forte extensibilidade
8 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento de chaves/valores como atributo (coluna) de uma
tabela
• Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem
(busca)
• Indexa¸c˜ao B-tree, GIN e GIST
• Exemplo:
SELECT * FROM movies
WHERE ( moviedata ->’imdb_rate ’):: int > 4
AND moviedata ->’ alternate_title ’ = ’Black
Mask ’;
9 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento de chaves/valores como atributo (coluna) de uma
tabela
• Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem
(busca)
• Indexa¸c˜ao B-tree, GIN e GIST
• Exemplo:
SELECT * FROM movies
WHERE ( moviedata ->’imdb_rate ’):: int > 4
AND moviedata ->’ alternate_title ’ = ’Black
Mask ’;
R´apido... Flex´ıvel... Incr´ıvel... Lind˜ao...
9 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento de chaves/valores como atributo (coluna) de uma
tabela
• Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem
(busca)
• Indexa¸c˜ao B-tree, GIN e GIST
• Exemplo:
SELECT * FROM movies
WHERE ( moviedata ->’imdb_rate ’):: int > 4
AND moviedata ->’ alternate_title ’ = ’Black
Mask ’;
R´apido... Flex´ıvel... Incr´ıvel... Lind˜ao...
mas, t´ınhamos que evoluir...
9 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
• 2012 – vers˜ao 9.2 – tipo json, basicamente text com valida¸c˜oes
• 2013 – vers˜ao 9.3 – ainda json, mas com fun¸c˜oes fant´asticas (a
grande ado¸c˜ao come¸ca)
• 2014 – vers˜ao 9.4 (hoje em beta1) – tipo jsonb, bin´ario
(estrutura interna baseada no hstore), indexa¸c˜ao GIN –
ultra-blaster-r´apido
10 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
CREATE TABLE booksdata (
title text PRIMARY KEY ,
booksdata jsonb
);
11 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
SELECT title ,
bookdata ->> ’ current_edition ’ AS edition ,
bookdata #> ’{" publication_info ", 0, " isbn "} ’
AS isbn
FROM booksdata
WHERE bookdata @> ’{ " publication_info " : [{"
publisher ": " Avon "} ] }’:: jsonb
ORDER BY bookdata #> ’{" publication_info ", 0, "
price "} ’ DESC ;
12 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
Ah!!! E eu comentei que ´e indexado?
13 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
Ah!!! E eu comentei que ´e indexado?
DE VERDADE
CREATE INDEX booksdata_json_idx ON booksdata
USING GIN ( booksdata );
13 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
JSON no PostgreSQL
Ah!!! E eu comentei que ´e indexado?
DE VERDADE
CREATE INDEX booksdata_json_idx ON booksdata
USING GIN ( booksdata );
GIN to the rescue!!!
13 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Full Text Search
• FTS nativo no PostgreSQL (tsvector, tsquery, ...)
SELECT * FROM articles t(fts)
WHERE fts @@ tsquery ’PostgreSQL & NewSQL ’
ORDER BY ts_rank (fts , tsquery ’PostgreSQL &
NewSQL ’);
• Busca por similaridade (contrib pg trgm)
SELECT set_limit (0.2) ;
SELECT *, title <-> ’NewSQL ’ AS sml
FROM articles
WHERE title % ’NewSQL ’
ORDER BY sml DESC LIMIT 10;
14 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Full Text Search
• FTS nativo no PostgreSQL (tsvector, tsquery, ...)
SELECT * FROM articles t(fts)
WHERE fts @@ tsquery ’PostgreSQL & NewSQL ’
ORDER BY ts_rank (fts , tsquery ’PostgreSQL &
NewSQL ’);
• Busca por similaridade (contrib pg trgm)
SELECT set_limit (0.2) ;
SELECT *, title <-> ’NewSQL ’ AS sml
FROM articles
WHERE title % ’NewSQL ’
ORDER BY sml DESC LIMIT 10;
• Claro, tudo devidamente indexado... GIN and GIST rocks
14 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Consultas em grafos e hierarquias
• Pode ser facilmente realizada utilizando consultas recursivas
• O desempenho depende do filtro e profundidade da navega¸c˜ao
• Exemplo, cat´alogo de roles (usu´arios/grupos) do PostgreSQL:
WITH RECURSIVE roles AS (
SELECT r.oid AS roleid , r. rolname ,
1 AS level , array [r. rolname ] AS path
FROM pg_authid r
WHERE r.oid NOT IN (
SELECT m. member FROM pg_auth_members m)
UNION ALL
SELECT r.oid , r. rolname ,
p. level + 1, p. path || r. rolname
FROM pg_auth_members m
INNER JOIN pg_authid r ON m. member = r. oid
INNER JOIN roles p ON m. roleid = p. roleid
)
SELECT repeat (’|__ ’, level -1) || rolname
FROM roles
ORDER BY path ;
15 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Consultas em grafos e hierarquias
Resultado:
administrativo
| __comercial
|__| __carla
|__| __maria
| __financeiro
|__| __ana
|__| __paulo
ti
| __beatriz
| __julio
| __matheus
...
16 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Performance
O PostgreSQL ´e, sem d´uvidas, um dos bancos de dados com melhores
desempenhos num ´unico n´o. Devemos sempre olhar para:
• ajuste (tuning) de parˆametros de configura¸c˜ao;
• indexa¸c˜ao;
• modelo de dados (normalizar ou desnormalizar);
• tarefas administrativas;
• estat´ısticas atualizadas;
• ... busque por ”PostgreSQL Performance Tuning”...
17 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Performance
E quando precisamos de mais:
• COMMIT ass´ıncrono;
• columnar store (extens˜oes para o PostgreSQL cstore fdw 2 e
In-Memory Columnar Store (ICMS) 3 4);
• particionamento de tabelas (n˜ao ´e 100% suportado, mas funciona
perfeitamente);
• divis˜ao de tablespaces.
2
http://citusdata.github.io/cstore_fdw/
3
http://www.garret.ru/imcs/user_guide.html
4
http://www.pgcon.org/2014/schedule/events/643.en.html
18 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Escalabilidade Horizontal
Replica¸c˜ao master-slave via Streaming Replication oferece grandes
oportunidades.
• replica¸c˜ao s´ıncrona ou ass´ıncrona;
• replica¸c˜ao em cascata;
• execu¸c˜ao de backups no slave podem aliviar o master (24x7);
• distribui¸c˜ao de consultas mais pesadas (relat´orios, an´alises, etc.)
nos slaves;
• balanceamento de carga via aplica¸c˜ao ou automatizada usando
pgPool-II;
• e claro, alta disponibilidade.
19 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
O PostgreSQL n˜ao oferece suporte `a sharding, mas muita gente
encontra uma maneira.
• Via aplica¸c˜ao:
◦ Instangram 5
◦ Braintree 6
5
http://instagram-engineering.tumblr.com/post/
10853187575/sharding-ids-at-instagram
6
https://www.braintreepayments.com/braintrust/
scaling-postgresql-at-braintree-four-years-of-evolution
20 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
• Uma t´ecnica para sharding automatizado consiste em utilizar
diversas funcionalidades e o poder de extens˜ao do PostgreSQL:
◦ dividir os shards manualmente em servidores com PostgreSQL e
tabelas convencionais;
◦ mapear todas essas tabelas num servidor centralizado usando Foreign
Data Wrappers (FDW) com o postgres fdw;
◦ criar views para unir cada uma delas (usando UNION ALL);
• o PostgreSQL automaticamente redirecionar´a consultas (usando as
chaves de shard) para cada shard, usando a (velha) funcionalidade de
“constraint exclusion”;
• INSERT/UPDATE/DELETE deve ser redirecionando usando triggers
pr´oprias do tipo INSTEAD OF.
◦ mover dados entre os shards ´e poss´ıvel, mas trabalhoso.
21 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
Exemplo (“ugly, but works...”):
CREATE FOREIGN TABLE users_1_1000
( user_id int , user_name text , ... )
SERVER shard1 OPTIONS ( table_name ’users ’)
;
...
CREATE FOREIGN TABLE users_1001_2000
( user_id int , user_name text , ... )
SERVER shard2 OPTIONS ( table_name ’users ’)
;
...
22 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
CREATE VIEW users AS
SELECT * FROM users_1_1000
WHERE user_id BETWEEN 1 AND 1000
UNION ALL
SELECT * FROM users_1001_2000
WHERE user_id BETWEEN 1001 AND 2000
UNION ALL
...
H´a varia¸c˜oes dessa tecnica 7 8
7
https://www.youtube.com/watch?v=3JQrfgb3Av0
8
http://snowman.net/slides/pgfdw_sharding.pdf
23 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
E quando o PostgreSQL n˜ao
resolve meu problema?
• Primeiro, tem certeza que n˜ao?
24 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
E quando o PostgreSQL n˜ao
resolve meu problema?
• Primeiro, tem certeza que n˜ao?
• Absoluta?
24 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
E quando o PostgreSQL n˜ao
resolve meu problema?
• Ok, acontece...
◦ sobrecarga de opera¸c˜oes e do MVCC pode gerar problemas;
◦ falta de funcionalidades frente `a banco de dados especializados,
exemplos:
• estruturas de grafos s˜ao melhores tratadas em especializados como
Neo4j do que com consultas recursivas (estas tendem a ficar lentas
quando a profundidade ´e grande);
• FTS do PostgreSQL comparado `a outros como Lucene ou Sphinx ainda
perde em funcionalidades e performance (em termos de performance,
aguarde/teste a nova vers˜ao, 9.4, houve melhoras substanciais nessa
´area).
25 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
E quando o PostgreSQL n˜ao
resolve meu problema?
• Mas tudo bem usar outro. Se quiser associar, v´arios Foreign Data
Wrappers (FDW) est˜ao dispon´ıveis (redis fdw, mongo fdw,
...) para mapear dados externos dentro de tabelas no PostgreSQL
(o exemplo do shard usa essa funcionalidade, mas mapeando
outros bancos PostgreSQL);
26 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
E quando o PostgreSQL n˜ao
resolve meu problema?
• DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se o
projeto crescer fora de escala que o PG suporte, busque outras
alternativas. ´E muito comum utilizar bancos NoSQL junto com
bancos relacionais (n˜ao ´e escolha ´unica). Existem muitos bancos
MPP (Massive Parallel Processing) e (100%) NewSQL baseados
no PostgreSQL.
◦ comerciais: Greenplun, Amazon Redshift, Aster Data, Netezza,
Vertica, entre outros;
◦ e as promessas open source: Postgres-XC e Postgres-XL.
27 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Conclus˜ao
O PostgreSQL ´e hoje, sem d´uvidas, um dos bancos de dados mais
vers´ateis (eu diria “o mais”) e que oferece infinitas possibilidades.
Associando o bom e velho modelo relacional `a tendˆencias (n˜ao novas,
devo dizer) e necessidades presentes nas aplica¸c˜oes modernas.
28 / 31
PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
Obrigado!
D´uvidas?
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
irc.freenode.net:
/join #postgresql,#postgresql-br
Meu nick: MatheusOl
Twitter: @matioli matheus

Mais conteúdo relacionado

Mais procurados

Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLMatheus Espanhol
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na PráticaEiti Kimura
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataSandro Andrade
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQLKingHost - Hospedagem de sites
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Felipe
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkFelipe
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
Hadoop - Primeiros passos
Hadoop - Primeiros passosHadoop - Primeiros passos
Hadoop - Primeiros passosSensedia
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQLDiogo Biazus
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Otávio Carvalho
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 

Mais procurados (17)

Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigData
 
Proposta de arquitetura Hadoop
Proposta de arquitetura HadoopProposta de arquitetura Hadoop
Proposta de arquitetura Hadoop
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache Spark
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
Hadoop - Primeiros passos
Hadoop - Primeiros passosHadoop - Primeiros passos
Hadoop - Primeiros passos
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Hadoop
HadoopHadoop
Hadoop
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 

Semelhante a Postgresql como NewSQL - DevCamp 2014

Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb javaFabiano Modos
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)Fabrízio Mello
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIFernando Ike
 
NOSQL_Uma_breve_introducao.pptx
NOSQL_Uma_breve_introducao.pptxNOSQL_Uma_breve_introducao.pptx
NOSQL_Uma_breve_introducao.pptxEizoKato
 
Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J  Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J Daniel San Martin
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
NOSQL uma breve introdução
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introduçãoWise Systems
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018Renato Groffe
 

Semelhante a Postgresql como NewSQL - DevCamp 2014 (20)

Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 
NOSQL_Uma_breve_introducao.pptx
NOSQL_Uma_breve_introducao.pptxNOSQL_Uma_breve_introducao.pptx
NOSQL_Uma_breve_introducao.pptx
 
Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J  Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J
 
Introdução ao neo4j
Introdução ao neo4jIntrodução ao neo4j
Introdução ao neo4j
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
NOSQL uma breve introdução
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introdução
 
Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018
Azure Cosmos DB para Desenvolvedores - From Zero to Hero - Março-2018
 

Postgresql como NewSQL - DevCamp 2014

  • 1. PostgreSQL como NewSQL Matheus de Oliveira <matheus.oliveira@dextra.com.br>
  • 2. Roteiro Quem sou eu Bancos de dados relacionais e os NoSQLs O que ´e NewSQL? PostgreSQL - “one database to rule them all” Schemaless - JSON e chave/valor Buscas por similaridade Consultas em grafos e hierarquias Performance e Escalabilidade E quando o PostgreSQL n˜ao resolve meu problema? Conclus˜ao 2 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 3. Quem sou eu? Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP • DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos • Apaixonado pelo PG (do psql ao c´odigo-fonte...) 3 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 4. Quem sou eu? Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP • DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos • Apaixonado pelo PG (do psql ao c´odigo-fonte...) • ...mas tamb´em conhece alguns NoSQLs 3 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 5. Quem sou eu? Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP • DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos • Apaixonado pelo PG (do psql ao c´odigo-fonte...) • ...mas tamb´em conhece alguns NoSQLs Dextra • Desenvolvimento sob-medida, consultoria/suporte • Mais de 15 anos trabalhando com o PostgreSQL • “Crafting Software, Transforming Business” • http://www.dextra.com.br/ 3 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 6. Quem sou eu? Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP • DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos • Apaixonado pelo PG (do psql ao c´odigo-fonte...) • ...mas tamb´em conhece alguns NoSQLs Dextra • Desenvolvimento sob-medida, consultoria/suporte • Mais de 15 anos trabalhando com o PostgreSQL • “Crafting Software, Transforming Business” • http://www.dextra.com.br/ Dextraining • Treinamento de verdade, “Aprenda com quem faz na pr´atica” • Mais de 10 anos na estrada • Mais de 10 mil profissionais capacitados em todo o Brasil. • http://www.dextraining.com.br/ 3 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 7. Bancos de dados relacionais / SQLs • Baseados no modelo relacional • Transa¸c˜oes ACID ◦ Atomicidade ◦ Consistˆencia ◦ Isolamento ◦ Durabilidade • Interface de consulta padr˜ao – SQL • Armazenamento em rela¸c˜oes – estrutura acoplada • ... 4 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 8. NoSQLs • Transa¸c˜oes BASE: ◦ Basic Availability ◦ Soft-state ◦ Eventual consistency • Interface de consulta pr´opria • Schemaless – estrutura desacoplada ◦ Chave-Valor ◦ Documento ◦ Grafos ◦ ... • Performance como prioridade ◦ In-place update ◦ Replica¸c˜ao ◦ Sharding ◦ ... 5 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 9. NoSQLs • Transa¸c˜oes BASE: ◦ Basic Availability ◦ Soft-state ◦ Eventual consistency • Interface de consulta pr´opria • Schemaless – estrutura desacoplada ◦ Chave-Valor ◦ Documento ◦ Grafos ◦ ... • Performance como prioridade ◦ In-place update ◦ Replica¸c˜ao ◦ Sharding ◦ ... • <entre com sua buzzword aqui> 5 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 10. O que ´e NewSQL “ In the context of transaction processing, I would define a NewSQL DBMS as one having the following 5 characteristics: 1. SQL as the primary mechanism for application interaction 2. ACID support for transactions 3. A non-locking concurrency control mechanism so real-time reads will not conflict with writes, and thereby cause them to stall. 4. An architecture providing much higher per-node performance than available from the traditional ‘elephants’ 5. A scale-out, shared-nothing architecture, capable of running on a large number of nodes without bottlenecking ” Michael Stonebraker – MIT 1 1 http://cacm.acm.org/blogs/blog-cacm/ 109710-new-sql-an-alternative-to-nosql-and-old-sql-for-new-oltp fulltext6 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 11. O que ´e NewSQL “A DBMS that delivers the scalability and flexibility promised by NoSQL while retaining the support for SQL queries and/or ACID, or to improve performance for appropriate workloads” 451 Group 7 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 12. PostgreSQL “one database to rule them all” • FOSS – Free Open Source Software • Quase 30 anos de experiˆencia • Robustez, confiabilidade, maturidade • Diversas funcionalidades, e novas a cada vers˜ao • Forte extensibilidade 8 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 13. Armazenamento chave/valor Tipo hstore • Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3 (2008) • Armazenamento de chaves/valores como atributo (coluna) de uma tabela • Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem (busca) • Indexa¸c˜ao B-tree, GIN e GIST • Exemplo: SELECT * FROM movies WHERE ( moviedata ->’imdb_rate ’):: int > 4 AND moviedata ->’ alternate_title ’ = ’Black Mask ’; 9 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 14. Armazenamento chave/valor Tipo hstore • Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3 (2008) • Armazenamento de chaves/valores como atributo (coluna) de uma tabela • Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem (busca) • Indexa¸c˜ao B-tree, GIN e GIST • Exemplo: SELECT * FROM movies WHERE ( moviedata ->’imdb_rate ’):: int > 4 AND moviedata ->’ alternate_title ’ = ’Black Mask ’; R´apido... Flex´ıvel... Incr´ıvel... Lind˜ao... 9 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 15. Armazenamento chave/valor Tipo hstore • Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3 (2008) • Armazenamento de chaves/valores como atributo (coluna) de uma tabela • Diversos operadores para manipula¸c˜ao, navega¸c˜ao e filtragem (busca) • Indexa¸c˜ao B-tree, GIN e GIST • Exemplo: SELECT * FROM movies WHERE ( moviedata ->’imdb_rate ’):: int > 4 AND moviedata ->’ alternate_title ’ = ’Black Mask ’; R´apido... Flex´ıvel... Incr´ıvel... Lind˜ao... mas, t´ınhamos que evoluir... 9 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 16. JSON no PostgreSQL • 2012 – vers˜ao 9.2 – tipo json, basicamente text com valida¸c˜oes • 2013 – vers˜ao 9.3 – ainda json, mas com fun¸c˜oes fant´asticas (a grande ado¸c˜ao come¸ca) • 2014 – vers˜ao 9.4 (hoje em beta1) – tipo jsonb, bin´ario (estrutura interna baseada no hstore), indexa¸c˜ao GIN – ultra-blaster-r´apido 10 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 17. JSON no PostgreSQL CREATE TABLE booksdata ( title text PRIMARY KEY , booksdata jsonb ); 11 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 18. JSON no PostgreSQL SELECT title , bookdata ->> ’ current_edition ’ AS edition , bookdata #> ’{" publication_info ", 0, " isbn "} ’ AS isbn FROM booksdata WHERE bookdata @> ’{ " publication_info " : [{" publisher ": " Avon "} ] }’:: jsonb ORDER BY bookdata #> ’{" publication_info ", 0, " price "} ’ DESC ; 12 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 19. JSON no PostgreSQL Ah!!! E eu comentei que ´e indexado? 13 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 20. JSON no PostgreSQL Ah!!! E eu comentei que ´e indexado? DE VERDADE CREATE INDEX booksdata_json_idx ON booksdata USING GIN ( booksdata ); 13 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 21. JSON no PostgreSQL Ah!!! E eu comentei que ´e indexado? DE VERDADE CREATE INDEX booksdata_json_idx ON booksdata USING GIN ( booksdata ); GIN to the rescue!!! 13 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 22. Full Text Search • FTS nativo no PostgreSQL (tsvector, tsquery, ...) SELECT * FROM articles t(fts) WHERE fts @@ tsquery ’PostgreSQL & NewSQL ’ ORDER BY ts_rank (fts , tsquery ’PostgreSQL & NewSQL ’); • Busca por similaridade (contrib pg trgm) SELECT set_limit (0.2) ; SELECT *, title <-> ’NewSQL ’ AS sml FROM articles WHERE title % ’NewSQL ’ ORDER BY sml DESC LIMIT 10; 14 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 23. Full Text Search • FTS nativo no PostgreSQL (tsvector, tsquery, ...) SELECT * FROM articles t(fts) WHERE fts @@ tsquery ’PostgreSQL & NewSQL ’ ORDER BY ts_rank (fts , tsquery ’PostgreSQL & NewSQL ’); • Busca por similaridade (contrib pg trgm) SELECT set_limit (0.2) ; SELECT *, title <-> ’NewSQL ’ AS sml FROM articles WHERE title % ’NewSQL ’ ORDER BY sml DESC LIMIT 10; • Claro, tudo devidamente indexado... GIN and GIST rocks 14 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 24. Consultas em grafos e hierarquias • Pode ser facilmente realizada utilizando consultas recursivas • O desempenho depende do filtro e profundidade da navega¸c˜ao • Exemplo, cat´alogo de roles (usu´arios/grupos) do PostgreSQL: WITH RECURSIVE roles AS ( SELECT r.oid AS roleid , r. rolname , 1 AS level , array [r. rolname ] AS path FROM pg_authid r WHERE r.oid NOT IN ( SELECT m. member FROM pg_auth_members m) UNION ALL SELECT r.oid , r. rolname , p. level + 1, p. path || r. rolname FROM pg_auth_members m INNER JOIN pg_authid r ON m. member = r. oid INNER JOIN roles p ON m. roleid = p. roleid ) SELECT repeat (’|__ ’, level -1) || rolname FROM roles ORDER BY path ; 15 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 25. Consultas em grafos e hierarquias Resultado: administrativo | __comercial |__| __carla |__| __maria | __financeiro |__| __ana |__| __paulo ti | __beatriz | __julio | __matheus ... 16 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 26. Performance O PostgreSQL ´e, sem d´uvidas, um dos bancos de dados com melhores desempenhos num ´unico n´o. Devemos sempre olhar para: • ajuste (tuning) de parˆametros de configura¸c˜ao; • indexa¸c˜ao; • modelo de dados (normalizar ou desnormalizar); • tarefas administrativas; • estat´ısticas atualizadas; • ... busque por ”PostgreSQL Performance Tuning”... 17 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 27. Performance E quando precisamos de mais: • COMMIT ass´ıncrono; • columnar store (extens˜oes para o PostgreSQL cstore fdw 2 e In-Memory Columnar Store (ICMS) 3 4); • particionamento de tabelas (n˜ao ´e 100% suportado, mas funciona perfeitamente); • divis˜ao de tablespaces. 2 http://citusdata.github.io/cstore_fdw/ 3 http://www.garret.ru/imcs/user_guide.html 4 http://www.pgcon.org/2014/schedule/events/643.en.html 18 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 28. Escalabilidade Horizontal Replica¸c˜ao master-slave via Streaming Replication oferece grandes oportunidades. • replica¸c˜ao s´ıncrona ou ass´ıncrona; • replica¸c˜ao em cascata; • execu¸c˜ao de backups no slave podem aliviar o master (24x7); • distribui¸c˜ao de consultas mais pesadas (relat´orios, an´alises, etc.) nos slaves; • balanceamento de carga via aplica¸c˜ao ou automatizada usando pgPool-II; • e claro, alta disponibilidade. 19 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 29. Escalabilidade Horizontal Vamos falar de sharding ent˜ao! O PostgreSQL n˜ao oferece suporte `a sharding, mas muita gente encontra uma maneira. • Via aplica¸c˜ao: ◦ Instangram 5 ◦ Braintree 6 5 http://instagram-engineering.tumblr.com/post/ 10853187575/sharding-ids-at-instagram 6 https://www.braintreepayments.com/braintrust/ scaling-postgresql-at-braintree-four-years-of-evolution 20 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 30. Escalabilidade Horizontal Vamos falar de sharding ent˜ao! • Uma t´ecnica para sharding automatizado consiste em utilizar diversas funcionalidades e o poder de extens˜ao do PostgreSQL: ◦ dividir os shards manualmente em servidores com PostgreSQL e tabelas convencionais; ◦ mapear todas essas tabelas num servidor centralizado usando Foreign Data Wrappers (FDW) com o postgres fdw; ◦ criar views para unir cada uma delas (usando UNION ALL); • o PostgreSQL automaticamente redirecionar´a consultas (usando as chaves de shard) para cada shard, usando a (velha) funcionalidade de “constraint exclusion”; • INSERT/UPDATE/DELETE deve ser redirecionando usando triggers pr´oprias do tipo INSTEAD OF. ◦ mover dados entre os shards ´e poss´ıvel, mas trabalhoso. 21 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 31. Escalabilidade Horizontal Vamos falar de sharding ent˜ao! Exemplo (“ugly, but works...”): CREATE FOREIGN TABLE users_1_1000 ( user_id int , user_name text , ... ) SERVER shard1 OPTIONS ( table_name ’users ’) ; ... CREATE FOREIGN TABLE users_1001_2000 ( user_id int , user_name text , ... ) SERVER shard2 OPTIONS ( table_name ’users ’) ; ... 22 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 32. Escalabilidade Horizontal Vamos falar de sharding ent˜ao! CREATE VIEW users AS SELECT * FROM users_1_1000 WHERE user_id BETWEEN 1 AND 1000 UNION ALL SELECT * FROM users_1001_2000 WHERE user_id BETWEEN 1001 AND 2000 UNION ALL ... H´a varia¸c˜oes dessa tecnica 7 8 7 https://www.youtube.com/watch?v=3JQrfgb3Av0 8 http://snowman.net/slides/pgfdw_sharding.pdf 23 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 33. E quando o PostgreSQL n˜ao resolve meu problema? • Primeiro, tem certeza que n˜ao? 24 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 34. E quando o PostgreSQL n˜ao resolve meu problema? • Primeiro, tem certeza que n˜ao? • Absoluta? 24 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 35. E quando o PostgreSQL n˜ao resolve meu problema? • Ok, acontece... ◦ sobrecarga de opera¸c˜oes e do MVCC pode gerar problemas; ◦ falta de funcionalidades frente `a banco de dados especializados, exemplos: • estruturas de grafos s˜ao melhores tratadas em especializados como Neo4j do que com consultas recursivas (estas tendem a ficar lentas quando a profundidade ´e grande); • FTS do PostgreSQL comparado `a outros como Lucene ou Sphinx ainda perde em funcionalidades e performance (em termos de performance, aguarde/teste a nova vers˜ao, 9.4, houve melhoras substanciais nessa ´area). 25 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 36. E quando o PostgreSQL n˜ao resolve meu problema? • Mas tudo bem usar outro. Se quiser associar, v´arios Foreign Data Wrappers (FDW) est˜ao dispon´ıveis (redis fdw, mongo fdw, ...) para mapear dados externos dentro de tabelas no PostgreSQL (o exemplo do shard usa essa funcionalidade, mas mapeando outros bancos PostgreSQL); 26 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 37. E quando o PostgreSQL n˜ao resolve meu problema? • DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se o projeto crescer fora de escala que o PG suporte, busque outras alternativas. ´E muito comum utilizar bancos NoSQL junto com bancos relacionais (n˜ao ´e escolha ´unica). Existem muitos bancos MPP (Massive Parallel Processing) e (100%) NewSQL baseados no PostgreSQL. ◦ comerciais: Greenplun, Amazon Redshift, Aster Data, Netezza, Vertica, entre outros; ◦ e as promessas open source: Postgres-XC e Postgres-XL. 27 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 38. Conclus˜ao O PostgreSQL ´e hoje, sem d´uvidas, um dos bancos de dados mais vers´ateis (eu diria “o mais”) e que oferece infinitas possibilidades. Associando o bom e velho modelo relacional `a tendˆencias (n˜ao novas, devo dizer) e necessidades presentes nas aplica¸c˜oes modernas. 28 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  • 39.
  • 40.
  • 41. Obrigado! D´uvidas? Matheus de Oliveira <matheus.oliveira@dextra.com.br> irc.freenode.net: /join #postgresql,#postgresql-br Meu nick: MatheusOl Twitter: @matioli matheus