A maioria dos bancos de dados reexecuta consultas do zero a cada vez, tornando a latência de leitura proporcional à complexidade da consulta e ao tamanho dos dados. Readyset adota uma abordagem diferente: compila cada consulta em um grafo de fluxo de dados—uma rede de operadores (junções, filtros, agregações, projeções) que mantém continuamente o resultado da consulta à medida que os dados mudam. Quando uma linha é inserida, atualizada ou excluída upstream, a mudança se propaga através do grafo, e o resultado em cache é atualizado incrementalmente. As leituras tornam-se buscas em uma visão materializada pré-computada, não execuções completas de consultas.
Esta arquitetura impõe restrições estruturais ao SQL. Junções binárias requerem predicados de igualdade; predicados de intervalo ou chaves de junção baseadas em expressão não são suportados. Subconsultas correlacionadas devem ser reescritas em junções equivalentes, pois o fluxo de dados não tem execução por linha externa. Tabelas derivadas são suportadas, mas compilam em nós intermediários totalmente materializados; o pipeline de reescrita as inline agressivamente onde for seguro.
Os tipos de junção suportados incluem INNER, LEFT OUTER e CROSS; RIGHT e FULL OUTER não são suportados devido à dificuldade de rastrear correspondências ausentes. Agregações exigem referências explícitas a colunas GROUP BY e pelo menos uma projeção derivada de agregação.
A compensação é que as consultas devem ser expressas em uma forma que o mecanismo de fluxo de dados possa compilar—mais restritiva que o SQL padrão—mas a recompensa é a manutenção incremental e leituras mais rápidas.
Fonte: Hacker News · Resumido por HeadlinesBriefing