Cinco maneiras de modelar dados polimórficos em bancos de dados relacionais

2025-07-09
Cinco maneiras de modelar dados polimórficos em bancos de dados relacionais

Este artigo explora cinco abordagens para modelar dados polimórficos em bancos de dados relacionais: tabela única, chaves estrangeiras anuláveis, união rotulada, chaves estrangeiras de filho para pai e JSON. Cada método tem seus prós e contras; por exemplo, a abordagem de tabela única é simples, mas pode ser lenta, enquanto JSON é facilmente extensível, mas carece de validação de dados. O autor sugere escolher o método mais fácil de ler, manter e depurar e evitar otimização prematura.

Leia mais

Múltiplas Descobertas: O Caso das Árvores Prolly

2025-07-01
Múltiplas Descobertas: O Caso das Árvores Prolly

Árvores Prolly, uma estrutura de dados inovadora crucial para o Dolt, não foram inventadas apenas uma vez, mas pelo menos quatro vezes de forma independente. De Avery Pennarun, em 2009, com o projeto bup (que antecede até mesmo a Noms), à cunhagem do termo pela Noms em 2015, às 'Árvores de Busca Merkle' da Inria em 2019, e às 'Árvores Merkle Definidas por Conteúdo' da Universidade DePaul em 2020, a mesma estrutura de dados fundamental surgiu repetidamente em diferentes contextos. Isso destaca o fenômeno comum de descobertas múltiplas na ciência e destaca o papel da demanda na inovação tecnológica. Os autores, da DoltHub, discutem esse fenômeno e suas implicações para a tecnologia futura, usando sua própria experiência com árvores Prolly como um estudo de caso.

Leia mais

go-mysql-server do Dolt com Cinco Anos: A Jornada de uma Consulta

2025-04-27
go-mysql-server do Dolt com Cinco Anos: A Jornada de uma Consulta

Esta publicação reflete sobre cinco anos do Dolt usando o go-mysql-server, detalhando o funcionamento interno de seu mecanismo SQL. Ela acompanha a jornada de uma consulta, desde a análise até a geração dos resultados, abrangendo análise, vinculação, simplificação do plano, exploração de junções, otimização baseada em custo e execução. O Dolt emprega um analisador recursivo à esquerda e programação dinâmica de baixo para cima para otimização do plano de consulta, selecionando a estratégia de execução ideal usando um modelo de custo. A publicação também discute o gerenciamento de memória e otimizações futuras, como unificar representações intermediárias e reduzir a troca de memória.

Leia mais
Desenvolvimento

Armadilha Surpreendente de Alocação de Memória em Go: Uma História de Regressão de 30%

2025-04-21
Armadilha Surpreendente de Alocação de Memória em Go: Uma História de Regressão de 30%

Uma refatoração aparentemente inócua em um projeto Go levou a uma regressão de desempenho de 30%. O culpado foi o método `GetBytes` da struct `ImmutableValue`, que usava um receptor de valor, causando uma alocação de heap a cada chamada. Alocação de heap é significativamente mais cara do que alocação de pilha. A causa raiz foi a análise de escape do compilador Go sendo imprecisa; ele falhou em reconhecer que o receptor de valor não escaparia. Mudar para um receptor de ponteiro resolveu o problema. Este caso destaca a importância de entender as decisões de alocação de memória do compilador Go e usar tipos de receptor apropriados para código Go de alto desempenho.

Leia mais
Desenvolvimento

Cursor: Editor de código com IA – Hype versus Realidade

2025-03-29
Cursor: Editor de código com IA – Hype versus Realidade

Um desenvolvedor do banco de dados Dolt testou o editor de código com IA, Cursor, para verificar se ele atende ao hype de 10x de produtividade. Tentativas iniciais usando o Cursor em uma base de código grande foram decepcionantes, com a depuração se mostrando trabalhosa. No entanto, ao criar um novo projeto, o Cursor se destacou, gerando um mod do Factorio em poucas horas. Em um projeto de trabalho, o Cursor gerou eficientemente a funcionalidade básica, mas exigiu refatoração significativa. O autor conclui que o Cursor proporcionou um aumento de produtividade de cerca de 50%, muito abaixo dos 10x anunciados, citando limitações no manuseio de código complexo e na compreensão de bases de código existentes.

Leia mais
Desenvolvimento Editor de código