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”
...
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a...
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a...
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a...
Quem sou eu?
Matheus de Oliveira • Ciˆencias de Computa¸c˜ao – USP
• DBA PostgreSQL na Dextra e instrutor na
Dextraining a...
Bancos de dados relacionais / SQLs
• Baseados no modelo relacional
• Transa¸c˜oes ACID
◦ Atomicidade
◦ Consistˆencia
◦ Iso...
NoSQLs
• Transa¸c˜oes BASE:
◦ Basic Availability
◦ Soft-state
◦ Eventual consistency
• Interface de consulta pr´opria
• Sc...
NoSQLs
• Transa¸c˜oes BASE:
◦ Basic Availability
◦ Soft-state
◦ Eventual consistency
• Interface de consulta pr´opria
• Sc...
O que ´e NewSQL
“ In the context of transaction processing, I would define a NewSQL
DBMS as one having the following 5 char...
O que ´e NewSQL
“A DBMS that delivers the scalability and flexibility promised by
NoSQL while retaining the support for SQL...
PostgreSQL
“one database to rule them all”
• FOSS – Free Open
Source Software
• Quase 30 anos de
experiˆencia
• Robustez, ...
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento...
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento...
Armazenamento chave/valor
Tipo hstore
• Presente como uma contrib do PostgreSQL desde a vers˜ao 8.3
(2008)
• Armazenamento...
JSON no PostgreSQL
• 2012 – vers˜ao 9.2 – tipo json, basicamente text com valida¸c˜oes
• 2013 – vers˜ao 9.3 – ainda json, ...
JSON no PostgreSQL
CREATE TABLE booksdata (
title text PRIMARY KEY ,
booksdata jsonb
);
11 / 31
PostgreSQL como NewSQL – M...
JSON no PostgreSQL
SELECT title ,
bookdata ->> ’ current_edition ’ AS edition ,
bookdata #> ’{" publication_info ", 0, " i...
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 ...
JSON no PostgreSQL
Ah!!! E eu comentei que ´e indexado?
DE VERDADE
CREATE INDEX booksdata_json_idx ON booksdata
USING GIN ...
Full Text Search
• FTS nativo no PostgreSQL (tsvector, tsquery, ...)
SELECT * FROM articles t(fts)
WHERE fts @@ tsquery ’P...
Full Text Search
• FTS nativo no PostgreSQL (tsvector, tsquery, ...)
SELECT * FROM articles t(fts)
WHERE fts @@ tsquery ’P...
Consultas em grafos e hierarquias
• Pode ser facilmente realizada utilizando consultas recursivas
• O desempenho depende d...
Consultas em grafos e hierarquias
Resultado:
administrativo
| __comercial
|__| __carla
|__| __maria
| __financeiro
|__| __...
Performance
O PostgreSQL ´e, sem d´uvidas, um dos bancos de dados com melhores
desempenhos num ´unico n´o. Devemos sempre ...
Performance
E quando precisamos de mais:
• COMMIT ass´ıncrono;
• columnar store (extens˜oes para o PostgreSQL cstore fdw 2...
Escalabilidade Horizontal
Replica¸c˜ao master-slave via Streaming Replication oferece grandes
oportunidades.
• replica¸c˜a...
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
O PostgreSQL n˜ao oferece suporte `a sharding, mas muita gente
e...
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
• Uma t´ecnica para sharding automatizado consiste em utilizar
d...
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
Exemplo (“ugly, but works...”):
CREATE FOREIGN TABLE users_1_100...
Escalabilidade Horizontal
Vamos falar de sharding ent˜ao!
CREATE VIEW users AS
SELECT * FROM users_1_1000
WHERE user_id BE...
E quando o PostgreSQL n˜ao
resolve meu problema?
• Primeiro, tem certeza que n˜ao?
24 / 31
PostgreSQL como NewSQL – Matheu...
E quando o PostgreSQL n˜ao
resolve meu problema?
• Primeiro, tem certeza que n˜ao?
• Absoluta?
24 / 31
PostgreSQL como New...
E quando o PostgreSQL n˜ao
resolve meu problema?
• Ok, acontece...
◦ sobrecarga de opera¸c˜oes e do MVCC pode gerar proble...
E quando o PostgreSQL n˜ao
resolve meu problema?
• Mas tudo bem usar outro. Se quiser associar, v´arios Foreign Data
Wrapp...
E quando o PostgreSQL n˜ao
resolve meu problema?
• DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se o
projeto cr...
Conclus˜ao
O PostgreSQL ´e hoje, sem d´uvidas, um dos bancos de dados mais
vers´ateis (eu diria “o mais”) e que oferece in...
Obrigado!
D´uvidas?
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
irc.freenode.net:
/join #postgresql,#postgresql-b...
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014
Próximos SlideShares
Carregando em…5
×

Postgresql como NewSQL - DevCamp 2014

855 visualizações

Publicada em

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).

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
855
No SlideShare
0
A partir de incorporações
0
Número de incorporações
20
Ações
Compartilhamentos
0
Downloads
23
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Postgresql como NewSQL - DevCamp 2014

  1. 1. PostgreSQL como NewSQL Matheus de Oliveira <matheus.oliveira@dextra.com.br>
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. JSON no PostgreSQL CREATE TABLE booksdata ( title text PRIMARY KEY , booksdata jsonb ); 11 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  18. 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. 19. JSON no PostgreSQL Ah!!! E eu comentei que ´e indexado? 13 / 31 PostgreSQL como NewSQL – Matheus de Oliveira – DevCamp2014
  20. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 39. Obrigado! D´uvidas? Matheus de Oliveira <matheus.oliveira@dextra.com.br> irc.freenode.net: /join #postgresql,#postgresql-br Meu nick: MatheusOl Twitter: @matioli matheus

×