O CS101 ensina uma grande notação, mas na produção, as regras de memória. O artigo clássico de Ulrich Drepper de 2007 explica por que codificar que isso visual Linear pode se comportar super-linearmente depois de bloquear caches ou passear pelos limites da NUMA. Estruturas de dados e padrões de acesso que maximizam a localidade (pense em árvores B com nós do tamanho de uma página, estrutura de matrizes (SOA) versus matriz de estruturas (AOs), buffers de anel) não são detalhes acadêmicos-eles são a diferença entre as CPUs que trabalham e as CPUs esperando. Aqui está a versão executiva: as estruturas de dados amigáveis ao cache transformam a computação que você já está pagando na taxa de transferência que você pode realmente usar.
Motores de armazenamento são estruturas de dados com orçamentos
Todo mecanismo de armazenamento de banco de dados é uma estrutura de dados com um balanço de lucro e perda. Motores de armazenamento, como árvores B+, que são otimizadas para leituras rápidas e baseadas em disco e varreduras de alcance, comércio de custos de gravação mais altos (gravação de amplificação) para obter uma excelente localidade de leitura; As árvores de mesclagem estruturadas de log (LSM Trees) giram que, otimizando para altas taxas de gravação ao custo da compactação e leia a amplificação. Nem é melhor. Cada um é um trade-off algorítmico consciente com consequências operacionais diretas (IOPS, SSD Wear, CPU queima durante a compactação). Se suas cargas de trabalho são gravações pesadas com leituras em lotes, o LSM faz sentido. Se a sua carga de trabalho for sensível à leitura de leitura com varreduras de alcance, as árvores B+ geralmente vencem. Sua escolha é um problema de seleção de estrutura de dados mapeado em contas de nuvem e SLOs. Trate dessa maneira.
Não está convencido? Há um artigo interessante de Frank McSherry, Michael Isard e Derek Murray, que faz uma pergunta direta: quantas máquinas você precisa antes do seu quadril, o sistema paralelo legal supera um único tópico competente? Eles chamam o métrico de “custo” (configuração que supera um único tópico), e a resposta para muitos sistemas publicados é “muito” – às vezes centenas de núcleos. Se um algoritmo ou estrutura de dados melhor oblitera sua necessidade de um cluster, isso não é simplesmente uma flexão de engenharia; São milhões de dólares economizados e uma superfície de ataque reduzida.
