postgresql como newsql - devcamp 2014

Download Postgresql como NewSQL - DevCamp 2014

Post on 14-Jun-2015

421 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, 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

  • 1. PostgreSQL como NewSQL Matheus de Oliveira

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 ->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 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 ->imdb_rate ):: int > 4 AND moviedata -> 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 ->imdb_rate ):: int > 4 AND moviedata -> 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 ->> 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 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: