PostgreSQL e porque você não precisa de NoSQL

59
PostgreSQL e porque vocˆ e n˜ ao precisa de NoSQL Matheus de Oliveira <[email protected]>

Transcript of PostgreSQL e porque você não precisa de NoSQL

Page 1: PostgreSQL e porque você não precisa de NoSQL

PostgreSQL e porque voce nao precisa de NoSQL

Matheus de Oliveira<[email protected]>

Page 2: PostgreSQL e porque você não precisa de NoSQL

Matheus de Oliveira<[email protected]>

DBA PostgreSQL – consultorias e suportes24x7/8x5

Instrutor dos treinamentos PostgreSQL

Concepcao, desenvolvimento e suporte aproducao

Page 3: PostgreSQL e porque você não precisa de NoSQL

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

Instrutor dos treinamentos PostgreSQL

Concepcao, desenvolvimento e suporte aproducao

Page 4: PostgreSQL e porque você não precisa de NoSQL

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/“Aprenda com quem faz na pratica”

Concepcao, desenvolvimento e suporte aproducao

Page 5: PostgreSQL e porque você não precisa de NoSQL

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/“Aprenda com quem faz na pratica”

SaaS para analise e monitoramento PostgreSQLhttp://www.pganalytics.com.br/

“Facilitando a vida do DBA”

Page 6: PostgreSQL e porque você não precisa de NoSQL

Para pensar...

A melhor solucao para o seu problema agora

VS

A melhor solucao de todas, a todo custo

3 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 7: PostgreSQL e porque você não precisa de NoSQL

Para pensar...

A melhor solucao para o seu problema agora

VS

A melhor solucao de todas, a todo custo

3 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 8: PostgreSQL e porque você não precisa de NoSQL

Para pensar...

Cuidado com o que voce pensa ser “moderno”.Armazenamentos chave/valor e documentos datam de antes das

teorias de bancos relacionais.

A teoria relacional e baseada numa forte e solida estrutura, erevolucionou o armazenamento de processamento de dados. Abrir

mao disso por completo e regredir.

4 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 9: PostgreSQL e porque você não precisa de NoSQL

Bancos de dados relacionais e NoSQLsBancos relacionais:• Baseados no modelo relacional

• Transacoes ACID◦ Atomicidade◦ Consistencia◦ Isolamento◦ Durabilidade

• Interface de consulta padrao –SQL

• Armazenamento em relacoes –estrutura acoplada

• ...

Bancos NoSQL:

• Transacoes BASE:◦ Basic Availability◦ Soft-state◦ Eventual consistency

• Interface de consulta propria

• Schemaless:◦ Chave-Valor◦ Documento◦ Grafos◦ ...

• Performance como prioridade◦ In-place update◦ Operacoes assıncronas◦ ...

5 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 10: PostgreSQL e porque você não precisa de NoSQL

PostgreSQL“one database to rule them all”

• FOSS – Free OpenSource Software

• Quase 30 anos deexperiencia

• Robustez, confiabilidade,maturidade

• Diversas funcionalidades,e novas a cada versao

• Forte extensibilidade

6 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 11: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

chave/valor

Page 12: PostgreSQL e porque você não precisa de NoSQL

hstore – Armazenamento chave/valor

• Presente como uma contrib do PostgreSQL desde a versao 8.3(2008)

• Armazenamento de chaves/valores como atributo (coluna) de umatabela

• Diversos operadores para manipulacao, navegacao e filtragem(busca)

• Indexacao B-tree, GIN e GIST

• Exemplo:

SELECT * FROM moviesWHERE ( moviedata ->’ imdb_rate ’):: int > 4AND moviedata ->’ alternate_title ’ = ’Black

Mask ’;

8 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 13: PostgreSQL e porque você não precisa de NoSQL

hstore – Armazenamento chave/valor

Limitacoes:

• Aceita apenas texto, tanto para chave quanto para valor

• Nao aceita valores aninhados (hstore de hstore)

Alternativas NoSQL:

• Redis

• Riak

• MemcacheDB

• Berkeley DB

• Dynamo

• ...

9 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 14: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

documentos JSON

Page 15: PostgreSQL e porque você não precisa de NoSQL

JSON

• 2012 – versao 9.2 – tipo json, basicamente text com validacoes

• 2013 – versao 9.3 – ainda json, mas com funcoes fantasticas (agrande adocao comeca)

• 2014 – versao 9.4 (hoje em beta2) – tipo jsonb, binario(estrutura interna baseada no hstore), indexacao GIN –ultra-blaster-rapido

11 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 16: PostgreSQL e porque você não precisa de NoSQL

JSON

CREATE TABLE booksdata (title text PRIMARY KEY ,booksdata jsonb

);

12 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 17: PostgreSQL e porque você não precisa de NoSQL

JSON

SELECT title ,bookdata ->> ’ current_edition ’ AS edition ,bookdata #> ’{" publication_info ", 0, " isbn "} ’

AS isbnFROM booksdataWHERE bookdata @> ’{ " publication_info " : [{"

publisher ": " Avon "} ] }’:: jsonbORDER BY bookdata #> ’{" publication_info ", 0, "

price "} ’ DESC ;

13 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 18: PostgreSQL e porque você não precisa de NoSQL

JSON

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

14 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 19: PostgreSQL e porque você não precisa de NoSQL

JSON

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

14 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 20: PostgreSQL e porque você não precisa de NoSQL

JSON

Ah!!! E eu comentei que e indexado?

DE VERDADE

CREATE INDEX booksdata_json_idx ON booksdataUSING GIN ( booksdata );

GIN to the rescue!!!

14 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 21: PostgreSQL e porque você não precisa de NoSQL

JSON

Limitacoes:

• O tipo json e armazenado em texto e possui fraca indexacao,mas sua evolucao, o tipo jsonb e armazenado em binario

• Diferente do json, o jsonb possui as limitacoes:◦ nao armazena a ordem original das chaves (elas sempre serao

mostradas em ordem lexicografica)◦ nao aceita chaves repetidas◦ (basicamente json armazena exatamente como voce passa, mas

jsonb faz um processamento extra)

Eu diria que hoje, o PostgreSQL possui o mais avancado mecanismode indexacao para JSON (jsonb) dos bancos de dados open

sources (de todos? provavelmente)

15 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 22: PostgreSQL e porque você não precisa de NoSQL

JSON

Alguns NoSQLs orientado a documentos:

• MongoDB

• CouchDB

• Cassandra

• SimpleDB

• ...

16 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 23: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

Full Text Search

Page 24: PostgreSQL e porque você não precisa de NoSQL

Full Text Search

• FTS nativo no PostgreSQL (tsvector, tsquery, ...)

SELECT * FROM articles t( fts )WHERE fts @@ tsquery ’ PostgreSQL & NewSQL ’ORDER BY ts_rank (fts , tsquery ’ PostgreSQL &

NewSQL ’);

• Busca por similaridade (contrib pg trgm)

SELECT set_limit (0.2) ;SELECT *, title <-> ’ NewSQL ’ AS sml

FROM articlesWHERE title % ’ NewSQL ’ORDER BY sml DESC LIMIT 10;

• Claro, tudo devidamente indexado... GIN and GIST rocks

18 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 25: PostgreSQL e porque você não precisa de NoSQL

Full Text Search

• FTS nativo no PostgreSQL (tsvector, tsquery, ...)

SELECT * FROM articles t( fts )WHERE fts @@ tsquery ’ PostgreSQL & NewSQL ’ORDER BY ts_rank (fts , tsquery ’ PostgreSQL &

NewSQL ’);

• Busca por similaridade (contrib pg trgm)

SELECT set_limit (0.2) ;SELECT *, title <-> ’ NewSQL ’ AS sml

FROM articlesWHERE title % ’ NewSQL ’ORDER BY sml DESC LIMIT 10;

• Claro, tudo devidamente indexado... GIN and GIST rocks

18 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 26: PostgreSQL e porque você não precisa de NoSQL

Full Text Search

Limitacoes:

• Nao processa documentos como PDF, DOC, etc.

• Ate a versao 9.4 performance mais baixa para algumas operacoes(como ordenacao por maior similaridade) – GIN evoluiu na versao9.4

Alguns NoSQLs com FTS:

• Solr

• Lucene

• Elastic Search

• Sphinx

• e tambem MySQL

19 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 27: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

grafos ehierarquias

Page 28: PostgreSQL e porque você não precisa de NoSQL

Consultas em grafos e hierarquias

• Pode ser facilmente realizada utilizando consultas recursivas• O desempenho depende do filtro e profundidade da navegacao• Exemplo, catalogo de roles (usuarios/grupos) do PostgreSQL:

WITH RECURSIVE roles AS (SELECT r. oid AS roleid , r. rolname ,

1 AS level , array [r. rolname ] AS pathFROM pg_authid rWHERE r. oid NOT IN (

SELECT m. member FROM pg_auth_members m)UNION ALLSELECT r.oid , r. rolname ,

p. level + 1, p. path || r. rolnameFROM pg_auth_members mINNER JOIN pg_authid r ON m. member = r. oidINNER JOIN roles p ON m. roleid = p. roleid

)SELECT repeat (’|__ ’, level -1) || rolnameFROM rolesORDER BY path ;

21 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 29: PostgreSQL e porque você não precisa de NoSQL

Consultas em grafos e hierarquias

Resultado:

administrativo| __comercial|__| __carla|__| __maria| __financeiro|__| __ana|__| __pauloti| __beatriz| __julio| __matheus

...

22 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 30: PostgreSQL e porque você não precisa de NoSQL

Consultas em grafos e hierarquias

Limitacoes:

• Um pouco complexo, mas voce acostuma

• Performance dependente principalmente da altura

• Nao muito bem preparado para busca em espacos de buscasgrandes ou estruturas de grafos complexas

Bancos NoSQL orientados a grafos:

• Neo4j

• OrientDB

• ...

23 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 31: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

operacoesassıncronas

Page 32: PostgreSQL e porque você não precisa de NoSQL

Operacoes assıncronas

• Quando nao precisamos garantir durabilidade em tempo real:◦ Habilite o parametro synchronous commit:

SET synchronous_commit TO off ;

• Para dados transientes:◦ UNLOGGED TABLES

• Quando precisamos de operacoes nao bloqueantes:◦ PQsendQuery, PQsendPrepare, PQconsumeInput,

PQisBusy, ...• Processamento de mensagens:

◦ Sincronia pode ser atingida com auxılio de advisory locks◦ Troca de mensagens (ativacao, pull/push, sender/receiver, etc.) com

LISTEN/NOTIFY

25 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 33: PostgreSQL e porque você não precisa de NoSQL

Exemplo de fila

Ideia:

• Processos a executar sao guardados numa tabela:

CREATE TABLE queue (id serial , processed booleandefault false , ... , job jsonb );

• Para inserir um job para execucao:

BEGIN ;INSERT INTO queue ( job )VALUES (’{" jobName ": " foo ", ...} ’);NOTIFY jobexecutor ;COMMIT ; /* NOTIFY dispara somente depois */

• job executors ficam aguardando processos a executar:

LISTEN jobexecutor ;

e buscam trabalhos da fila...26 / 48

PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 34: PostgreSQL e porque você não precisa de NoSQL

Exemplo de fila – job executor

1 UPDATE queue2 SET processed = true3 WHERE NOT processed AND id IN (4 SELECT id FROM (5 SELECT id FROM queue6 WHERE NOT processed7 ORDER BY id8 LIMIT 1009 ) t

10 WHERE11 pg_try_advisory_xact_lock (12 tableoid :: int , id)13 ORDER BY id14 LIMIT 115 )16 RETURNING job ;

27 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 35: PostgreSQL e porque você não precisa de NoSQL

Exemplo de fila – job executor

1 UPDATE queue2 SET processed = true3 WHERE NOT processed AND id IN (4 SELECT id FROM (

6 SELECT id FROM queue7 WHERE NOT processed8 ORDER BY id9 LIMIT 100

10 ) t11 WHERE12 pg_try_advisory_xact_lock (13 tableoid :: int , id)14 ORDER BY id15 LIMIT 1

16 )17 RETURNING job ;28 / 48

PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 36: PostgreSQL e porque você não precisa de NoSQL

Exemplo de fila – job executor

1 UPDATE queue2 SET processed = true3 WHERE NOT processed AND id IN (4 SELECT id FROM (

6 SELECT id FROM queue7 WHERE NOT processed8 ORDER BY id9 LIMIT 100

10 ) t11 WHERE12 pg_try_advisory_xact_lock (13 tableoid :: int , id)14 ORDER BY id15 LIMIT 1

16 )17 RETURNING job ;29 / 48

PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 37: PostgreSQL e porque você não precisa de NoSQL

Exemplo de fila – job executor

1 UPDATE queue2 SET processed = true3 WHERE NOT processed AND id IN (4 SELECT id FROM (

6 SELECT id FROM queue7 WHERE NOT processed8 ORDER BY id9 LIMIT 100

10 ) t11 WHERE12 pg_try_advisory_xact_lock (13 tableoid :: int , id)14 ORDER BY id15 LIMIT 1

16 )17 RETURNING job ;30 / 48

PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 38: PostgreSQL e porque você não precisa de NoSQL

Fila

Limitacoes:

• Uso de funcoes nao especıficas de SQL

• Um pouco complicadinho, nao acham?

Outras opcoes (nao so NoSQL):

• pgq – fila alta performance em PostgreSQL

• RabbitMQ

• ActiveMQ

• MongoDB (tailable cursors)

• ...

31 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 39: PostgreSQL e porque você não precisa de NoSQL

Voce nao precisa de NoSQLpara:

atualizacoesrapidas

Page 40: PostgreSQL e porque você não precisa de NoSQL

Usando ACID em alta concorrencia

• PostgreSQL e 100% ACID compilante

• Isso nos traz um poderoso controle de transacoes

• Mas... Para ter transacao, precisamos de bloqueios, maisconhecido como locks

33 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 41: PostgreSQL e porque você não precisa de NoSQL

Usando ACID em alta concorrencia

• No PostgreSQL locks sao podem ser:

◦ de varios modos – compartilhados, exclusivo, acesso exclusivo, etc.◦ definidos pelo usuario – advisory locks◦ em varios nıveis – tuplas, paginas, tabelas, etc.

• Sao essenciais (acredite, nao vai querer abrir mao disto)

• Mas... Muitas vezes precisamos ter um certo trabalho para reduziro numero ou tempo de bloqueios

34 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 42: PostgreSQL e porque você não precisa de NoSQL

Usando ACID em alta concorrencia

Regra no PostgreSQL: escritores nunca bloqueiam leitores e leitoresnunca bloqueiam escritores nem outros leitores (mas escritores

bloqueiam escritores)

35 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 43: PostgreSQL e porque você não precisa de NoSQL

Exemplo...

• Vamos supor contagem de numero de acessos a uma pagina, ondeprecisamos dessa informacao precisa e facil de consultar.

• Logo nos vem a cabeca:

UPDATE page_infoSET access_count = access_count + 1WHERE url = : url ;

• Para consultar, basta:

SELECT access_countFROM page_infoWHERE url = : url ;

36 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 44: PostgreSQL e porque você não precisa de NoSQL

Exemplo...

UPDATE page_infoSET access_count = access_count + 1WHERE url = : url ;

Alguem ve o problema no cara acima?

Cada transacao concorrente executando esta operacao ficarabloqueada, ou seja, apenas uma pessoa pode executar este comando

por vez (por url).

37 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 45: PostgreSQL e porque você não precisa de NoSQL

Exemplo...

UPDATE page_infoSET access_count = access_count + 1WHERE url = : url ;

Alguem ve o problema no cara acima?

Cada transacao concorrente executando esta operacao ficarabloqueada, ou seja, apenas uma pessoa pode executar este comando

por vez (por url).

37 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 46: PostgreSQL e porque você não precisa de NoSQL

Solucao...

1. Ao inves de atualizar, vamos inserir:

INSERT INTO page_access (url , access_count )VALUES (: url , 1);

2. Para consultar usamos um agregador:

SELECT sum ( access_count )FROM page_accessWHERE url = : url ;

3. E claro, agora trocamos um UPDATE bloqueante por um SELECTpotencialmente lento.Calma... Calma... Tem solucao!

38 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 47: PostgreSQL e porque você não precisa de NoSQL

Solucao...

Para resolver o problema da consulta ficar lenta, devemos de temposem tempos agrupar os registros da tabela

WITH old_itens AS (DELETE FROM page_accessRETURNING url , access_count

)INSERT INTO page_access (url , access_count )SELECT url , sum ( access_count )FROM old_itensGROUP BY url ;

Esta operacao e completamente nao bloqueante! Enquanto estasendo executada os INSERTs continuam e os SELECTs tambem.

39 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 48: PostgreSQL e porque você não precisa de NoSQL

Solucao...

Para resolver o problema da consulta ficar lenta, devemos de temposem tempos agrupar os registros da tabela

WITH old_itens AS (DELETE FROM page_accessRETURNING url , access_count

)INSERT INTO page_access (url , access_count )SELECT url , sum ( access_count )FROM old_itensGROUP BY url ;

BTW, o comando WITH la em cima e conhecido como CTE(Common Table Expressions), e e de grande utilidade. #ficaadica

39 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 49: PostgreSQL e porque você não precisa de NoSQL

Solucao...

Para resolver o problema da consulta ficar lenta, devemos de temposem tempos agrupar os registros da tabela

WITH old_itens AS (DELETE FROM page_accessRETURNING url , access_count

)INSERT INTO page_access (url , access_count )SELECT url , sum ( access_count )FROM old_itensGROUP BY url ;

Por fim, adicione um ındice em url e seja feliz: #ficaadica2CREATE INDEX ON page access count (url);

39 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 50: PostgreSQL e porque você não precisa de NoSQL

...

Page 51: PostgreSQL e porque você não precisa de NoSQL

Performance

O PostgreSQL e, sem duvidas, um dos bancos de dados com melhoresdesempenhos num unico no. Devemos sempre olhar para:

• ajuste (tuning) de parametros de configuracao;

• indexacao;

• modelo de dados (normalizar ou desnormalizar);

• tarefas administrativas;

• estatısticas atualizadas;

• ... busque por ”PostgreSQL Performance Tuning”...

41 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 52: PostgreSQL e porque você não precisa de NoSQL

Performance

E quando precisamos de mais:

• columnar store (extensoes para o PostgreSQL cstore fdw 1 eIn-Memory Columnar Store (ICMS) 2);

• particionamento de tabelas;

• divisao de tablespaces;

42 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 53: PostgreSQL e porque você não precisa de NoSQL

Performance

Escalabilidade horizontal:

• replicacao:◦ replicacao nativa com slave disponıvel para consulta (balanceamento

de carga para consultas);◦ replicacao multi-master com ferramentas externas: Bucardo e BDR (a

grande promessa para a versao 9.4).

• tecnicas de sharding e/ou processamento de consulta em paralelo:◦ divisao de processos em conexoes;◦ sharding via aplicacao;◦ sharding via postgres fdw 3.

1http://citusdata.github.io/cstore_fdw/2http://www.garret.ru/imcs/user_guide.html3http:

//www.infoq.com/br/presentations/postgresql-com-newsql

43 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 54: PostgreSQL e porque você não precisa de NoSQL

E quando o PostgreSQL naoresolve meu problema?

• Primeiro, tem certeza que nao?

• Absoluta?

44 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 55: PostgreSQL e porque você não precisa de NoSQL

E quando o PostgreSQL naoresolve meu problema?

• Primeiro, tem certeza que nao?

• Absoluta?

44 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 56: PostgreSQL e porque você não precisa de NoSQL

E quando o PostgreSQL naoresolve meu problema?

• Ok, acontece...

◦ sobrecarga de operacoes e do MVCC pode gerar gargalos;◦ sem processamento paralelo ou sharding nativo (apenas o “faca voce

mesmo”);◦ falta de funcionalidades frente a banco de dados especializados,

exemplos:

• estruturas de grafos sao melhores tratadas em especializados comoNeo4j do que com consultas recursivas;

• FTS do PostgreSQL comparado a outros como Lucene ou Sphinx aindaperde em funcionalidades.

45 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 57: PostgreSQL e porque você não precisa de NoSQL

E quando o PostgreSQL naoresolve meu problema?

• Mas tudo bem usar outro. Se quiser associar, varios Foreign DataWrappers (FDW) estao disponıveis (redis fdw, mongo fdw,...) para mapear dados externos dentro de tabelas no PostgreSQL;

46 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 58: PostgreSQL e porque você não precisa de NoSQL

E quando o PostgreSQL naoresolve meu problema?

• DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se oprojeto crescer fora de escala que o PG suporte, busque outrasalternativas. E muito comum utilizar bancos NoSQL junto combancos relacionais (nao e escolha unica). Existem muitos bancosMPP (Massive Parallel Processing) e (100%) NewSQL baseadosno PostgreSQL.

◦ comerciais: Greenplun, Amazon Redshift, Aster Data, Netezza,Vertica, entre outros;

◦ e as promessas open source: Postgres-XC e Postgres-XL.

47 / 48PostgreSQL e porque voce nao precisa de NoSQL – Matheus de Oliveira – QCon RJ 2014

Page 59: PostgreSQL e porque você não precisa de NoSQL

Obrigado!

Duvidas?

Matheus de Oliveira<[email protected]>

IRC – irc.freenode.net:/join #postgresql,#postgresql-br,#dextra

Meu nick: MatheusOl

Twitter: @matioli matheusLinkedIn: br.linkedin.com/in/matheusdeoliveira/

SlideShare: slideshare.net/matheus de oliveira