PostgreSQL, porque você não precisa de NoSQL

6.221 visualizações

Publicada em

Apresentação realizada no QCon Rio de Janeiro 2014.

Análise de razões que levam pessoas à adoção de bancos de dados NoSQL e ver o porquê em muitos casos não é necessário um NoSQL – ou pior, não deveria ter sido usado um. Quando usar? Quando não usar? Qual usar, ou não usar? São dúvidas que tentaremos esclarecer, com enfoque no que o PostgreSQL resolve.

Analisaremos a utilização de características especiais do PostgreSQL, como documentos chave-valor e JSON e full-text search, além dos erros mais comuns cometidos no PostgreSQL pela falta de familiaridade com o banco.

Serão ainda discutidas soluções para problemas de performance, controle de concorrência, consistência e durabilidade – e falaremos um pouco sobre escalabilidade e o que se espera nas versões em desenvolvimento do PostgreSQL.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

PostgreSQL, porque você não precisa de NoSQL

  1. 1. PostgreSQL e porque voc^e n~ao precisa de NoSQL Matheus de Oliveira <matheus.oliveira@dextra.com.br>
  2. 2. Matheus de Oliveira <matheus.oliveira@dextra.com.br> DBA PostgreSQL { consultorias e suportes 24x7/8x5 Instrutor dos treinamentos PostgreSQL Concepc~ao, desenvolvimento e suporte a produc~ao
  3. 3. Matheus de Oliveira matheus.oliveira@dextra.com.br Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ Crafting Software, Transforming Business Instrutor dos treinamentos PostgreSQL Concepc~ao, desenvolvimento e suporte a produc~ao
  4. 4. Matheus de Oliveira matheus.oliveira@dextra.com.br Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ Crafting Software, Transforming Business 10 anos e mais de 10 mil pro
  5. 5. ssionais capacitados em todo o Brasil. http://www.dextraining.com.br/ Aprenda com quem faz na pratica Concepc~ao, desenvolvimento e suporte a produc~ao
  6. 6. Matheus de Oliveira matheus.oliveira@dextra.com.br Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ Crafting Software, Transforming Business 10 anos e mais de 10 mil pro
  7. 7. ssionais capacitados em todo o Brasil. http://www.dextraining.com.br/ Aprenda com quem faz na pratica SaaS para analise e monitoramento PostgreSQL http://www.pganalytics.com.br/ Facilitando a vida do DBA
  8. 8. Para pensar... A melhor soluc~ao para o seu problema agora VS A melhor soluc~ao de todas, a todo custo 3 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  9. 9. Para pensar... A melhor soluc~ao para o seu problema agora VS A melhor soluc~ao de todas, a todo custo 3 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  10. 10. Para pensar... Cuidado com o que voc^e pensa ser moderno. Armazenamentos chave/valor e documentos datam de antes das teorias de bancos relacionais. 4 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  11. 11. Bancos de dados relacionais e NoSQLs Bancos relacionais: Baseados no modelo relacional Transac~oes ACID Atomicidade Consist^encia Isolamento Durabilidade Interface de consulta padr~ao { SQL Armazenamento em relac~oes { estrutura acoplada ... Bancos NoSQL: Transac~oes BASE: Basic Availability Soft-state Eventual consistency Interface de consulta propria Schemaless: Chave-Valor Documento Grafos ... Performance como prioridade In-place update Operac~oes assncronas ... 5 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  12. 12. PostgreSQL one database to rule them all FOSS { Free Open Source Software Quase 30 anos de experi^encia Robustez, con
  13. 13. abilidade, maturidade Diversas funcionalidades, e novas a cada vers~ao Forte extensibilidade 6 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  14. 14. Voc^e n~ao precisa de NoSQL para: chave/valor
  15. 15. hstore { Armazenamento chave/valor Presente como uma contrib do PostgreSQL desde a vers~ao 8.3 (2008) Armazenamento de chaves/valores como atributo (coluna) de uma tabela Diversos operadores para manipulac~ao, navegac~ao e
  16. 16. ltragem (busca) Indexac~ao B-tree, GIN e GIST Exemplo: SELECT * FROM movies WHERE ( moviedata -’imdb_rate ’):: int 4 AND moviedata -’ alternate_title ’ = ’Black Mask ’; 8 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  17. 17. hstore { Armazenamento chave/valor Limitac~oes: Aceita apenas texto, tanto para chave quanto para valor N~ao aceita valores aninhados (hstore de hstore) Alternativas NoSQL: Redis Riak MemcacheDB Berkeley DB Dynamo ... 9 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  18. 18. Voc^e n~ao precisa de NoSQL para: documentos JSON
  19. 19. JSON 2012 { vers~ao 9.2 { tipo json, basicamente text com validac~oes 2013 { vers~ao 9.3 { ainda json, mas com func~oes fantasticas (a grande adoc~ao comeca) 2014 { vers~ao 9.4 (lancamento ainda este m^es) { tipo jsonb, binario (estrutura interna baseada no hstore), indexac~ao GIN { ultra-blaster-rapido 11 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  20. 20. JSON CREATE TABLE booksdata ( title text PRIMARY KEY , booksdata jsonb ); 12 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  21. 21. JSON SELECT title , bookdata - ’ current_edition ’ AS edition , bookdata # ’{ publication_info , 0, isbn } ’ AS isbn FROM booksdata WHERE bookdata @ ’{ publication_info : [{ publisher : Avon } ] }’:: jsonb ORDER BY bookdata # ’{ publication_info , 0, price } ’ DESC ; 13 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  22. 22. JSON Ah!!! E eu comentei que e indexado? 14 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  23. 23. JSON Ah!!! E eu comentei que e indexado? DE VERDADE CREATE INDEX booksdata_json_idx ON booksdata USING GIN ( booksdata ); 14 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  24. 24. JSON Ah!!! E eu comentei que e indexado? DE VERDADE CREATE INDEX booksdata_json_idx ON booksdata USING GIN ( booksdata ); GIN to the rescue!!! 14 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  25. 25. JSON Limitac~oes: O tipo json e armazenado em texto e possui fraca indexac~ao, mas sua evoluc~ao, o tipo jsonb e armazenado em binario Diferente do json, o jsonb possui as limitac~oes: n~ao armazena a ordem original das chaves (elas sempre ser~ao mostradas em ordem lexicogra
  26. 26. ca) n~ao aceita chaves repetidas (basicamente json armazena exatamente como voc^e passa, mas jsonb faz um processamento extra) Eu diria que hoje, o PostgreSQL possui o mais avancado mecanismo de indexac~ao para JSON (jsonb) dos bancos de dados open sources (de todos? provavelmente) 15 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  27. 27. JSON Alguns NoSQLs orientado a documentos: MongoDB CouchDB Cassandra SimpleDB ... 16 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  28. 28. Voc^e n~ao precisa de NoSQL para: Full Text Search
  29. 29. 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 articles WHERE title % ’NewSQL ’ ORDER BY sml DESC LIMIT 10; 18 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  30. 30. 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 articles WHERE title % ’NewSQL ’ ORDER BY sml DESC LIMIT 10; Claro, tudo devidamente indexado... GIN and GIST rocks 18 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  31. 31. Full Text Search Limitac~oes: N~ao processa documentos como PDF, DOC, etc. Ate a vers~ao 9.4 performance mais baixa para algumas operac~oes (como ordenac~ao por maior similaridade) { GIN evoluiu na vers~ao 9.4 Alguns NoSQLs com FTS: Solr Lucene Elastic Search Sphinx e tambem MySQL 19 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  32. 32. Voc^e n~ao precisa de NoSQL para: grafos e hierarquias
  33. 33. Consultas em grafos e hierarquias Pode ser facilmente realizada utilizando consultas recursivas O desempenho depende do
  34. 34. ltro e profundidade da navegac~ao 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 path FROM pg_authid r WHERE r. oid NOT IN ( SELECT m. member FROM pg_auth_members m) UNION ALL SELECT r.oid , r. rolname , p. level + 1, p. path || r. rolname FROM pg_auth_members m INNER JOIN pg_authid r ON m. member = r. oid INNER JOIN roles p ON m. roleid = p. roleid ) SELECT repeat (’|__ ’, level -1) || rolname FROM roles ORDER BY path ; 21 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  35. 35. Consultas em grafos e hierarquias Resultado: administrativo | __comercial |__| __carla |__| __maria | __financeiro |__| __ana |__| __paulo ti | __beatriz | __julio | __matheus ... 22 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  36. 36. Consultas em grafos e hierarquias Limitac~oes: Um pouco complexo, mas voc^e acostuma Performance dependente principalmente da altura N~ao muito bem preparado para busca em espacos de buscas grandes ou estruturas de grafos complexas Bancos NoSQL orientados a grafos: Neo4j OrientDB ... 23 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  37. 37. Voc^e n~ao precisa de NoSQL para: operac~oes assncronas
  38. 38. Operac~oes assncronas Quando n~ao precisamos garantir durabilidade em tempo real: Desabilite o par^ametro synchronous commit: SET synchronous_commit TO off ; Para dados transientes: UNLOGGED TABLES Quando precisamos de operac~oes n~ao bloqueantes: PQsendQuery, PQsendPrepare, PQconsumeInput, PQisBusy, ... Processamento de mensagens: Sincronia pode ser atingida com auxlio de advisory locks Troca de mensagens (ativac~ao, pull/push, sender/receiver, etc.) com LISTEN/NOTIFY 25 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  39. 39. Exemplo de
  40. 40. la Ideia: Processos a executar s~ao guardados numa tabela: CREATE TABLE queue (id serial , processed boolean default false , ... , job jsonb ); Para inserir um job para execuc~ao: BEGIN ; INSERT INTO queue (job) VALUES (’{ jobName : foo, ...} ’); NOTIFY jobexecutor ; COMMIT ; /* NOTIFY dispara somente depois */ job executors
  41. 41. cam aguardando processos a executar: LISTEN jobexecutor ; e buscam trabalhos da
  42. 42. la... 26 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  43. 43. Exemplo de
  44. 44. la { job executor 1 UPDATE queue 2 SET processed = true 3 WHERE NOT processed AND id IN( 4 SELECT id FROM ( 5 SELECT id FROM queue 6 WHERE NOT processed 7 ORDER BY id 8 LIMIT 100 9 ) t 10 WHERE 11 pg_try_advisory_xact_lock ( 12 tableoid :: int , id) 13 ORDER BY id 14 LIMIT 1 15 ) 16 RETURNING job; 27 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  45. 45. Exemplo de
  46. 46. la { job executor 1 UPDATE queue 2 SET processed = true 3 WHERE NOT processed AND id IN( 4 SELECT id FROM ( 5 SELECT id FROM queue 6 WHERE NOT processed 7 ORDER BY id 8 LIMIT 100 9 ) t 10 WHERE 11 pg_try_advisory_xact_lock ( 12 tableoid :: int , id) 13 ORDER BY id 14 LIMIT 1 15 ) 16 RETURNING job; 28 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  47. 47. Exemplo de
  48. 48. la { job executor 1 UPDATE queue 2 SET processed = true 3 WHERE NOT processed AND id IN( 4 SELECT id FROM ( 5 SELECT id FROM queue 6 WHERE NOT processed 7 ORDER BY id 8 LIMIT 100 9 ) t 10 WHERE 11 pg_try_advisory_xact_lock ( 12 tableoid :: int , id) 13 ORDER BY id 14 LIMIT 1 15 ) 16 RETURNING job; 29 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  49. 49. Exemplo de
  50. 50. la { job executor 1 UPDATE queue 2 SET processed = true 3 WHERE NOT processed AND id IN( 4 SELECT id FROM ( 5 SELECT id FROM queue 6 WHERE NOT processed 7 ORDER BY id 8 LIMIT 100 9 ) t 10 WHERE 11 pg_try_advisory_xact_lock ( 12 tableoid :: int , id) 13 ORDER BY id 14 LIMIT 1 15 ) 16 RETURNING job; 30 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  51. 51. Fila Limitac~oes: Uso de func~oes n~ao espec
  52. 52. cas de SQL Um pouco complicadinho, n~ao acham? Outras opc~oes (n~ao so NoSQL): pgq {
  53. 53. la alta performance em PostgreSQL RabbitMQ ActiveMQ MongoDB (tailable cursors) ... 31 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  54. 54. Voc^e n~ao precisa de NoSQL para: atualizac~oes rapidas
  55. 55. Usando ACID em alta concorr^encia PostgreSQL e 100% ACID compilante Isso nos traz um poderoso controle de transac~oes Mas... Para ter transac~ao, precisamos de bloqueios, mais conhecido como locks 33 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  56. 56. Usando ACID em alta concorr^encia No PostgreSQL locks s~ao podem ser: de varios modos { compartilhados, exclusivo, acesso exclusivo, etc. de
  57. 57. nidos pelo usuario { advisory locks em varios nveis { tuplas, paginas, tabelas, etc. S~ao essenciais (acredite, n~ao vai querer abrir m~ao disto) Mas... Muitas vezes precisamos ter um certo trabalho para reduzir o numero ou tempo de bloqueios 34 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  58. 58. Usando ACID em alta concorr^encia Regra no PostgreSQL: escritores nunca bloqueiam leitores e leitores nunca bloqueiam escritores nem outros leitores (mas escritores bloqueiam escritores) 35 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  59. 59. Exemplo... Vamos supor contagem de numero de acessos a uma pagina, onde precisamos dessa informac~ao precisa e facil de consultar. Logo nos v^em a cabeca: UPDATE page_info SET access_count = access_count + 1 WHERE url = :url; Para consultar, basta: SELECT access_count FROM page_info WHERE url = :url; 36 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  60. 60. Exemplo... UPDATE page_info SET access_count = access_count + 1 WHERE url = : url; Alguem v^e o problema no cara acima? 37 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  61. 61. Exemplo... UPDATE page_info SET access_count = access_count + 1 WHERE url = : url; Alguem v^e o problema no cara acima? Cada transac~ao concorrente executando esta operac~ao
  62. 62. cara bloqueada, ou seja, apenas uma pessoa pode executar este comando por vez (por url). 37 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  63. 63. Soluc~ao... 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_access WHERE url = :url; 3. E claro, agora trocamos um UPDATE bloqueante por um SELECT potencialmente lento. Calma... Calma... Tem soluc~ao! 38 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  64. 64. Soluc~ao... Para resolver o problema da consulta
  65. 65. car lenta, devemos de tempos em tempos agrupar os registros da tabela WITH old_itens AS ( DELETE FROM page_access RETURNING url , access_count ) INSERT INTO page_access (url , access_count ) SELECT url , sum ( access_count ) FROM old_itens GROUP BY url ; Esta operac~ao e completamente n~ao bloqueante! Enquanto esta sendo executada os INSERTs continuam e os SELECTs tambem. 39 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  66. 66. Soluc~ao... Para resolver o problema da consulta
  67. 67. car lenta, devemos de tempos em tempos agrupar os registros da tabela WITH old_itens AS ( DELETE FROM page_access RETURNING url , access_count ) INSERT INTO page_access (url , access_count ) SELECT url , sum ( access_count ) FROM old_itens GROUP BY url ; BTW, o comando WITH la em cima e conhecido como CTE (Common Table Expressions), e e de grande utilidade. #
  68. 68. caadica 39 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  69. 69. Soluc~ao... Para resolver o problema da consulta
  70. 70. car lenta, devemos de tempos em tempos agrupar os registros da tabela WITH old_itens AS ( DELETE FROM page_access RETURNING url , access_count ) INSERT INTO page_access (url , access_count ) SELECT url , sum ( access_count ) FROM old_itens GROUP BY url ; Por
  71. 71. m, adicione um ndice em url e seja feliz: #
  72. 72. caadica2 CREATE INDEX ON page access count (url); 39 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  73. 73. ...
  74. 74. Performance O PostgreSQL e, sem duvidas, um dos bancos de dados com melhores desempenhos num unico no. Devemos sempre olhar para: ajuste (tuning) de par^ametros de con
  75. 75. gurac~ao; indexac~ao; modelo de dados (normalizar ou desnormalizar); tarefas administrativas; estatsticas atualizadas; ... busque por PostgreSQL Performance Tuning... 41 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  76. 76. Performance E quando precisamos de mais: columnar store (extens~oes para o PostgreSQL cstore fdw 1 e In-Memory Columnar Store (ICMS) 2); particionamento de tabelas; divis~ao de tablespaces; 42 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  77. 77. Performance Escalabilidade horizontal: replicac~ao: replicac~ao nativa com slave disponvel para consulta (balanceamento de carga para consultas); replicac~ao multi-master com ferramentas externas: Bucardo e BDR (a grande promessa para a vers~ao 9.4). tecnicas de sharding e/ou processamento de consulta em paralelo: divis~ao de processos em conex~oes; sharding via aplicac~ao; sharding via postgres fdw 3. 1http://citusdata.github.io/cstore_fdw/ 2http://www.garret.ru/imcs/user_guide.html 3http: //www.infoq.com/br/presentations/postgresql-com-newsql 43 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  78. 78. E quando o PostgreSQL n~ao resolve meu problema? Primeiro, tem certeza que n~ao? 44 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  79. 79. E quando o PostgreSQL n~ao resolve meu problema? Primeiro, tem certeza que n~ao? Absoluta? 44 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  80. 80. E quando o PostgreSQL n~ao resolve meu problema? Ok, acontece... sobrecarga de operac~oes e do MVCC pode gerar gargalos; sem processamento paralelo ou sharding nativo (apenas o faca voc^e mesmo); falta de funcionalidades frente a banco de dados especializados, exemplos: estruturas de grafos s~ao melhores tratadas em especializados como Neo4j do que com consultas recursivas; FTS do PostgreSQL comparado a outros como Lucene ou Sphinx ainda perde em funcionalidades. 45 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  81. 81. E quando o PostgreSQL n~ao resolve meu problema? Mas tudo bem usar outro. Se quiser associar, varios Foreign Data Wrappers (FDW) est~ao disponveis (redis fdw, mongo fdw, ...) para mapear dados externos dentro de tabelas no PostgreSQL; 46 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  82. 82. E quando o PostgreSQL n~ao resolve meu problema? DICA DE OURO: comece sempre no PostgreSQL (tiro certo), se o projeto crescer fora de escala que o PG suporte, busque outras alternativas. E muito comum utilizar bancos NoSQL junto com bancos relacionais (n~ao e escolha unica). Existem muitos bancos MPP (Massive Parallel Processing ) e (100%) NewSQL baseados no PostgreSQL. comerciais: Greenplun, Amazon Redshift, Aster Data, Netezza, Vertica, entre outros; e as promessas open source: Postgres-XC e Postgres-XL. 47 / 48 PostgreSQL e porque voc^e n~ao precisa de NoSQL { Matheus de Oliveira { QCon RJ 2014
  83. 83. Obrigado! Duvidas? Matheus de Oliveira matheus.oliveira@dextra.com.br IRC { irc.freenode.net: /join #postgresql,#postgresql-br,#dextra Meu nick: MatheusOl Twitter: @matioli matheus LinkedIn: br.linkedin.com/in/matheusdeoliveira/ SlideShare: slideshare.net/matheus de oliveira

×