NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)

1.327 visualizações

Publicada em

Atualmente existe muito debate a respeito da habilidade das tecnologias NoSQL atenderem melhor as grandes demandas de processamento de dados em larga escala, do que seus predecessores, os RDBMS (Relational Database Management System).

E realmente as tecnologias NoSQL, assim como computação em nuvem, surgiram da grande necessidade de se prover serviços escaláveis, pois os bancos de dados estão sendo pressionados/direcionados a oferecer escalabilidade horizontal. Estas tecnologias foram desenvolvidas com técnicas de armazenamento de dados (documento, chave/valor, tabular, grafo, etc) afim de suprir esses requisitos.

Nesta apresentação veremos como o PostgreSQL atende vários desses requisitos por oferecer suporte nativo a JSON/JSONB, HStore (chave/valor), XML, oferecendo excelente indexação e otimização no armazenamento, e atendendo aos requisitos ACID, portanto tendo o melhor dos dois mundos. Sem contar o alto poder de extensibilidade que oferece pela possibilidade de escrever novos tipos de dados, mecanismos de indexação, linguagens procedurais, adaptadores de fontes de dados externas (SQL/MED), entre outras diversas características excelentes.

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

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

Nenhuma nota no slide

NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)

  1. 1. NoSQL + SQL = PostgreSQL timbira A empresa brasileira de PostgreSQL PGDay, Campinas/SP, 2014-09-10
  2. 2. Palestrante timbira • Fabrízio de Royes Mello • Desenvolvedor PostgreSQL • Líder do PostgreSQL Brasil • Pós-Graduando Uniritter (Agile) • @fabriziomello • http://fabriziomello.github.io • Timbira • Consultor/Mentor/Coach • A empresa brasileira de PostgreSQL • Consultoria • Desenvolvimento • Suporte 24x7 • Treinamento Timbira - A empresa brasileira de PostgreSQL 2 / 34
  3. 3. Sobre este material timbira • esta apresentação está disponível em: http://www.timbira.com.br/material • esta apresentação está sob licença Creative Commons Atribuição 3.0 Brasil: http://www.creativecommons.org/licenses/by/3.0/br • Embora este material tenha sido elaborado com toda precaução, os autores não assumem quaisquer responsabilidades por erros, omissões ou danos resultantes da utilização das informações aqui contidas. • Se você encontrar qualquer erro, por favor reporte-o a contato@timbira.com.br
  4. 4. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 1 / 34
  5. 5. Como tudo começou na minha vida... timbira • 1993 - Basic • 1994 - CLIPPER (e um pouco de C) • 1996 - C e Pascal • 1998 - SQL - mudou minha vida ;-) • 1999 - Teoria Relacional / PostgreSQL 6.5 • 2000 - PostgreSQL 7.0 • ... • 2008 - Comunidade PostgreSQL Brasil • ... • 2012 - Primeiro patch PostgreSQL :-) • 2013 - Prêmio Comunidade Brasileira Colaboração • 2014 - 20 patches PostgreSQL (2 patrocinados) :-) Timbira - A empresa brasileira de PostgreSQL 2 / 34
  6. 6. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 3 / 34
  7. 7. Teorema CAP timbira Em Ciências da Computação, o teorema CAP, também conhecido como Teorema de Brewer, afirma que é impossível para um sistema de computador distribuído fornecer simultaneamente todas as três das seguintes garantias: • Consistência (Consistency): todos nós enxergam os mesmos dados ao mesmo tempo; • Disponibilidade (Availability): garantia que todas requisições recebem uma resposta de falha ou sucesso; • Tolerância a Particionamento (Partition Tolerance): o sistema continua operando apesar de perda de mensagem ou falha em parte dele; Timbira - A empresa brasileira de PostgreSQL 4 / 34
  8. 8. Teorema CAP timbira Timbira - A empresa brasileira de PostgreSQL 5 / 34
  9. 9. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 6 / 34
  10. 10. SQL timbira • Structured Query Language • Linguagem Declarativa • DML, DDL, DCL • Joins, Anti-Joins, Semi-Joins, ... Timbira - A empresa brasileira de PostgreSQL 7 / 34
  11. 11. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 8 / 34
  12. 12. NoSQL timbira ”Um banco de dados NoSQL ou Not Only SQL fornece um mecanismo para armazenamento e recuperação de dados que são modelados de forma diferente das relações (tabular) dos bancos de dados relacionais. Motivações para essa abordagem incluem: design simples, escalabilidade horizontal e controle mais fino sobre disponibilidade.” (Wikipedia) Timbira - A empresa brasileira de PostgreSQL 9 / 34
  13. 13. NoSQL: História timbira • introduzido em 1998 por Carlos Strozzi como nome de um banco de dados que não tinha interface SQL • re-introduzido em 2009 por Eric Evans (Rackspace) quando Johan Oskarsson (Last.fm) queria organizar um evento sobre bancos de dados open-source distribuidos Timbira - A empresa brasileira de PostgreSQL 10 / 34
  14. 14. NoSQL: Classificação timbira • Key-Value (PostgreSQL, Dynamo, FoundationDB, MemcacheDB, Redis, Riak, ...) • Document (PostgreSQL, CouchDB, MongoDB, ...) • Column (PostgreSQL, Cassandra, HBase, ...) • Graph (PostgreSQL, Allegro, Neo4j, OrientDB, ...) Timbira - A empresa brasileira de PostgreSQL 11 / 34
  15. 15. NoSQL: ????? timbira WTF, PostgreSQL em todas classificações NoSQL???? Timbira - A empresa brasileira de PostgreSQL 12 / 34
  16. 16. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 13 / 34
  17. 17. PostgreSQL: O que é? timbira The world’s most advanced open source database. Timbira - A empresa brasileira de PostgreSQL 14 / 34
  18. 18. PostgreSQL: História timbira • Antes : Oriundo do INGRES • 1986 : Início Projeto (Berkley) • 1987 : Primeira versão do Postgres • 1991 : versão 3 com principais funcionalidades atuais • 1993 : versão 4.2, última lançada pela Berkley • 1994 : Andrew Yu e Jolly Chen lançam Postgre95 com interpretador para linguagem SQL • 1997 : Nome muda para PostgreSQL, versão 6 lançada • 2000 : versão 7 lançada com suporte a FK • 2005 : versão 8 lançada com versão nativa Windows, Tablespaces, Savepoints, Point-In-Time-Recovery • 2005 : versão 8.1 Commit Tho Phases, Roles • 2006 : versão 8.2 (Insert, Update, Delete) Returning, melhora performance OLTP e BI Timbira - A empresa brasileira de PostgreSQL 15 / 34
  19. 19. PostgreSQL: História (continuação) timbira • 2008 : versão 8.3 debug PL/PgSQL, Tsearch2 (XML) no core • 2009 : versão 8.4 Windowing Functions, Common Table Expressions and Recursive Queries, Parallel Restore, ”pg_upgrade” • 2010 : versão 9.0 Hot Standby and Streaming Replication • 2011 : versão 9.1 Synchronous Replicacion, FDW (SQL/MED), CREATE EXTENSION, Unlogged Tables • 2012 : versão 9.2 Index-only Scans, Cascading Replication, JSON, Range Types • 2013 : versão 9.3 Materialized Views, Lateral Join, writable FDW, Event Triggers, Background Workers • 2014 : versão 9.4 JSONB, Logical Decoding, Dynamic Background Workers • 2015 : versão 9.5 Parallel Query??? BDR (Bi-directional Replication)??? Timbira - A empresa brasileira de PostgreSQL 16 / 34
  20. 20. PostgreSQL: Key/Value Database timbira Extensão HSTORE presente desde 8.2 (2006) - pacote ’contrib’ CREATE EXTENSION hstore; CREATE TABLE users ( email VARCHAR(255) PRIMARY KEY, data HSTORE ); INSERT INTO users (email, data) VALUES ('fabriziomello@gmail.com','sex=>"M",birthdate=>"1979-08-08"'), ('fabio.telles@gmail.com','sex=>"M",state=>"SP"'); Timbira - A empresa brasileira de PostgreSQL 17 / 34
  21. 21. PostgreSQL: Key/Value Database timbira SELECT * FROM users; email | data -------------------------+--------------------------------------- fabriziomello@gmail.com | "sex"=>"M", "birthdate"=>"1979-08-08" fabio.telles@gmail.com | "sex"=>"M", "state"=>"SP" (2 rows) SELECT * FROM users WHERE data->'state' = 'SP'; email | data ------------------------+--------------------------- fabio.telles@gmail.com | "sex"=>"M", "state"=>"SP" (1 row) SELECT * FROM users WHERE data->'birthdate' = '1979-08-08'; email | data -------------------------+--------------------------------------- fabriziomello@gmail.com | "sex"=>"M", "birthdate"=>"1979-08-08" (1 row) Timbira - A empresa brasileira de PostgreSQL 18 / 34
  22. 22. PostgreSQL: Key/Value Database timbira Conseguimos transformar uma tupla inteira em HStore ;-) SELECT hstore(users.*) FROM users; hstore ---------------------------------------------------------- "data"=>""sex"=>"M", "birthdate"=>"1979-08-08"", "email"=>"fabriziomello@gmail.com" "data"=>""sex"=>"M", "state"=>"SP"", "email"=>"fabio.telles@gmail.com" (2 rows) Timbira - A empresa brasileira de PostgreSQL 19 / 34
  23. 23. PostgreSQL: Key/Value Database timbira E ainda um HStore em JSON ;-) SELECT hstore_to_json(data) FROM users; hstore_to_json ----------------------------------------- {"sex": "M", "birthdate": "1979-08-08"} {"sex": "M", "state": "SP"} (2 rows) Timbira - A empresa brasileira de PostgreSQL 20 / 34
  24. 24. PostgreSQL: Document Database timbira Nativo apartir 9.2 (2012) e na 9.4 JSONB (2014) CREATE TABLE users ( email VARCHAR(255) PRIMARY KEY, data JSON ); INSERT INTO users (email, data) VALUES ('fabriziomello@gmail.com','{"sex":"M", "birthdate": "1979-08-08"}'), ('fabio.telles@gmail.com','{"sex":"M", "state":"SP"}'); Timbira - A empresa brasileira de PostgreSQL 21 / 34
  25. 25. PostgreSQL: Document Database timbira SELECT * FROM users; email | data -------------------------+---------------------------------------- fabriziomello@gmail.com | {"sex":"M", "birthdate": "1979-08-08"} fabio.telles@gmail.com | {"sex":"M", "state":"SP"} (2 rows) SELECT * FROM users WHERE data->>'state' = 'SP'; email | data ------------------------+--------------------------- fabio.telles@gmail.com | {"sex":"M", "state":"SP"} (1 row) SELECT * FROM users WHERE data->>'birthdate' = '1979-08-08'; email | data -------------------------+---------------------------------------- fabriziomello@gmail.com | {"sex":"M", "birthdate": "1979-08-08"} (1 row) Timbira - A empresa brasileira de PostgreSQL 22 / 34
  26. 26. PostgreSQL: Document Database timbira Conseguimos transformar uma tupla inteira em JSON/JSONB ;-) SELECT row_to_json(users.*) FROM users; row_to_json ----------------------------------------------------- {"email":"fabriziomello@gmail.com", "data":{"sex":"M", "birthdate": "1979-08-08"}} {"email":"fabio.telles@gmail.com", "data":{"sex":"M", "state":"SP"}} (2 rows) Timbira - A empresa brasileira de PostgreSQL 23 / 34
  27. 27. PostgreSQL: Column Database timbira Através de FDW (Foreign Data Wrappers) • cassandra_fdw: acessar cassandra dentro do PostgreSQL (https://github.com/disqus/cassandra_fdw) • cstore_fdw: columnar store for PostgreSQL (https://github.com/citusdata/cstore_fdw) • hadoop_fdw: acessar dados do Hadoop dentro do PostgreSQL (http://www.bigsql.org/se/hadoopfdw) Timbira - A empresa brasileira de PostgreSQL 24 / 34
  28. 28. PostgreSQL: Graph Database timbira Até dá, é difícil, e conheço apenas 2 formas possíveis: • Modelando + CTE • modelar ”nodes” e ”edges” (nós e arestas) • utilizar CTE (Common Table Expressions) recursivas (WITH RECURSIVE ...) • Utilizando neo4j_fdw (https://github.com/nuko-yokohama/neo4j_fdw) • Implementando o SEU FDW... OrientDB?? Timbira - A empresa brasileira de PostgreSQL 25 / 34
  29. 29. PostgreSQL: Graph Database timbira Exemplo sequencia fibonacci WITH RECURSIVE fibonacci(i, j) AS ( SELECT 0, 1 UNION ALL SELECT GREATEST(i, j), (i + j) AS i FROM fibonacci WHERE j < 13 ) SELECT i FROM fibonacci; i --- 0112358 (7 rows) Timbira - A empresa brasileira de PostgreSQL 26 / 34
  30. 30. PostgreSQL: E tem mais... timbira Stable: • Extensão PL/V8 - funções em javascript e coffescript dentro do seu banco (http://code.google.com/p/plv8js/wiki/PLV8) • mongo_fdw - FDW (leitura e escrita - 9.3) para MongoDB (https://github.com/EnterpriseDB/mongo_fdw) Prototype: • MongoLike - operações do mongodb no PostgreSQL (https://github.com/JerrySievert/mongolike) • Mongres - background worker que conversa com protocolo do mongo (https://github.com/umitanuki/mongres) Timbira - A empresa brasileira de PostgreSQL 27 / 34
  31. 31. PostgreSQL: PgREST timbira PgREST (http://pgre.st) • armazenamento de documentos JSON • executando dentro do PostgreSQL • trabalhando com seus dados relacionais • capaz de carregar modulos Node.js • compatível com REST API MongoLab e Firebase Timbira - A empresa brasileira de PostgreSQL 28 / 34
  32. 32. PostgreSQL: PgREST timbira Exemplo (http://hychen.wuweig.org/blog/2013/08/11/pgrest-howto/) $ pgrest --db tcp://postgres@localhost/mydb Available collections: users bookmarks webpages news tags inbox Serving `tcp://postgres@localhost/mydb` on http://0.0.0.0:3000/collections $ curl localhost:3000/collections/users {"paging":{"count":1,"l":30,"sk":0},"entries":[{"provider_name": "facebook","provider_id":"1231795847","username":"hychen", "display_name":null,"name":{"familyName":"Chen","givenName":"Hsin", "middleName":"Yi"},"emails":[{}],"photos":null,"_id":1}]}% Timbira - A empresa brasileira de PostgreSQL 29 / 34
  33. 33. PostgreSQL: Extensibilidade timbira • Custom Data Types, Operators, Casts, Aggregate, Collation, Encoding, Operator Class, Language Handlers • Extensions (http://www.pgxn.org) • Background Workers • Hooks • Foreign Data Wrappers (SQL/MED) • Full Text Search (text search dictionary, text search parser) Timbira - A empresa brasileira de PostgreSQL 30 / 34
  34. 34. PostgreSQL: Escalabilidade Horizontal timbira • PL/Proxy - https://wiki.postgresql.org/wiki/PL/Proxy • PostgresXC - https://wiki.postgresql.org/wiki/Postgres-XC • BDR (Bidirectional Replication) - http://wiki.postgresql.org/wiki/BDR_Project • Custom - i.e. Instagram (http://media.postgresql.org/sfpug/instagram_sfpug.pdf) Timbira - A empresa brasileira de PostgreSQL 31 / 34
  35. 35. Resumo timbira 1. Prelúdio 2. Teorema CAP 3. SQL 4. NoSQL 5. PostgreSQL 6. Considerações Finais Timbira - A empresa brasileira de PostgreSQL 32 / 34
  36. 36. Considerações Finais timbira • O PostgreSQL tem o melhor dos 2 mundos, mas ... • ... pense fora da ”caixinha” • ... ”nem todo problema é prego para precisar usar martelo” • ... quem sabe vc precisa é de persistência poliglota Timbira - A empresa brasileira de PostgreSQL 33 / 34
  37. 37. Perguntas timbira ? Fabrízio de Royes Mello @fabriziomello fabrizio@timbira.com.br fabriziomello@gmail.com http://www.timbira.com.br http://slideshare.net/fabriziomello Timbira - A empresa brasileira de PostgreSQL 34 / 34

×