O Postgres foi reescrito em Rust… e de alguma forma passou em todos os testes

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

00:00:00Alguém reconstruiu o Postgres em Rust e, de alguma forma, a versão lançada agora passa por todas as 46.000 consultas de regressão do Postgres.
00:00:08Ele funciona com o PSQL normal. Pode até inicializar um diretório de dados existente do Postgres 18.3.
00:00:14Isso parece um substituto pronto para produção. Mas não é.
00:00:17Mas a versão mais empolgante deste projeto ainda nem foi lançada.
00:00:21Então, o que exatamente estamos vendo aqui? É o futuro do Postgres ou apenas um experimento de IA?
00:00:30Bem, para entender por que isso importa, você precisa entender o problema.
00:00:36O Postgres é um dos melhores bancos de dados já criados, vamos encarar.
00:00:40Mas ele também carrega quase quatro décadas de arquitetura e cerca de um milhão de linhas de C.
00:00:46Cada conexão de cliente obtém seu próprio processo de backend.
00:00:49Esse isolamento é útil, mas também significa maior sobrecarga de memória, mais pressão para usar pool de conexões,
00:00:56e mais dificuldade em compartilhar estado em trabalhos paralelos.
00:01:00O PGRust segue um caminho diferente.
00:01:02Mantenha o comportamento do Postgres, mantenha a experiência do cliente, mantenha os formatos de disco, mas substitua o mecanismo subjacente por Rust.
00:01:09Isto não é uma extensão do Postgres.
00:01:11Não é um recurso adicionado por cima.
00:01:13Isto é completamente separado, uma implementação tentando se comportar exatamente como o Postgres.
00:01:18Estamos vendo muitas reescritas em Rust agora, exatamente como aquela que cobrimos outro dia sobre a Bunn reescrevendo toda a sua base de código com Rust.
00:01:25Vou colocar em algum lugar aqui.
00:01:27E agora, tudo isso soa bem, mas parece realmente o Postgres de verdade?
00:01:31Menos testado adequadamente.
00:01:32Se você gosta de ferramentas de codificação que aceleram seu fluxo de trabalho, inscreva-se.
00:01:36Temos vídeos saindo o tempo todo.
00:01:38Agora, estou começando com a imagem oficial do Docker, depois me conectando com um cliente PSQL completamente normal.
00:01:43Nada personalizado.
00:01:44Agora, estou dentro.
00:01:46Primeiro, vamos verificar a versão.
00:01:48Como você pode ver, ele se reporta como PGRust com a versão mais recente.
00:01:53Agora, posso criar uma tabela, inserir alguns dados e olhar um plano de consulta.
00:01:59Vou apenas executar isso aqui no meu terminal.
00:02:01Por fora, é completamente indistinguível do Postgres.
00:02:05Mesmo cliente, mesmo SQL, mesma saída.
00:02:08Você pode até ver que o planejador de consultas escolheu um index scan e nos deu estatísticas de execução reais.
00:02:14Agora, para tornar isso um pouco mais interessante, vamos inserir 100.000 linhas e executar outra consulta.
00:02:20Isso são apenas 100 mil linhas de dados geradas.
00:02:23Vamos colocá-las aqui.
00:02:25Agora, qual é o objetivo de tudo isso?
00:02:27Certo, bem, boa pergunta.
00:02:28Bem, nesta versão inicial atual, não veremos melhorias dramáticas de velocidade em relação ao Postgres normal.
00:02:35As maiores alegações de desempenho vêm de uma versão de desenvolvimento não lançada que muda para um modelo de uma thread por conexão.
00:02:43Tudo isso prova, no entanto, que esta não é apenas uma implementação parcial.
00:02:47Ele passou pelo pacote oficial completo de testes de regressão do Postgres, mais de 46.000 consultas.
00:02:53Ele fala o protocolo de rede real e tem um mecanismo de armazenamento com plano de consulta funcional.
00:02:59Este é um servidor de banco de dados real.
00:03:01É apenas escrito em Rust.
00:03:03Então, com esse progresso, poderíamos ver algumas melhorias sérias de desempenho no lado da velocidade das coisas.
00:03:08Então, agora a pergunta é, por que não apenas criar outra extensão do Postgres?
00:03:12Porque as extensões ficam em cima do núcleo original do Postgres.
00:03:16Um fork pode alterar esse núcleo, mas então ele herda a mesma arquitetura e o trabalho permanente de acompanhar o Postgres upstream.
00:03:25Você tem bancos de dados como CockroachDB e YugaByte, mas eles são bancos de dados distribuídos independentes.
00:03:31Compatibilidade total não é o objetivo principal deles.
00:03:35O PG Rust está tentando outra coisa.
00:03:37Ele usa o comportamento real do Postgres como especificação.
00:03:41A versão atual tem como alvo o Postgres 18.3.
00:03:44Ele passa pelo pacote padrão de regressão e testes de isolamento, e é compatível o suficiente para inicializar a partir de um diretório de dados existente do Postgres 18.3.
00:03:53O experimento maior aqui está acontecendo em uma versão separada não publicada, e essa versão supostamente substitui o modelo de “processo por conexão” do Postgres por um modelo de “thread por conexão”.
00:04:05Com o modelo normal do Postgres, cada conexão obtém seu próprio processo.
00:04:09Com o novo modelo, cada conexão obtém uma thread dentro do mesmo processo.
00:04:14Isso pode reduzir a sobrecarga por conexão e facilitar que diferentes partes do banco de dados compartilhem informações.
00:04:21Mas com tudo isso, haverá uma troca, certo?
00:04:24Processos separados também criam barreiras úteis entre as conexões.
00:04:28Se um processo falha, essa separação pode ajudar a conter o dano.
00:04:32Com threads, uma extensão insegura ou um bug de memória pode afetar mais o servidor.
00:04:38Então, “thread por conexão” não é automaticamente melhor.
00:04:41Ele apenas abre novas portas, mas também pode remover algumas travas de segurança.
00:04:45Então há a segunda parte principal da história, IA.
00:04:49Michael Malice e Jason Siebel usaram agentes de codificação intensamente para acelerar a reescrita.
00:04:54A versão publicada segue intencionalmente a estrutura original do Postgres em muitos lugares.
00:04:59A versão não publicada é onde eles estão tentando mudanças arquiteturais maiores.
00:05:03Então, o verdadeiro experimento não é simplesmente: o Rust pode tornar o Postgres mais rápido?
00:05:08É mais como: a IA pode tornar uma reescrita desse tamanho acessível o suficiente para que os desenvolvedores possam realmente repensar a arquitetura subjacente às coisas?
00:05:16Porque a IA foi usada intensamente aqui.
00:05:19Agora, isso muda as coisas?
00:05:20Bem, talvez.
00:05:21É também onde precisamos diminuir um pouco o ritmo.
00:05:25A versão lançada não é fortemente otimizada.
00:05:28As maiores alegações de desempenho vêm da versão não publicada de “thread por conexão”, que no momento não podemos testar.
00:05:36Os desenvolvedores afirmam ter cerca de 50% de melhor desempenho em cargas de trabalho transacionais.
00:05:40Eles também afirmam cerca de 300 vezes o desempenho do Postgres em cargas de trabalho analíticas.
00:05:45Esses números são enormes, mas o código por trás desses resultados não está atualmente disponível para qualquer tipo de inspeção ou benchmarking.
00:05:53Então, portanto, ainda há muita especulação.
00:05:57Parece haver uma boa divisão de 50-50 aqui, pelo menos lendo online, com perguntas que se parecem um pouco com estas.
00:06:03Estas são apenas as issues aqui no GitHub.
00:06:05Então você até recebe uma issue como esta, certo?
00:06:08Que é uma pergunta completamente razoável.
00:06:10Ao ler essa issue, os desenvolvedores parecem inflexíveis em fazer isso funcionar de verdade.
00:06:15Portanto, não temos estatísticas reais ainda.
00:06:17Isso não significa automaticamente que os números são falsos, no entanto.
00:06:20Significa apenas que devemos tratá-los como alegações promissoras, não como fatos estabelecidos.
00:06:24E, honestamente, o multiplicador exato pode não ser a parte mais importante.
00:06:28Não precisamos mudar todo o projeto Postgres antes de saber se uma ideia realmente funciona ou não.
00:06:34Essa liberdade pode ser mais valiosa do que qualquer benchmark único que possamos obter.
00:06:38Agora, a reação dos desenvolvedores a todas essas reescritas em Rust, mesmo neste PG Rust, tem sido enorme.
00:06:44A discussão principal no Hacker News ultrapassou centenas de pontos e comentários, mas, novamente, a resposta é dividida.
00:06:50Ambos os lados estão levantando bons pontos.
00:06:52Primeiro, passar por todas as consultas de regressão é uma conquista séria.
00:06:56Muitos projetos afirmam ser compatíveis com o Postgres.
00:06:59Essa frase pode significar quase qualquer coisa.
00:07:01O PG Rust tem um alvo mensurável.
00:07:04Os testes reais do Postgres são os juízes disso.
00:07:07E a velocidade desta reescrita sugere que agentes de codificação podem mudar completamente o custo de grandes experimentos de infraestrutura.
00:07:13Ideias que antes pareciam caras demais para tentar estão agora, aparentemente, se tornando mais possíveis.
00:07:19Agora, para o outro lado das coisas, passar nos testes de regressão não é o mesmo que ganhar a confiança de produção.
00:07:24Esses testes não substituem anos de testes de recuperação de falhas e replicação, ou bancos de dados que funcionam por meses sem parar.
00:07:31Um projeto pode passar em todos os testes conhecidos e ainda assim falhar em uma situação que ninguém sequer pensou em testar.
00:07:37Gerar centenas de milhares de linhas de código é um desafio.
00:07:42A compatibilidade com extensões é outra grande lacuna.
00:07:45Agora, você deveria substituir seu cluster Postgres de produção pelo PG Rust?
00:07:49Não, absolutamente não.
00:07:51O projeto em si não está pronto para produção.
00:07:53Está declarado.
00:07:54Não é totalmente otimizado.
00:07:56Em áreas importantes de compatibilidade, incluindo o ecossistema de extensões, eles ainda estão inacabados.
00:08:02Mas você deveria tentar?
00:08:03Claro.
00:08:03Se você trabalha com bancos de dados, Rust, execução de consultas, testes de compatibilidade ou desenvolvimento de IA, por que não experimentar?
00:08:10Execute a imagem Docker, teste sua biblioteca cliente contra ela, leia o código-fonte e veja o que acontece.
00:08:16Então, deixe seu veredito nos comentários.
00:08:18Para onde este projeto está indo?
00:08:20Vamos começar a reescrever mais em Rust?
00:08:21Vamos descobrir.
00:08:23Se você gosta de dicas e truques de codificação como este, não deixe de se inscrever no canal BetterStack.
00:08:26Nos vemos em outro vídeo.

핵심 요약

O PGRust é um experimento ambicioso que utiliza Rust e agentes de IA para reconstruir o Postgres, alcançando compatibilidade com os testes de regressão oficiais e prometendo ganhos de desempenho via um modelo de threads por conexão, embora ainda não esteja pronto para produção.

하이라이트

  • O projeto PGRust implementa o Postgres em Rust e já supera 46.000 testes de regressão do Postgres oficial.

  • A versão atual permite inicializar o banco de dados a partir de um diretório de dados do Postgres 18.3 existente.

  • O modelo experimental de desenvolvimento utiliza threads por conexão em vez do modelo de processo por conexão do Postgres original.

  • Alegações de desempenho da versão não publicada apontam melhoria de 50% em cargas transacionais e 300 vezes em cargas analíticas.

  • O uso intensivo de agentes de codificação por IA acelerou o processo de reescrita da base de código do banco de dados.

타임라인

Arquitetura e compatibilidade do PGRust

  • O PGRust não é uma extensão, mas uma implementação independente feita em Rust.
  • O sistema passa por todos os 46.000 testes de regressão do Postgres oficial.
  • A interface de conexão e o comportamento externo são indistinguíveis do Postgres original.

O projeto busca manter a experiência do usuário, os formatos de disco e o comportamento do Postgres enquanto substitui o mecanismo central por Rust. O isolamento de processos por conexão do Postgres tradicional gera sobrecarga de memória, um problema que o PGRust tenta endereçar com uma nova arquitetura.

Mudanças arquiteturais e performance

  • A versão de desenvolvimento adota um modelo de uma thread por conexão.
  • A troca entre processos e threads impacta o isolamento de falhas entre conexões.
  • Bugs de memória em extensões podem afetar mais facilmente o servidor sob o modelo de threads.

A mudança de processo para thread visa reduzir a sobrecarga e facilitar o compartilhamento de informações. Embora promissor, o modelo de threads remove as barreiras de proteção nativas do Postgres, onde a falha de um processo não derruba necessariamente todo o servidor.

O papel da IA e o status do projeto

  • Agentes de codificação de IA foram fundamentais para acelerar a reescrita do código.
  • Os números de desempenho divulgados ainda carecem de verificação independente e dados públicos.
  • O projeto não está pronto para uso em produção devido à falta de otimização e suporte a extensões.

O experimento levanta a questão se a IA torna viáveis reescritas de infraestrutura complexas que antes seriam muito onerosas. Embora a comunidade esteja dividida sobre a viabilidade, o projeto serve como um teste de conceito sobre a eficácia de novas arquiteturas de banco de dados.

커뮤니티 글

모든 글 보기