NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)

246 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
246
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)

  1. 1. NoSQL + SQL = PostgreSQL timbira A empresa brasileira de PostgreSQL DBA Brasil 1.0, São Paulo, 2016-04-16
  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. Background timbira Timbira - A empresa brasileira de PostgreSQL 3 / 34
  4. 4. 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
  5. 5. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 1 / 34
  6. 6. 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 2 / 34
  7. 7. Teorema CAP timbira Timbira - A empresa brasileira de PostgreSQL 3 / 34
  8. 8. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 4 / 34
  9. 9. SQL timbira • Structured Query Language • Linguagem Declarativa • DML, DDL, DCL • Joins, Anti-Joins, Semi-Joins, ... Timbira - A empresa brasileira de PostgreSQL 5 / 34
  10. 10. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 6 / 34
  11. 11. 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 7 / 34
  12. 12. 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 8 / 34
  13. 13. 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 9 / 34
  14. 14. NoSQL: ????? timbira WTF, PostgreSQL em todas classificações NoSQL???? Timbira - A empresa brasileira de PostgreSQL 10 / 34
  15. 15. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 11 / 34
  16. 16. PostgreSQL: O que é? timbira The world’s most advanced open source database. Timbira - A empresa brasileira de PostgreSQL 12 / 34
  17. 17. 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 13 / 34
  18. 18. 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 UPSERT, RLS, BRIN, GROUPING SETS/ROLLUP, ALTER TABLE SET LOGGED/UNLOGGED • 2016 : versão 9.6 Parallel SeqScan e Aggregate, Custom Access Method, and more... Timbira - A empresa brasileira de PostgreSQL 14 / 34
  19. 19. 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 15 / 34
  20. 20. 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 16 / 34
  21. 21. 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 17 / 34
  22. 22. 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 18 / 34
  23. 23. 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 19 / 34
  24. 24. 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 20 / 34
  25. 25. 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 21 / 34
  26. 26. 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 22 / 34
  27. 27. 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 23 / 34
  28. 28. 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 --- 0 1 1 2 3 5 8 (7 rows) Timbira - A empresa brasileira de PostgreSQL 24 / 34
  29. 29. 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) • PgREST - API REST (http://pgre.st) • PostgREST - API REST (http://postgrest.com) • ToroDB - MongoDB compatible on Top of PostgreSQL (http://www.torodb.com) 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 25 / 34
  30. 30. 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) • Custom Access Methods • Logical Decoding Timbira - A empresa brasileira de PostgreSQL 26 / 34
  31. 31. PostgreSQL: Escalabilidade Horizontal timbira • PL/Proxy - https://wiki.postgresql.org/wiki/PL/Proxy • Postgres-XL - http://www.postgres-xl.org • BDR (Bidirectional Replication) - http://wiki.postgresql.org/wiki/BDR_Project • CitusData - https://github.com/citusdata/citus, https://www.citusdata.com • Custom - i.e. Instagram (http://media.postgresql.org/sfpug/instagram_sfpug.pdf) Timbira - A empresa brasileira de PostgreSQL 27 / 34
  32. 32. PostgreSQL: Consistência Eventual timbira • Via UNLOGGED TABLES • Escrita extremamente rápida • Não geram registros no WAL (Write Ahead Log) • Não são crash-safe, seu conteúdo é zerado após um crash • Seu conteúdo não é replicado via Streaming Replication Timbira - A empresa brasileira de PostgreSQL 28 / 34
  33. 33. PostgreSQL 9.4 (JSONB) vs MongoDB timbira Timbira - A empresa brasileira de PostgreSQL 29 / 34
  34. 34. PostgreSQL 9.4 (JSONB) vs MongoDB timbira Timbira - A empresa brasileira de PostgreSQL 30 / 34
  35. 35. PostgreSQL 9.4 (JSONB) vs MongoDB timbira • Benchmark desenvolvido e executado pela EnterpriseDB (www.enterprisedb.com.br) • Scripts disponíveis em https: //github.com/EnterpriseDB/pg_nosql_benchmark • Post com mais detalhes publicado em http://bit.ly/1t2jG1r Timbira - A empresa brasileira de PostgreSQL 31 / 34
  36. 36. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 32 / 34
  37. 37. 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
  38. 38. 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

×