SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
NoSQL + SQL = PostgreSQL
timbira
A empresa brasileira de PostgreSQL
TDC2014, São Paulo, 2014-08-06
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
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 Prelúdio
..2 Teorema CAP
..3 SQL
..4 NoSQL
..5 PostgreSQL
..6 Considerações Finais
Timbira - A empresa brasileira de PostgreSQL 1 / 34
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 - 14 patches PostgreSQL (1 deles patrocinado) :-)
Timbira - A empresa brasileira de PostgreSQL 2 / 34
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
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
Teorema CAP timbira
Timbira - A empresa brasileira de PostgreSQL 5 / 34
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
SQL timbira
• Structured Query Language
• Linguagem Declarativa
• DML, DDL, DCL
• Joins, Anti-Joins, Semi-Joins, ...
Timbira - A empresa brasileira de PostgreSQL 7 / 34
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
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
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
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
NoSQL: ????? timbira
WTF, PostgreSQL em todas classificações NoSQL????
Timbira - A empresa brasileira de PostgreSQL 12 / 34
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
PostgreSQL: O que é? timbira
The world’s most advanced open source database.
Timbira - A empresa brasileira de PostgreSQL 14 / 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 15 / 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 Parallel Query??? BDR (Bi-directional
Replication)???
Timbira - A empresa brasileira de PostgreSQL 16 / 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 17 / 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 18 / 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 19 / 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 20 / 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 21 / 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 22 / 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 23 / 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 24 / 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 25 / 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 26 / 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)
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
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
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":"Hsi
"middleName":"Yi"},"emails":[{}],"photos":null,"_id":1}]}%
Timbira - A empresa brasileira de PostgreSQL 29 / 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)
• Full Text Search (text search dictionary, text search parser)
Timbira - A empresa brasileira de PostgreSQL 30 / 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
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
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

Mais conteúdo relacionado

Mais de Fabrízio Mello

Mais de Fabrízio Mello (20)

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
 
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
 
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...
 
GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016 GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016
 
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
 
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP) NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
 
Como posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQLComo posso colaborar com o PostgreSQL
Como posso colaborar com o PostgreSQL
 
Keep calm and Database Continuous Deployment
Keep calm and Database Continuous DeploymentKeep calm and Database Continuous Deployment
Keep calm and Database Continuous Deployment
 
GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015
 
GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015
 
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
 
Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de Dados
 
Tutorial Database Refactoring
Tutorial Database RefactoringTutorial Database Refactoring
Tutorial Database Refactoring
 
Sharing Code and Experiences
Sharing Code and ExperiencesSharing Code and Experiences
Sharing Code and Experiences
 
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)
 
Software Delivery Like a Boss
Software Delivery Like a BossSoftware Delivery Like a Boss
Software Delivery Like a Boss
 
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
 
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)
 
Dojo plpgsql
Dojo plpgsqlDojo plpgsql
Dojo plpgsql
 

NoSQL + SQL = PostgreSQL (TDC2014 - São Paulo/SP)

  • 1. NoSQL + SQL = PostgreSQL timbira A empresa brasileira de PostgreSQL TDC2014, São Paulo, 2014-08-06
  • 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. 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. 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. 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 - 14 patches PostgreSQL (1 deles patrocinado) :-) Timbira - A empresa brasileira de PostgreSQL 2 / 34
  • 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. 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. Teorema CAP timbira Timbira - A empresa brasileira de PostgreSQL 5 / 34
  • 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. SQL timbira • Structured Query Language • Linguagem Declarativa • DML, DDL, DCL • Joins, Anti-Joins, Semi-Joins, ... Timbira - A empresa brasileira de PostgreSQL 7 / 34
  • 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. 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. 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. 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. NoSQL: ????? timbira WTF, PostgreSQL em todas classificações NoSQL???? Timbira - A empresa brasileira de PostgreSQL 12 / 34
  • 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. PostgreSQL: O que é? timbira The world’s most advanced open source database. Timbira - A empresa brasileira de PostgreSQL 14 / 34
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 26 / 34
  • 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. 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. 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":"Hsi "middleName":"Yi"},"emails":[{}],"photos":null,"_id":1}]}% Timbira - A empresa brasileira de PostgreSQL 29 / 34
  • 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. 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. 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. 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. 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