• Otimização de SQL • Fast Detect • Parse e dump de JSON • Parse e dump de XML • Gargabe Collector • Background Job • Assets • Planilhas • PDFs • CPU Bound Agenda
para ambientes distribuídos • Use somente se o tempo de processamento for maior que o tempo médio de rede do banco de caching • Cuidado com o dog-pile effect
owner_name, c.name AS category_name, array_agg(cm.author) AS comment_authors, array_agg(cm.body) AS comment_bodies from products p join owners o on o.id = p.owner_id join categories c on c.id = p.category_id join comments ct on ct.product_id = p.id group by 1, 2, 3 Database View
específicos do banco podem tornar difícil a migração para outra solução mas ninguém usa ORM para isso * • Use a gem scenic da Thoughtbot para facilitar o versionamento das views nas migrations
AS owner_name, c.name AS category_name, array_agg(cm.author) AS comment_authors, array_agg(cm.body) AS comment_bodies from products p join owners o on o.id = p.owner_id join categories c on c.id = p.category_id join comments ct on ct.product_id = p.id group by 1, 2, 3 Materialised View
no banco ou workers na aplicação • Índices podem otimizar ainda mais as consultas na materialized view • REFRESH sempre recomputa todos os registros, mesmo os sem modificação
que está acontecendo na consulta • Estude a documentação do seu banco de dados para entender como otimizar • Se precisar de LIKE no Postgres, use o pg_trgm para indexar
metade do tempo • libxml possui um preocupante histórico de vunerabilidades (nokogiri usa libxml) • ox se vende como mais seguro por não depender do libxml
para continuar atendendo requisições • Cuidado com gargalos no banco de dados • Sidekiq é a opção mais utilizada mas não é a mais robusta Background Job