SlideShare a Scribd company logo
1 of 38
Download to read offline
NoSQL + SQL = PostgreSQL
timbira
A empresa brasileira de PostgreSQL
DBA Brasil 1.0, São Paulo, 2016-04-16
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
Background timbira
Timbira - A empresa brasileira de PostgreSQL 3 / 34
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
Resumo timbira
..1 Teorema CAP
..2 SQL
..3 NoSQL
..4 PostgreSQL
..5 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 1 / 34
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
Teorema CAP timbira
Timbira - A empresa brasileira de PostgreSQL 3 / 34
Resumo timbira
..1 Teorema CAP
..2 SQL
..3 NoSQL
..4 PostgreSQL
..5 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 4 / 34
SQL timbira
• Structured Query Language
• Linguagem Declarativa
• DML, DDL, DCL
• Joins, Anti-Joins, Semi-Joins, ...
Timbira - A empresa brasileira de PostgreSQL 5 / 34
Resumo timbira
..1 Teorema CAP
..2 SQL
..3 NoSQL
..4 PostgreSQL
..5 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 6 / 34
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
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
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
NoSQL: ????? timbira
WTF, PostgreSQL em todas classificações NoSQL????
Timbira - A empresa brasileira de PostgreSQL 10 / 34
Resumo timbira
..1 Teorema CAP
..2 SQL
..3 NoSQL
..4 PostgreSQL
..5 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 11 / 34
PostgreSQL: O que é? timbira
The world’s most advanced open source database.
Timbira - A empresa brasileira de PostgreSQL 12 / 34
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
PostgreSQL 9.4 (JSONB) vs MongoDB timbira
Timbira - A empresa brasileira de PostgreSQL 29 / 34
PostgreSQL 9.4 (JSONB) vs MongoDB timbira
Timbira - A empresa brasileira de PostgreSQL 30 / 34
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
Resumo timbira
..1 Teorema CAP
..2 SQL
..3 NoSQL
..4 PostgreSQL
..5 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 32 / 34
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
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

More Related Content

Viewers also liked

Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de DadosFabrízio Mello
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Fabrízio Mello
 
GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015Fabrízio Mello
 
Como posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQLComo posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQLFabrízio Mello
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLFabrízio Mello
 
Tutorial Database Refactoring
Tutorial Database RefactoringTutorial Database Refactoring
Tutorial Database RefactoringFabrízio Mello
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)Fabrízio Mello
 
PROCERGS 2015-03-25: Bad Smells em Bancos de Dados
PROCERGS 2015-03-25: Bad Smells em Bancos de DadosPROCERGS 2015-03-25: Bad Smells em Bancos de Dados
PROCERGS 2015-03-25: Bad Smells em Bancos de DadosFabrízio Mello
 
GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015Fabrízio Mello
 
Sharing Code and Experiences
Sharing Code and ExperiencesSharing Code and Experiences
Sharing Code and ExperiencesFabrízio Mello
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Fabio Telles Rodriguez
 
Planejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLPlanejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLFabrízio Mello
 

Viewers also liked (14)

Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de Dados
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)
 
GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015
 
Dojo plpgsql
Dojo plpgsqlDojo plpgsql
Dojo plpgsql
 
Como posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQLComo posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQL
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQL
 
Tutorial Database Refactoring
Tutorial Database RefactoringTutorial Database Refactoring
Tutorial Database Refactoring
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
 
PROCERGS 2015-03-25: Bad Smells em Bancos de Dados
PROCERGS 2015-03-25: Bad Smells em Bancos de DadosPROCERGS 2015-03-25: Bad Smells em Bancos de Dados
PROCERGS 2015-03-25: Bad Smells em Bancos de Dados
 
GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015
 
Sharing Code and Experiences
Sharing Code and ExperiencesSharing Code and Experiences
Sharing Code and Experiences
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013
 
Planejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLPlanejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQL
 
Hadoop
HadoopHadoop
Hadoop
 

Similar to PostgreSQL: NoSQL + SQL

NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)Fabrízio Mello
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQLEuler Taveira
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosFabrízio Mello
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Matheus de Oliveira
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Euler Taveira
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLEuler Taveira
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
LabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dadosLabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dadosCarlos Santos
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 

Similar to PostgreSQL: NoSQL + SQL (20)

NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQL
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de Dados
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
KrahoDB
KrahoDBKrahoDB
KrahoDB
 
Pgquarrel
PgquarrelPgquarrel
Pgquarrel
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQL
 
Aprendendo R
Aprendendo RAprendendo R
Aprendendo R
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Introdução ao PostGIS
Introdução ao PostGISIntrodução ao PostGIS
Introdução ao PostGIS
 
LabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dadosLabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dados
 
FLISOL 2017 - SQL Server no Linux
FLISOL 2017 - SQL Server no LinuxFLISOL 2017 - SQL Server no Linux
FLISOL 2017 - SQL Server no Linux
 
Introdução BD
Introdução BDIntrodução BD
Introdução BD
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 

More from Fabrízio Mello

PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisFabrízio Mello
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...Fabrízio Mello
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...Fabrízio Mello
 
Software Delivery Like a Boss
Software Delivery Like a BossSoftware Delivery Like a Boss
Software Delivery Like a BossFabrízio Mello
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Fabrízio Mello
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Fabrízio Mello
 

More from Fabrízio Mello (9)

PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
 
Software Delivery Like a Boss
Software Delivery Like a BossSoftware Delivery Like a Boss
Software Delivery Like a Boss
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)
 

PostgreSQL: NoSQL + SQL

  • 1. NoSQL + SQL = PostgreSQL timbira A empresa brasileira de PostgreSQL DBA Brasil 1.0, São Paulo, 2016-04-16
  • 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. Background timbira Timbira - A empresa brasileira de PostgreSQL 3 / 34
  • 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. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 1 / 34
  • 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. Teorema CAP timbira Timbira - A empresa brasileira de PostgreSQL 3 / 34
  • 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. SQL timbira • Structured Query Language • Linguagem Declarativa • DML, DDL, DCL • Joins, Anti-Joins, Semi-Joins, ... Timbira - A empresa brasileira de PostgreSQL 5 / 34
  • 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. 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. 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. 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. NoSQL: ????? timbira WTF, PostgreSQL em todas classificações NoSQL???? Timbira - A empresa brasileira de PostgreSQL 10 / 34
  • 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. PostgreSQL: O que é? timbira The world’s most advanced open source database. Timbira - A empresa brasileira de PostgreSQL 12 / 34
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. PostgreSQL 9.4 (JSONB) vs MongoDB timbira Timbira - A empresa brasileira de PostgreSQL 29 / 34
  • 34. PostgreSQL 9.4 (JSONB) vs MongoDB timbira Timbira - A empresa brasileira de PostgreSQL 30 / 34
  • 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. Resumo timbira ..1 Teorema CAP ..2 SQL ..3 NoSQL ..4 PostgreSQL ..5 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 32 / 34
  • 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. 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