La mayoría de las bases de datos re-ejecutan consultas desde cero cada vez, haciendo que la latencia de lectura sea proporcional a la complejidad de la consulta y al tamaño de los datos. Readyset adopta un enfoque diferente: compila cada consulta en un gráfico de flujo de datos—una red de operadores (uniones, filtros, agregaciones, proyecciones) que mantiene continuamente el resultado de la consulta a medida que los datos cambian. Cuando se inserta, actualiza o elimina una fila en el upstream, el cambio se propaga a través del gráfico, y el resultado en caché se actualiza incrementalmente. Las lecturas se convierten en búsquedas en una vista materializada precomputada, no en ejecuciones completas de consultas.
Esta arquitectura impone restricciones estructurales en SQL. Las uniones binarias requieren predicados de igualdad; los predicados de rango o las claves de unión basadas en expresiones no son compatibles. Las subconsultas correlacionadas deben reescribirse en uniones equivalentes, ya que el flujo de datos no tiene ejecución por fila externa. Las tablas derivadas son compatibles pero se compilan en nodos intermedios completamente materializados; el pipeline de reescritura las inlinea agresivamente donde sea seguro.
Los tipos de unión compatibles incluyen INNER, LEFT OUTER y CROSS; RIGHT y FULL OUTER no son compatibles debido a la dificultad de rastrear coincidencias faltantes. Las agregaciones requieren referencias explícitas a columnas GROUP BY y al menos una proyección derivada de agregación.
La compensación es que las consultas deben expresarse en una forma que el motor de flujo de datos pueda compilar—más restrictiva que SQL estándar—pero la recompensa es el mantenimiento incremental y lecturas más rápidas.
Fuente: Hacker News · Resumido por HeadlinesBriefing