NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

41
NoSQL + SQL = PostgreSQL timbira A empresa brasileira de PostgreSQL TDC2014, Porto Alegre, 2014-10-17

description

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.

Transcript of NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

Page 1: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

NoSQL + SQL = PostgreSQL

timbiraA empresa brasileira de PostgreSQL

TDC2014, Porto Alegre, 2014-10-17

Page 2: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 3: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 CommonsAtribuição 3.0 Brasil:http://www.creativecommons.org/licenses/by/3.0/br

• Embora este material tenha sido elaborado com todaprecaução, os autores não assumem quaisquerresponsabilidades por erros, omissões ou danos resultantes dautilização das informações aqui contidas.

• Se você encontrar qualquer erro, por favor reporte-o [email protected]

Page 4: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 5: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 - 21 patches PostgreSQL (2 patrocinados) :-)

Timbira - A empresa brasileira de PostgreSQL 2 / 38

Page 6: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 7: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

Teorema CAP timbira

Em Ciências da Computação, o teorema CAP, também conhecidocomo Teorema de Brewer, afirma que é impossível para um sistemade computador distribuído fornecer simultaneamente todas as trêsdas seguintes garantias:

• Consistência (Consistency): todos nós enxergam os mesmosdados ao mesmo tempo;

• Disponibilidade (Availability): garantia que todas requisiçõesrecebem uma resposta de falha ou sucesso;

• Tolerância a Particionamento (Partition Tolerance): osistema continua operando apesar de perda de mensagem oufalha em parte dele;

Timbira - A empresa brasileira de PostgreSQL 4 / 38

Page 8: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

Teorema CAP timbira

Timbira - A empresa brasileira de PostgreSQL 5 / 38

Page 9: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 10: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

SQL timbira

• Structured Query Language• Linguagem Declarativa• DML, DDL, DCL• Joins, Anti-Joins, Semi-Joins, ...

Timbira - A empresa brasileira de PostgreSQL 7 / 38

Page 11: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 12: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

NoSQL timbira

”Um banco de dados NoSQL ou Not Only SQL fornece ummecanismo para armazenamento e recuperação de dados que sãomodelados de forma diferente das relações (tabular) dos bancos dedados relacionais.Motivações para essa abordagem incluem: design simples,escalabilidade horizontal e controle mais fino sobredisponibilidade.” (Wikipedia)

Timbira - A empresa brasileira de PostgreSQL 9 / 38

Page 13: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

NoSQL: História timbira

• introduzido em 1998 por Carlos Strozzi como nome de umbanco de dados que não tinha interface SQL

• re-introduzido em 2009 por Eric Evans (Rackspace) quandoJohan Oskarsson (Last.fm) queria organizar um evento sobrebancos de dados open-source distribuidos

Timbira - A empresa brasileira de PostgreSQL 10 / 38

Page 14: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 15: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

NoSQL: ????? timbira

WTF, PostgreSQL em todas classificações NoSQL????

Timbira - A empresa brasileira de PostgreSQL 12 / 38

Page 16: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 17: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: O que é? timbira

The world’s most advanced open source database.

Timbira - A empresa brasileira de PostgreSQL 14 / 38

Page 18: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 BITimbira - A empresa brasileira de PostgreSQL 15 / 38

Page 19: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 20: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 INTOusers (email, data)

VALUES('[email protected]','sex=>"M",birthdate=>"1979-08-08"'),('[email protected]','sex=>"M",state=>"SP"');

Timbira - A empresa brasileira de PostgreSQL 17 / 38

Page 21: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: Key/Value Database timbira

SELECT * FROM users;email | data

-------------------------+---------------------------------------fabriziomello@gmail.com | "sex"=>"M", "birthdate"=>"1979-08-08"[email protected] | "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 / 38

Page 22: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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"=>"[email protected]""data"=>"\"sex\"=>\"M\", \"state\"=>\"SP\"",

"email"=>"[email protected]"(2 rows)

Timbira - A empresa brasileira de PostgreSQL 19 / 38

Page 23: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 24: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 INTOusers (email, data)

VALUES('[email protected]','{"sex":"M", "birthdate": "1979-08-08"}'),('[email protected]','{"sex":"M", "state":"SP"}');

Timbira - A empresa brasileira de PostgreSQL 21 / 38

Page 25: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: Document Database timbira

SELECT * FROM users;email | data

-------------------------+----------------------------------------fabriziomello@gmail.com | {"sex":"M", "birthdate": "1979-08-08"}[email protected] | {"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 / 38

Page 26: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: Document Database timbira

Conseguimos transformar uma tupla inteira emJSON/JSONB ;-)

SELECT row_to_json(users.*) FROM users;row_to_json

-----------------------------------------------------{"email":"[email protected]",

"data":{"sex":"M", "birthdate": "1979-08-08"}}{"email":"[email protected]",

"data":{"sex":"M", "state":"SP"}}(2 rows)

Timbira - A empresa brasileira de PostgreSQL 23 / 38

Page 27: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 28: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 29: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: Graph Database timbiraExemplo sequencia fibonacciWITH RECURSIVE fibonacci(i, j) AS (SELECT 0, 1UNION ALLSELECT GREATEST(i, j), (i + j) AS iFROM fibonacciWHERE j < 13

)SELECT i FROM fibonacci;i---0112358(7 rows)

Timbira - A empresa brasileira de PostgreSQL 26 / 38

Page 30: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 domongo (https://github.com/umitanuki/mongres)

Timbira - A empresa brasileira de PostgreSQL 27 / 38

Page 31: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 32: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL: PgREST timbira

Exemplo(http://hychen.wuweig.org/blog/2013/08/11/pgrest-howto/)

$ pgrest --db tcp://postgres@localhost/mydbAvailable collections:users bookmarks webpages news tags inboxServing `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 / 38

Page 33: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 34: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 / 38

Page 35: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 32 / 38

Page 36: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL 9.4 (JSONB) vs MongoDB timbira

Timbira - A empresa brasileira de PostgreSQL 33 / 38

Page 37: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

PostgreSQL 9.4 (JSONB) vs MongoDB timbira

Timbira - A empresa brasileira de PostgreSQL 34 / 38

Page 38: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 emhttp://bit.ly/1t2jG1r

Timbira - A empresa brasileira de PostgreSQL 35 / 38

Page 39: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

Resumo timbira

..1 Prelúdio

..2 Teorema CAP

..3 SQL

..4 NoSQL

..5 PostgreSQL

..6 Considerações Finais

Timbira - A empresa brasileira de PostgreSQL 36 / 38

Page 40: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

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 37 / 38

Page 41: NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)

Perguntas timbira

?

Fabrízio de Royes Mello@fabriziomello

[email protected]@gmail.com

http://www.timbira.com.brhttp://slideshare.net/fabriziomello

Timbira - A empresa brasileira de PostgreSQL 38 / 38