Postgresql como NewSQL - DevCamp 2014

Download Postgresql como NewSQL - DevCamp 2014

Post on 14-Jun-2015

420 views

Category:

Technology

0 download

Embed Size (px)

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, extenses e tcnicas usadas para colocar o PostgreSQL na competio 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 no somente possuem as caractersticas relacionais e a linguagem SQL, mas tambm funcionalidades extras (json, chave/valor, In-Memory Columnar Store, entre outros) e poder de escalabilidade horizontal (replicao, balanceamento de carga e at sharding).

TRANSCRIPT

<ul><li> 1. PostgreSQL como NewSQL Matheus de Oliveira </li></ul><p> 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 nao resolve meu problema? Conclusao 2 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 3. 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...) 3 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 4. 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 3 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 5. 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/ 3 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 6. 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 na pratica Mais de 10 anos na estrada Mais de 10 mil prossionais 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 Transacoes ACID Atomicidade Consistencia Isolamento Durabilidade Interface de consulta padrao SQL Armazenamento em relacoes estrutura acoplada ... 4 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 8. 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 ... 5 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 9. 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 ... 5 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 10. O que e NewSQL In the context of transaction processing, I would dene 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 conict 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 exibility 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 experiencia Robustez, conabilidade, maturidade Diversas funcionalidades, e novas a cada versao 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 versao 8.3 (2008) Armazenamento de chaves/valores como atributo (coluna) de uma tabela Diversos operadores para manipulacao, navegacao e ltragem (busca) Indexacao B-tree, GIN e GIST Exemplo: SELECT * FROM movies WHERE ( moviedata -&gt;imdb_rate ):: int &gt; 4 AND moviedata -&gt; 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 versao 8.3 (2008) Armazenamento de chaves/valores como atributo (coluna) de uma tabela Diversos operadores para manipulacao, navegacao e ltragem (busca) Indexacao B-tree, GIN e GIST Exemplo: SELECT * FROM movies WHERE ( moviedata -&gt;imdb_rate ):: int &gt; 4 AND moviedata -&gt; alternate_title = Black Mask ; Rapido... Flexvel... Incrvel... Lindao... 9 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 15. Armazenamento chave/valor Tipo hstore Presente como uma contrib do PostgreSQL desde a versao 8.3 (2008) Armazenamento de chaves/valores como atributo (coluna) de uma tabela Diversos operadores para manipulacao, navegacao e ltragem (busca) Indexacao B-tree, GIN e GIST Exemplo: SELECT * FROM movies WHERE ( moviedata -&gt;imdb_rate ):: int &gt; 4 AND moviedata -&gt; alternate_title = Black Mask ; Rapido... Flexvel... Incrvel... Lindao... mas, tnhamos que evoluir... 9 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 16. JSON no PostgreSQL 2012 versao 9.2 tipo json, basicamente text com validacoes 2013 versao 9.3 ainda json, mas com funcoes fantasticas (a grande adocao comeca) 2014 versao 9.4 (hoje em beta1) tipo jsonb, binario (estrutura interna baseada no hstore), indexacao GIN ultra-blaster-rapido 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 -&gt;&gt; current_edition AS edition , bookdata #&gt; {" publication_info ", 0, " isbn "} AS isbn FROM booksdata WHERE bookdata @&gt; { " publication_info " : [{" publisher ": " Avon "} ] }:: jsonb ORDER BY bookdata #&gt; {" 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 &amp; NewSQL ORDER BY ts_rank (fts , tsquery PostgreSQL &amp; 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 &amp; NewSQL ORDER BY ts_rank (fts , tsquery PostgreSQL &amp; 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 ltro 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 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 duvidas, um dos bancos de dados com melhores desempenhos num unico no. Devemos sempre olhar para: ajuste (tuning) de parametros de conguracao; indexacao; modelo de dados (normalizar ou desnormalizar); tarefas administrativas; estatsticas atualizadas; ... busque por PostgreSQL Performance Tuning... 17 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 27. Performance E quando precisamos de mais: COMMIT assncrono; columnar store (extensoes para o PostgreSQL cstore fdw 2 e In-Memory Columnar Store (ICMS) 3 4); particionamento de tabelas (nao e 100% suportado, mas funciona perfeitamente); divisao 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 Replicacao master-slave via Streaming Replication oferece grandes oportunidades. replicacao sncrona ou assncrona; 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 usando pgPool-II; e claro, alta disponibilidade. 19 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 29. Escalabilidade Horizontal Vamos falar de sharding entao! O PostgreSQL nao oferece suporte `a sharding, mas muita gente encontra uma maneira. Via aplicacao: 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 entao! Uma tecnica para sharding automatizado consiste em utilizar diversas 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 as chaves de shard) para cada shard, usando a (velha) funcionalidade de constraint exclusion; INSERT/UPDATE/DELETE deve ser redirecionando usando triggers proprias do tipo INSTEAD OF. mover dados entre os shards e possvel, mas trabalhoso. 21 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 31. Escalabilidade Horizontal Vamos 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 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 32. Escalabilidade Horizontal Vamos falar de sharding entao! 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 ... Ha variacoes 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 nao resolve meu problema? Primeiro, tem certeza que nao? 24 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 34. E quando o PostgreSQL nao resolve meu problema? Primeiro, tem certeza que nao? Absoluta? 24 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 35. E quando o PostgreSQL nao resolve 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 como Neo4j do que com consultas recursivas (estas tendem a car 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 versao, 9.4, houve melhoras substanciais nessa area). 25 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 36. E quando o PostgreSQL nao resolve meu problema? Mas tudo bem usar outro. Se quiser associar, varios Foreign Data Wrappers (FDW) estao disponveis (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 nao 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 (nao 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. Conclusao O PostgreSQL e hoje, sem duvidas, um dos bancos de dados mais versateis (eu diria o mais) e que oferece innitas possibilidades. Associando o bom e velho modelo relacional `a tendencias (nao novas, devo dizer) e necessidades presentes nas aplicacoes modernas. 28 / 31 PostgreSQL como NewSQL Matheus de Oliveira DevCamp2014 39. Obrigado! Duvidas? Mat...</p>