Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Consultas em repositórios comprimidos, com paralelismo, através de Foreign Data Wrappers

Consultas em repositórios comprimidos, com paralelismo, através de Foreign Data Wrappers

A compressão em bancos de dados pode trazer benefícios relevantes como redução do uso de STORAGE e melhoria de performance em certas situações em que o I/O é o gargalo. Nessa palestra, vamos compartilhar nossa experiência de integrar uma ferramenta de compressão de dados no PostgreSQL através da extensão FDW (Foreign Data Wraper) de forma eficiente. Na verdade, "de forma eficiente" será a nossa grande contribuição. Vamos detalhar aspectos como:
- Melhores práticas para pesquisar dados comprimidos em repositórios externos (possivelmente remotos)
- Particionamento, sharding e paralelismo: 'Parallel Safe' e 'Parallel Aware'
- Como superar certos desafios no uso do FDW;
---

Sanyo Capobiango

August 02, 2019
Tweet

Other Decks in Programming

Transcript

  1. Consultas em repositórios comprimidos, com paralelismo, através de Foreign Data

    Wrappers Sanyo Capobiango Soares de Moura www.linkedin.com/in/sanyo-moura [email protected] www.tatic.net
  2. Agenda  Por que comprimir dados?  Estendendo o Postgres

    através de FDWs  Composição de um FDW  Melhores práticas para pesquisar em repositórios remotos  Paralelismo: ‘Parallel Safe’ e ‘Parallel Aware’  Particionamento & sharding  Pesquisas híbridas em um ‘Data Lake’ com compressão  Perguntas e respostas
  3.  Reduzir custos de armazenamento  Relevante se seu BD

    está crescendo rapidamente  Desafogar o banco de dados, melhorando o desempenho  Relevante quando I/O representa um gargalo Por que comprimir dados? Características imprescindíveis do sistema de compressão para não impactar performance:  permitir particionamento e sharding  permitir paralelizar as consultas  utilizar índices e metadados 01
  4. 04

  5. Custo / Performance • Calcular custos dos vários paths possíveis,

    a fim de que o “planner” decida corretamente qual o melhor plano para execução estimate_path_cost_size(…) • Evitar trazer informações desnecessárias da tabela estrangeira baserel→baserestrictinfo (where clauses) • Guardar e gerenciar estado, evitando recálculos baserel→fdw_private • Criar partições estrangeiras (quando possível), permitindo realizar buscas em paralelo nas diversas partições envolvidas em uma pesquisa routine→IsForeignScanParallelSafe = myfdwIsForeignScanParallelSafe; add_partial_path(baserel, (Path *) path); Custo / Performance • Calcular custos dos vários paths possíveis, a fim de que o “planner” decida corretamente qual o melhor plano para execução estimate_path_cost_size(…) • Evitar trazer informações desnecessárias da tabela estrangeira baserel→baserestrictinfo (where clauses) • Guardar e gerenciar estado, evitando recálculos baserel→fdw_private • Criar partições estrangeiras (quando possível), permitindo realizar buscas em paralelo nas diversas partições envolvidas em uma pesquisa routine→IsForeignScanParallelSafe = myfdwIsForeignScanParallelSafe; add_partial_path(baserel, (Path *) path); Melhores Práticas 05
  6. Praticando Objetivo: Consultar evolução de preços de 1 produto em

    uma determinada loja durante os meses de janeiro e fevereiro de 2017 Cluster PostgreSQL – 2 instâncias • instancia1 – processa dias ímpares • instancia2 – processa dias pares ➔ 2017-02 – armazenado no PostgreSQL ➔ 2017-01 – armazenado no XDR (comprimido) FDWs: postgres_fdw / xdr_fdw 10
  7. 1. Apresentar dados de fevereiro de cada instância, 14 dias

    2. Apresentar dados de fevereiro em ambas instâncias, 28 dias (postgres_fdw) 3. Apresentar dados de fevereiro e janeiro do XDR, 43/44 dias (inst.1→ímpares, inst.2→pares) (xdr_fdw) 4. Apresentar dados de janeiro e fevereiro em ambas instâncias, todos os 59 dias (postgres_fdw + xdr_fdw) 2017 / 01 / Todos 2017 / 02 / Ímpares Roteiro 2017 / 02 / Pares 12