Projetando Aplicações com Uso Intensivo de Dados – 2ª Edição

Os pilares para construir sistemas confiáveis, escaláveis e fáceis de manter

Projetando Aplicações com Uso Intensivo de Dados – 2ª Edição
× Projetando Aplicações com Uso Intensivo de Dados – 2ª Edição

Projetando Aplicações com Uso Intensivo de Dados – 2ª Edição

Compartilhar

Autores: Martin Kleppmann
Chris Riccomini

ISBN impresso: 978-65-83913-06-7
ISBN ebook: 978-65-83913-07-4
Ano: 2026
Páginas: 584
Preço impresso: R$ 179,00 O ebook deste livro está disponível na Amazon.

Opine sobre este livro

Descrição do livro

Os dados estão no centro de muitos dos desafios atuais no design de sistemas. Questões complexas, como escalabilidade, consistência, confiabilidade, eficiência e facilidade de manutenção precisam ser resolvidas. Além disso, há uma enorme variedade de sistemas disponíveis, incluindo bancos de dados relacionais, armazenamento NoSQL, data warehouses e data lakes. Sem falar em serviços na nuvem, serviços locais e bancos de dados incorporados. Quais são as escolhas certas para a sua aplicação? Como compreender todos esses modismos tecnológicos?

Nesta segunda edição, os autores Martin Kleppmann e Chris Riccomini expandem a base estabelecida na aclamada primeira edição, incorporando novas tecnologias e tendências emergentes. Ao longo do livro, você será guiado pelo labirinto de decisões e trade-offs envolvidos na construção de um sistema de dados moderno, aprenderá a escolher as ferramentas mais adequadas às suas necessidades e compreenderá os fundamentos dos sistemas distribuídos.

• Conheça os componentes internos dos sistemas que já utiliza e aprenda a usá-los de forma mais eficaz

• Tome decisões mais acertadas ao identificar as vantagens e desvantagens de cada ferramenta

• Saiba como os principais serviços em nuvem são projetados para oferecer escalabilidade, tolerância a falhas e consistência

• Compreenda os princípios fundamentais sobre os quais os bancos de dados modernos são construídos

Ver menos ▲

Sumário

  • Prefácio
  • CAPÍTULO 1: Trade-offs na arquitetura de sistemas de dados
  • Sistemas operacionais versus analíticos
    • Caracterizando o processamento de transações e análise de dados
    • Data warehouse
    • Sistemas de registro e de dados derivados
  • Nuvem versus auto-hospedagem
    • Vantagens e desvantagens de serviços em nuvem
    • Arquitetura de sistemas cloud-native
    • Operações na era da nuvem
  • Sistemas distribuídos versus sistemas de nó único
    • Problemas com sistemas distribuídos
    • Microsserviços e arquitetura serverless
    • Computação em nuvem versus supercomputação
  • Sistemas de dados, legislação e sociedade
  • Resumo
  • CAPÍTULO 2: Definindo requisitos não funcionais
  • Estudo de caso: timelines em redes sociais
    • Representando usuários, publicações e relações de follow
    • Materializando e atualizando timelines
  • Descrevendo o desempenho
    • Latência e tempo de resposta
    • Média, mediana e percentis
    • Uso de métricas de tempo de resposta
  • Confiabilidade e tolerância a falhas
    • Tolerância a falhas
    • Falhas de hardware e software
    • Seres humanos e confiabilidade
  • Escalabilidade
    • Compreendendo a carga
    • Arquiteturas de memória compartilhada, disco compartilhado e sem compartilhamento
    • Princípios para escalabilidade
  • Facilidade de manutenção
    • Operabilidade: facilitando operações
    • Simplicidade: gerenciando a complexidade
    • Evolutividade: facilitando mudanças
  • Resumo
  • CAPÍTULO 3: Modelos de dados e linguagens de consulta
  • Modelo de documentos versus modelo relacional
    • Incompatibilidade objeto-relacional
    • Normalização, desnormalização e joins
    • Relacionamentos muitos-para-um e muitos-para-muitos
    • Esquemas estrela e floco de neve: esquemas para análise de dados
    • Quando utilizar cada modelo
  • Modelos de dados de grafos
    • Grafos de propriedades
    • Linguagem de consulta Cypher
    • Consultas em grafos com SQL
    • Triple stores e SPARQL
    • Datalog: consultas relacionais recursivas
    • GraphQL
  • Event sourcing e CQRS
  • DataFrames, matrizes e arrays
  • Resumo
  • CAPÍTULO 4: Armazenamento e recuperação
  • Armazenamento e indexação para OLTP
    • Armazenamento estruturado em log
    • Árvores B
    • Comparando árvores B e LSM
    • Índices multicoluna e secundários
    • Armazenando valores dentro do índice
    • Mantendo os dados em memória
  • Armazenamento de dados para análise
    • Data warehouses em nuvem
    • Armazenamento orientado a colunas
    • Execução de consultas: compilação e vetorização
    • Views materializadas e cubos de dados
  • Índices multidimensionais e de texto completo
    • Busca por texto completo
    • Embeddings vetoriais
  • Resumo
  • CAPÍTULO 5: Codificação e evolução
  • Formatos para codificação de dados
    • Formatos específicos de linguagem
    • JSON, XML e variantes binárias
    • Protocol Buffers
    • Avro
    • Vantagens de utilizar esquemas
  • Modos de fluxo de dados
    • Fluxo de dados por meio de bancos de dados
    • Fluxo de dados por meio de serviços: REST e RPC
    • Execução durável e fluxos de trabalho
    • Arquiteturas orientadas a eventos
  • Resumo
  • CAPÍTULO 6: Replicação
  • Replicação com líder único
    • Replicação síncrona versus assíncrona
    • Configurando novos seguidores
    • Lidando com indisponibilidade de nós
    • Implementação de logs de replicação
    • Problemas com atraso de replicação
    • Soluções para atraso de replicação
  • Replicação multilíder
    • Operação distribuída geograficamente
    • Mecanismos de sincronização e software local-first
    • Lidando com gravações conflitantes
  • Replicação sem líder
    • Gravando no banco de dados quando um nó está indisponível
    • Desempenho: replicação com líder único versus replicação sem líder
    • Operação em múltiplas regiões
    • Detectando gravações concorrentes
  • Resumo
  • CAPÍTULO 7: Sharding
  • Vantagens e desvantagens do sharding
  • Sharding para multitenancy
  • Sharding de dados do tipo chave-valor
    • Sharding por intervalo de chave
    • Sharding por hash da chave
    • Cargas de trabalho desbalanceadas e mitigação de hot spots
    • Operações: rebalanceamento automático versus manual
  • Roteamento de solicitações
  • Sharding e índices secundários
    • Índices secundários locais
    • Índices secundários globais
  • Resumo
  • CAPÍTULO 8: Transações
  • O que exatamente é uma transação?
    • Significado de ACID
    • Operações de objeto único e de múltiplos objetos
  • Níveis fracos de isolamento
    • Read-committed
    • Snapshot isolation e repeatable read
    • Evitando lost updates
    • Write skew e phantoms
  • Serializabilidade
    • Execução serial real
    • Two-phase locking
    • Serializable snapshot isolation
  • Transações distribuídas
    • Two-phase commit
    • Transações distribuídas em diferentes sistemas
    • Transações distribuídas internas ao banco de dados
    • Recapitulando o processamento de mensagens com semântica exatamente uma vez
  • Resumo
  • CAPÍTULO 9: Problemas com sistemas distribuídos
  • Falhas e falhas parciais
  • Redes não confiáveis
    • Limitações do TCP
    • Falhas de rede na prática
    • Detecção de falhas
    • Timeouts e atrasos ilimitados
    • Redes síncronas versus assíncronas
  • Relógios não confiáveis
    • Relógios de hora do dia versus monotônicos
    • Sincronização e precisão de relógios
    • Dependendo de relógios sincronizados
    • Pausas de processo
  • Conhecimento, verdade e mentiras
    • A maioria decide
    • Locks e leases distribuídos
    • Falha bizantina
    • Modelo de sistema e realidade
    • Métodos formais e testes aleatorizados
  • Resumo
  • CAPÍTULO 10: Consistência e consenso
  • Linearizabilidade
    • O que torna um sistema linearizável?
    • Confiando na linearizabilidade
    • Implementando sistemas linearizáveis
    • Custo da linearizabilidade
  • Geradores de IDs e relógios lógicos
    • Relógios lógicos
    • Geradores linearizáveis de IDs
  • Consenso
    • As várias faces do consenso
    • Consenso na prática
    • Serviços de coordenação
  • Resumo
  • CAPÍTULO 11: Processamento em lote
  • Processamento em lote com ferramentas Unix
    • Análise simples de logs
    • Utilizando uma sequência de comandos versus criando um programa personalizado
    • Ordenação versus agregação em memória
  • Processamento em lote em sistemas distribuídos
    • Sistemas de arquivos distribuídos
    • Armazenamentos de objetos
    • Orquestração distribuída de jobs
  • Modelos de processamento em lote
    • MapReduce
    • Mecanismos de fluxo de dados
    • Shuffling de dados
    • Joins e agrupamento
    • Linguagens de consulta
    • DataFrames
  • Casos de uso de processamento em lote
    • Extract–Transform–Load
    • Análise de dados
    • Machine learning
    • Disponibilizando dados derivados
  • Resumo
  • CAPÍTULO 12: Processamento de fluxos (streams)
  • Transmissão de fluxos de eventos
    • Sistemas de mensageria
    • Brokers de mensagens baseados em log
  • Bancos de dados e fluxos
    • Mantendo sistemas sincronizados
    • Captura de dados de mudança
    • Estado, fluxos e imutabilidade
  • Processando fluxos
    • Usos do processamento de fluxos
    • Lidando com o tempo
    • Joins de fluxos (streams)
    • Tolerância a falhas
  • Resumo
  • CAPÍTULO 13: Uma filosofia dos sistemas de streaming
  • Integração de dados
    • Combinando ferramentas especializadas por meio de dados derivados
    • Processamentos em lote e de fluxos
  • Desacoplando bancos de dados
    • Compondo tecnologias de armazenamento de dados
    • Projetando aplicações em torno de fluxos de dados
    • Observando estado derivado
  • Buscando corretude
    • Argumento ponta a ponta para bancos de dados
    • Impondo restrições
    • Pontualidade e integridade
    • Confie, mas verifique
  • Resumo
  • CAPÍTULO 14: Fazendo a coisa certa
  • Análise preditiva
    • Viés e discriminação
    • Responsabilidade e prestação de contas
    • Loops de feedback
  • Privacidade e rastreamento
    • Vigilância
    • Consentimento e liberdade de escolha
    • Privacidade e uso de dados
    • Dados como ativos e poder
    • Relembrando a Revolução Industrial
    • Legislação e autorregulação
  • Resumo
  • Glossário
  • Índice remissivo
Ver sumário completo ▼

Sobre os autores

Martin Kleppmann

Martin Kleppmann é professor associado de sistemas distribuídos na Universidade de Cambridge. Anteriormente, foi fundador de startup e engenheiro de software no LinkedIn, atuando com infraestrutura de dados em larga escala.… Ver perfil completo ▶

Chris Riccomini

Chris Riccomini é engenheiro de software, investidor em startups e autor. Foi um dos criadores do Apache Samza e do SlateDB, coautor do livro The Missing README e administra a Materialized View Capital.… Ver perfil completo ▶