postgresql como newsql - devcamp 2014

41
PostgreSQL como NewSQL Matheus de Oliveira <[email protected]>

Upload: matheus-de-oliveira

Post on 14-Jun-2015

440 views

Category:

Technology


0 download

DESCRIPTION

Apresentado no DevCamp 2014 (dia 16 de Maio de 2014). Que o PostgreSQL é um banco de dados relacional poderoso e robusto, todo mundo sabe. Nessa palestra veja as funcionalidades, extensões e técnicas usadas para colocar o PostgreSQL na competição com muitos bancos de dados NoSQL. Veja o que quer dizer NewSQL e onde o PostgreSQL se encontra nesse grupo de bancos de dados que não somente possuem as características relacionais e a linguagem SQL, mas também funcionalidades extras (json, chave/valor, In-Memory Columnar Store, entre outros) e poder de escalabilidade horizontal (replicação, balanceamento de carga e até sharding).

TRANSCRIPT

Page 1: Postgresql como NewSQL - DevCamp 2014

PostgreSQL como NewSQL

Matheus de Oliveira<[email protected]>

Page 2: Postgresql como NewSQL - DevCamp 2014

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 nao resolve meu problema?

Conclusao

2 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 3: Postgresql como NewSQL - DevCamp 2014

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – USP• DBA PostgreSQL na Dextra e instrutor na

Dextraining a mais de 2 anos• Apaixonado pelo PG (do psql ao codigo-fonte...)

• ...mas tambem 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

3 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 4: Postgresql como NewSQL - DevCamp 2014

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – USP• DBA PostgreSQL na Dextra e instrutor na

Dextraining a mais de 2 anos• Apaixonado pelo PG (do psql ao codigo-fonte...)• ...mas tambem 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

3 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 5: Postgresql como NewSQL - DevCamp 2014

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – USP• DBA PostgreSQL na Dextra e instrutor na

Dextraining a mais de 2 anos• Apaixonado pelo PG (do psql ao codigo-fonte...)• ...mas tambem 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

3 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 6: Postgresql como NewSQL - DevCamp 2014

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – USP• DBA PostgreSQL na Dextra e instrutor na

Dextraining a mais de 2 anos• Apaixonado pelo PG (do psql ao codigo-fonte...)• ...mas tambem 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

3 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 7: Postgresql como NewSQL - DevCamp 2014

Bancos de dados relacionais / SQLs

• Baseados no modelo relacional

• Transacoes ACID◦ Atomicidade◦ Consistencia◦ Isolamento◦ Durabilidade

• Interface de consulta padrao – SQL

• Armazenamento em relacoes – estrutura acoplada

• ...

4 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 8: Postgresql como NewSQL - DevCamp 2014

NoSQLs

• Transacoes BASE:◦ Basic Availability◦ Soft-state◦ Eventual consistency

• Interface de consulta propria• Schemaless – estrutura desacoplada

◦ Chave-Valor◦ Documento◦ Grafos◦ ...

• Performance como prioridade◦ In-place update◦ Replicacao◦ Sharding◦ ...

• <entre com sua buzzword aqui>

5 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 9: Postgresql como NewSQL - DevCamp 2014

NoSQLs

• Transacoes BASE:◦ Basic Availability◦ Soft-state◦ Eventual consistency

• Interface de consulta propria• Schemaless – estrutura desacoplada

◦ Chave-Valor◦ Documento◦ Grafos◦ ...

• Performance como prioridade◦ In-place update◦ Replicacao◦ Sharding◦ ...

• <entre com sua buzzword aqui>

5 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 10: Postgresql como NewSQL - DevCamp 2014

O que e NewSQL

“ In the context of transaction processing, I would define a NewSQLDBMS as one having the following 5 characteristics:

1. SQL as the primary mechanism for application interaction2. ACID support for transactions3. 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

1http://cacm.acm.org/blogs/blog-cacm/109710-new-sql-an-alternative-to-nosql-and-old-sql-for-new-oltp-apps/fulltext

6 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 11: Postgresql como NewSQL - DevCamp 2014

O que e NewSQL

“A DBMS that delivers the scalability and flexibility promised byNoSQL while retaining the support for SQL queries and/or ACID, orto improve performance for appropriate workloads”

451 Group

7 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 12: Postgresql como NewSQL - DevCamp 2014

PostgreSQL“one database to rule them all”

• FOSS – Free OpenSource Software

• Quase 30 anos deexperiencia

• Robustez, confiabilidade,maturidade

• Diversas funcionalidades,e novas a cada versao

• Forte extensibilidade

8 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 13: Postgresql como NewSQL - DevCamp 2014

Armazenamento chave/valorTipo hstore

• Presente como uma contrib do PostgreSQL desde a versao 8.3(2008)

• Armazenamento de chaves/valores como atributo (coluna) de umatabela

• Diversos operadores para manipulacao, navegacao e filtragem(busca)

• Indexacao B-tree, GIN e GIST• Exemplo:

SELECT * FROM moviesWHERE ( moviedata ->’ imdb_rate ’):: int > 4AND moviedata ->’ alternate_title ’ = ’Black

Mask ’;

Rapido... Flexıvel... Incrıvel... Lindao...mas, tınhamos que evoluir...

9 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 14: Postgresql como NewSQL - DevCamp 2014

Armazenamento chave/valorTipo hstore

• Presente como uma contrib do PostgreSQL desde a versao 8.3(2008)

• Armazenamento de chaves/valores como atributo (coluna) de umatabela

• Diversos operadores para manipulacao, navegacao e filtragem(busca)

• Indexacao B-tree, GIN e GIST• Exemplo:

SELECT * FROM moviesWHERE ( moviedata ->’ imdb_rate ’):: int > 4AND moviedata ->’ alternate_title ’ = ’Black

Mask ’;Rapido... Flexıvel... Incrıvel... Lindao...

mas, tınhamos que evoluir...

9 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 15: Postgresql como NewSQL - DevCamp 2014

Armazenamento chave/valorTipo hstore

• Presente como uma contrib do PostgreSQL desde a versao 8.3(2008)

• Armazenamento de chaves/valores como atributo (coluna) de umatabela

• Diversos operadores para manipulacao, navegacao e filtragem(busca)

• Indexacao B-tree, GIN e GIST• Exemplo:

SELECT * FROM moviesWHERE ( moviedata ->’ imdb_rate ’):: int > 4AND moviedata ->’ alternate_title ’ = ’Black

Mask ’;Rapido... Flexıvel... Incrıvel... Lindao...

mas, tınhamos que evoluir...9 / 31

PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 16: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

• 2012 – versao 9.2 – tipo json, basicamente text com validacoes

• 2013 – versao 9.3 – ainda json, mas com funcoes fantasticas (agrande adocao comeca)

• 2014 – versao 9.4 (hoje em beta1) – tipo jsonb, binario(estrutura interna baseada no hstore), indexacao GIN –ultra-blaster-rapido

10 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 17: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

CREATE TABLE booksdata (title text PRIMARY KEY ,booksdata jsonb

);

11 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 18: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

SELECT title ,bookdata ->> ’ current_edition ’ AS edition ,bookdata #> ’{" publication_info ", 0, " isbn "} ’

AS isbnFROM booksdataWHERE bookdata @> ’{ " publication_info " : [{"

publisher ": " Avon "} ] }’:: jsonbORDER BY bookdata #> ’{" publication_info ", 0, "

price "} ’ DESC ;

12 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 19: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

13 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 20: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

13 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 21: Postgresql como NewSQL - DevCamp 2014

JSON no PostgreSQL

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

13 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 22: Postgresql como NewSQL - DevCamp 2014

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 articlesWHERE title % ’ NewSQL ’ORDER BY sml DESC LIMIT 10;

• Claro, tudo devidamente indexado... GIN and GIST rocks

14 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 23: Postgresql como NewSQL - DevCamp 2014

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 articlesWHERE title % ’ NewSQL ’ORDER BY sml DESC LIMIT 10;

• Claro, tudo devidamente indexado... GIN and GIST rocks

14 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 24: Postgresql como NewSQL - DevCamp 2014

Consultas em grafos e hierarquias

• Pode ser facilmente realizada utilizando consultas recursivas• O desempenho depende do filtro e profundidade da navegacao• Exemplo, catalogo de roles (usuarios/grupos) do PostgreSQL:

WITH RECURSIVE roles AS (SELECT r. oid AS roleid , r. rolname ,

1 AS level , array [r. rolname ] AS pathFROM pg_authid rWHERE r. oid NOT IN (

SELECT m. member FROM pg_auth_members m)UNION ALLSELECT r.oid , r. rolname ,

p. level + 1, p. path || r. rolnameFROM pg_auth_members mINNER JOIN pg_authid r ON m. member = r. oidINNER JOIN roles p ON m. roleid = p. roleid

)SELECT repeat (’|__ ’, level -1) || rolnameFROM rolesORDER BY path ;

15 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 25: Postgresql como NewSQL - DevCamp 2014

Consultas em grafos e hierarquias

Resultado:

administrativo| __comercial|__| __carla|__| __maria| __financeiro|__| __ana|__| __pauloti| __beatriz| __julio| __matheus

...

16 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 26: Postgresql como NewSQL - DevCamp 2014

Performance

O PostgreSQL e, sem duvidas, um dos bancos de dados com melhoresdesempenhos num unico no. Devemos sempre olhar para:

• ajuste (tuning) de parametros de configuracao;

• indexacao;

• modelo de dados (normalizar ou desnormalizar);

• tarefas administrativas;

• estatısticas atualizadas;

• ... busque por ”PostgreSQL Performance Tuning”...

17 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 27: Postgresql como NewSQL - DevCamp 2014

Performance

E quando precisamos de mais:

• COMMIT assıncrono;

• columnar store (extensoes para o PostgreSQL cstore fdw 2 eIn-Memory Columnar Store (ICMS) 3 4);

• particionamento de tabelas (nao e 100% suportado, mas funcionaperfeitamente);

• divisao de tablespaces.

Mas e quanto a escalabilidade horizontal?

2http://citusdata.github.io/cstore_fdw/3http://www.garret.ru/imcs/user_guide.html4http://www.pgcon.org/2014/schedule/events/643.en.html

18 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 28: Postgresql como NewSQL - DevCamp 2014

Escalabilidade Horizontal

Replicacao master-slave via Streaming Replication oferece grandesoportunidades.

• replicacao sıncrona ou assıncrona;

• replicacao em cascata;

• execucao de backups no slave podem aliviar o master (24x7);

• distribuicao de consultas mais pesadas (relatorios, analises, etc.)nos slaves;

• balanceamento de carga via aplicacao ou automatizada usandopgPool-II;

• e claro, alta disponibilidade.

19 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 29: Postgresql como NewSQL - DevCamp 2014

Escalabilidade HorizontalVamos falar de sharding entao!

O PostgreSQL nao oferece suporte a sharding, mas muita genteencontra uma maneira.

• Via aplicacao:◦ Instangram 5

◦ Braintree 6

5http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram

6https://www.braintreepayments.com/braintrust/scaling-postgresql-at-braintree-four-years-of-evolution

20 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 30: Postgresql como NewSQL - DevCamp 2014

Escalabilidade HorizontalVamos falar de sharding entao!

• Uma tecnica para sharding automatizado consiste em utilizardiversas funcionalidades e o poder de extensao 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 redirecionara consultas (usando aschaves de shard) para cada shard, usando a (velha) funcionalidade de“constraint exclusion”;

• INSERT/UPDATE/DELETE deve ser redirecionando usando triggersproprias do tipo INSTEAD OF.

◦ mover dados entre os shards e possıvel, mas trabalhoso.

21 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 31: Postgresql como NewSQL - DevCamp 2014

Escalabilidade HorizontalVamos falar de sharding entao!

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 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 32: Postgresql como NewSQL - DevCamp 2014

Escalabilidade HorizontalVamos falar de sharding entao!

CREATE VIEW users ASSELECT * FROM users_1_1000

WHERE user_id BETWEEN 1 AND 1000UNION ALL

SELECT * FROM users_1001_2000WHERE user_id BETWEEN 1001 AND 2000

UNION ALL...

Ha variacoes dessa tecnica 7 8

7https://www.youtube.com/watch?v=3JQrfgb3Av08http://snowman.net/slides/pgfdw_sharding.pdf

23 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 33: Postgresql como NewSQL - DevCamp 2014

E quando o PostgreSQL naoresolve meu problema?

• Primeiro, tem certeza que nao?

• Absoluta?

24 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 34: Postgresql como NewSQL - DevCamp 2014

E quando o PostgreSQL naoresolve meu problema?

• Primeiro, tem certeza que nao?

• Absoluta?

24 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 35: Postgresql como NewSQL - DevCamp 2014

E quando o PostgreSQL naoresolve meu problema?

• Ok, acontece...

◦ sobrecarga de operacoes e do MVCC pode gerar problemas;◦ falta de funcionalidades frente a banco de dados especializados,

exemplos:

• estruturas de grafos sao melhores tratadas em especializados comoNeo4j do que com consultas recursivas (estas tendem a ficar lentasquando a profundidade e grande);

• FTS do PostgreSQL comparado a outros como Lucene ou Sphinx aindaperde em funcionalidades e performance (em termos de performance,aguarde/teste a nova versao, 9.4, houve melhoras substanciais nessaarea).

25 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 36: Postgresql como NewSQL - DevCamp 2014

E quando o PostgreSQL naoresolve meu problema?

• Mas tudo bem usar outro. Se quiser associar, varios Foreign DataWrappers (FDW) estao disponıveis (redis fdw, mongo fdw,...) para mapear dados externos dentro de tabelas no PostgreSQL(o exemplo do shard usa essa funcionalidade, mas mapeandooutros bancos PostgreSQL);

26 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 37: Postgresql como NewSQL - DevCamp 2014

E quando o PostgreSQL naoresolve meu problema?

• DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se oprojeto crescer fora de escala que o PG suporte, busque outrasalternativas. E muito comum utilizar bancos NoSQL junto combancos relacionais (nao e escolha unica). Existem muitos bancosMPP (Massive Parallel Processing) e (100%) NewSQL baseadosno PostgreSQL.

◦ comerciais: Greenplun, Amazon Redshift, Aster Data, Netezza,Vertica, entre outros;

◦ e as promessas open source: Postgres-XC e Postgres-XL.

27 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 38: Postgresql como NewSQL - DevCamp 2014

Conclusao

O PostgreSQL e hoje, sem duvidas, um dos bancos de dados maisversateis (eu diria “o mais”) e que oferece infinitas possibilidades.Associando o bom e velho modelo relacional a tendencias (nao novas,devo dizer) e necessidades presentes nas aplicacoes modernas.

28 / 31PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014

Page 39: Postgresql como NewSQL - DevCamp 2014
Page 40: Postgresql como NewSQL - DevCamp 2014
Page 41: Postgresql como NewSQL - DevCamp 2014

Obrigado!

Duvidas?

Matheus de Oliveira<[email protected]>

irc.freenode.net:/join #postgresql,#postgresql-br

Meu nick: MatheusOl

Twitter: @matioli matheus