La plupart des bases de données réexécutent les requêtes à partir de zéro à chaque fois, ce qui rend la latence de lecture proportionnelle à la complexité de la requête et à la taille des données. Readyset adopte une approche différente : il compile chaque requête en un graphe de flux de données—un réseau d'opérateurs (jointures, filtres, agrégations, projections) qui maintient en continu le résultat de la requête à mesure que les données changent. Lorsqu'une ligne est insérée, mise à jour ou supprimée en amont, le changement se propage à travers le graphe, et le résultat mis en cache est mis à jour de manière incrémentielle. Les lectures deviennent des recherches dans une vue matérialisée pré-calculée, et non des exécutions complètes de requêtes.
Cette architecture impose des contraintes structurelles sur SQL. Les jointures binaires nécessitent des prédicats d'égalité ; les prédicats de plage ou les clés de jointure basées sur des expressions ne sont pas pris en charge. Les sous-requêtes corrélées doivent être réécrites en jointures équivalentes, car le flux de données n'a pas d'exécution par ligne externe. Les tables dérivées sont prises en charge mais se compilent en nœuds intermédiaires entièrement matérialisés ; le pipeline de réécriture les inline de manière agressive là où c'est sûr.
Les types de jointure pris en charge incluent INNER, LEFT OUTER et CROSS ; RIGHT et FULL OUTER ne sont pas pris en charge en raison de la difficulté à suivre les correspondances manquantes. Les agrégations nécessitent des références explicites aux colonnes GROUP BY et au moins une projection dérivée d'agrégation.
Le compromis est que les requêtes doivent être exprimées sous une forme que le moteur de flux de données peut compiler—plus restrictive que le SQL standard—mais la récompense est une maintenance incrémentielle et des lectures plus rapides.
Source: Hacker News · Résumé par HeadlinesBriefing