The Query Transformation Pipeline
🇬🇧 English
Most databases re-execute queries from scratch each time, making read latency proportional to query complexity and data size. Readyset takes a different approach: it compiles each query into a dataflow graph—a network of operators (joins, filters, aggregations, projections) that continuously maintains the query's result as data changes. When a row is inserted, updated, or deleted upstream, the change propagates through the graph, and the cached result is incrementally updated. Reads become lookups into a pre-computed materialized view, not full query executions.
This architecture imposes structural constraints on SQL. Binary joins require equality predicates; range predicates or expression-based join keys are not supported. Correlated subqueries must be rewritten into equivalent joins, as the dataflow has no per-outer-row execution. Derived tables are supported but compile into fully materialized intermediate nodes; the rewrite pipeline aggressively inlines them where safe.
Supported join types include INNER, LEFT OUTER, and CROSS; RIGHT and FULL OUTER are not supported due to the difficulty of tracking absent matches. Aggregations require explicit GROUP BY column references and at least one aggregate-derived projection.
The tradeoff is that queries must be expressed in a form the dataflow engine can compile—more restrictive than standard SQL—but the payoff is incremental maintenance and faster reads.
🇸🇦 العربية
إعادة كتابة SQL من Readyset: خط أنابيب استعلام تدفق البيانات
معظم قواعد البيانات تعيد تنفيذ الاستعلامات من الصفر في كل مرة، مما يجعل زمن الوصول للقراءة متناسبًا مع تعقيد الاستعلام وحجم البيانات. يتخذ Readyset نهجًا مختلفًا: فهو يجمع كل استعلام في رسم بياني لتدفق البيانات—شبكة من العوامل (الانضمامات، المرشحات، التجميعات، الإسقاطات) التي تحافظ باستمرار على نتيجة الاستعلام مع تغير البيانات. عند إدراج صف أو تحديثه أو حذفه في المنبع، ينتشر التغيير عبر الرسم البياني، ويتم تحديث النتيجة المخزنة مؤقتًا بشكل تدريجي. تصبح القراءات عمليات بحث في عرض مادي محسوب مسبقًا، وليس تنفيذات استعلام كاملة.
تفرض هذه البنية قيودًا هيكلية على SQL. تتطلب الانضمامات الثنائية مسندات مساواة؛ مسندات النطاق أو مفاتيح الانضمام القائمة على التعبير غير مدعومة. يجب إعادة كتابة الاستعلامات الفرعية المترابطة إلى انضمامات مكافئة، حيث لا يحتوي تدفق البيانات على تنفيذ لكل صف خارجي. الجداول المشتقة مدعومة ولكنها تُجمع في عقد وسيطة مادية بالكامل؛ يقوم خط أنابيب إعادة الكتابة بتضمينها بقوة حيثما كان ذلك آمنًا.
تشمل أنواع الانضمام المدعومة INNER وLEFT OUTER وCROSS؛ وRIGHT وFULL OUTER غير مدعومة بسبب صعوبة تتبع التطابقات المفقودة. تتطلب التجميعات مراجع أعمدة GROUP BY صريحة وإسقاطًا مشتقًا من التجميع واحدًا على الأقل.
المقايضة هي أنه يجب التعبير عن الاستعلامات بشكل يمكن لمحرك تدفق البيانات تجميعه—أكثر تقييدًا من SQL القياسي—ولكن العائد هو الصيانة التدريجية والقراءات الأسرع.
لماذا يتطلب Readyset انضمامات ثنائية مع مسندات مساواة؟
يحافظ محرك تدفق البيانات في Readyset على حالة الانضمام القائمة على التجزئة باستخدام مسندات مساواة الأعمدة (مثل a.id = b.id). لا يمكن صيانة مسندات النطاق أو مفاتيح الانضمام القائمة على التعبير بشكل تدريجي في سياق التدفق، لذلك فهي غير مدعومة مباشرة.
🇧🇩 বাংলা
Readyset SQL পুনর্লিখন: ডেটাফ্লো কোয়েরি পাইপলাইন
বেশিরভাগ ডাটাবেস প্রতিবার স্ক্র্যাচ থেকে কোয়েরিগুলি পুনরায় কার্যকর করে, যা পড়ার লেটেন্সিকে কোয়েরির জটিলতা এবং ডেটার আকারের সমানুপাতিক করে তোলে। Readyset একটি ভিন্ন পদ্ধতি গ্রহণ করে: এটি প্রতিটি কোয়েরিকে একটি ডেটাফ্লো গ্রাফে কম্পাইল করে—অপারেটরগুলির একটি নেটওয়ার্ক (জয়েন, ফিল্টার, অ্যাগ্রিগেশন, প্রজেকশন) যা ডেটা পরিবর্তনের সাথে সাথে কোয়েরির ফলাফল ক্রমাগত বজায় রাখে। যখন আপস্ট্রিমে একটি সারি সন্নিবেশিত, আপডেট বা মুছে ফেলা হয়, পরিবর্তনটি গ্রাফের মাধ্যমে প্রচারিত হয় এবং ক্যাশে করা ফলাফলটি ক্রমবর্ধমানভাবে আপডেট হয়। পড়া সম্পূর্ণ কোয়েরি এক্সিকিউশন নয়, বরং পূর্ব-গণিত মেটেরিয়ালাইজড ভিউতে অনুসন্ধানে পরিণত হয়।
এই আর্কিটেকচার SQL-এর উপর কাঠামোগত সীমাবদ্ধতা আরোপ করে। বাইনারি জয়েনের জন্য সমতা প্রেডিকেট প্রয়োজন; রেঞ্জ প্রেডিকেট বা এক্সপ্রেশন-ভিত্তিক জয়েন কী সমর্থিত নয়। সম্পর্কযুক্ত সাবকোয়েরিগুলিকে সমতুল্য জয়েনে পুনর্লিখন করতে হবে, কারণ ডেটাফ্লোতে প্রতি বাহ্যিক সারি এক্সিকিউশন নেই। ডেরাইভড টেবিল সমর্থিত কিন্তু সম্পূর্ণরূপে মেটেরিয়ালাইজড ইন্টারমিডিয়েট নোডে কম্পাইল হয়; পুনর্লিখন পাইপলাইন সেগুলিকে নিরাপদ স্থানে আক্রমণাত্মকভাবে ইনলাইন করে।
সমর্থিত জয়েন প্রকারের মধ্যে INNER, LEFT OUTER এবং CROSS অন্তর্ভুক্ত; RIGHT এবং FULL OUTER অনুপস্থিত মিল ট্র্যাক করার অসুবিধার কারণে সমর্থিত নয়। অ্যাগ্রিগেশনের জন্য স্পষ্ট GROUP BY কলাম রেফারেন্স এবং কমপক্ষে একটি অ্যাগ্রিগেট-ডেরাইভড প্রজেকশন প্রয়োজন।
ট্রেডঅফ হল যে কোয়েরিগুলিকে এমন একটি আকারে প্রকাশ করতে হবে যা ডেটাফ্লো ইঞ্জিন কম্পাইল করতে পারে—স্ট্যান্ডার্ড SQL-এর চেয়ে বেশি সীমাবদ্ধ—কিন্তু ফলাফল হল ক্রমবর্ধমান রক্ষণাবেক্ষণ এবং দ্রুত পড়া।
কেন Readyset-এর সমতা প্রেডিকেট সহ বাইনারি জয়েন প্রয়োজন?
Readyset-এর ডেটাফ্লো ইঞ্জিন কলাম-সমতা প্রেডিকেট (যেমন, a.id = b.id) ব্যবহার করে হ্যাশ-ভিত্তিক জয়েন অবস্থা বজায় রাখে। রেঞ্জ প্রেডিকেট বা এক্সপ্রেশন-ভিত্তিক জয়েন কীগুলি স্ট্রিমিং প্রসঙ্গে ক্রমবর্ধমানভাবে বজায় রাখা যায় না, তাই সেগুলি সরাসরি সমর্থিত নয়।
🇩🇪 Deutsch
Readyset SQL-Umschreibung: Datenfluss-Abfrage-Pipeline
Die meisten Datenbanken führen Abfragen jedes Mal von Grund auf neu aus, wodurch die Lese-Latenz proportional zur Abfragekomplexität und Datengröße wird. Readyset verfolgt einen anderen Ansatz: Es kompiliert jede Abfrage in einen Datenflussgraphen—ein Netzwerk von Operatoren (Joins, Filter, Aggregationen, Projektionen), das das Abfrageergebnis kontinuierlich aufrechterhält, während sich die Daten ändern. Wenn eine Zeile im Upstream eingefügt, aktualisiert oder gelöscht wird, breitet sich die Änderung durch den Graphen aus, und das zwischengespeicherte Ergebnis wird inkrementell aktualisiert. Lesevorgänge werden zu Lookups in einer vorberechneten materialisierten Sicht, nicht zu vollständigen Abfrageausführungen.
Diese Architektur erzwingt strukturelle Einschränkungen für SQL. Binäre Joins erfordern Gleichheitsprädikate; Bereichsprädikate oder ausdrucksbasierte Join-Schlüssel werden nicht unterstützt. Korrelierte Unterabfragen müssen in äquivalente Joins umgeschrieben werden, da der Datenfluss keine Ausführung pro äußerer Zeile hat. Abgeleitete Tabellen werden unterstützt, kompilieren jedoch zu vollständig materialisierten Zwischenknoten; die Umschreibungs-Pipeline inline sie aggressiv, wo es sicher ist.
Unterstützte Join-Typen umfassen INNER, LEFT OUTER und CROSS; RIGHT und FULL OUTER werden aufgrund der Schwierigkeit, fehlende Übereinstimmungen zu verfolgen, nicht unterstützt. Aggregationen erfordern explizite GROUP BY-Spaltenverweise und mindestens eine von der Aggregation abgeleitete Projektion.
Der Kompromiss besteht darin, dass Abfragen in einer Form ausgedrückt werden müssen, die der Datenfluss-Engine kompilieren kann—restriktiver als Standard-SQL—aber die Belohnung ist inkrementelle Wartung und schnellere Lesevorgänge.
Warum benötigt Readyset binäre Joins mit Gleichheitsprädikaten?
Die Datenfluss-Engine von Readyset verwaltet den hashbasierten Join-Status mithilfe von Spaltengleichheitsprädikaten (z. B. a.id = b.id). Bereichsprädikate oder ausdrucksbasierte Join-Schlüssel können in einem Streaming-Kontext nicht inkrementell verwaltet werden, daher werden sie nicht direkt unterstützt.
🇪🇸 Español
Reescritura de SQL de Readyset: Pipeline de Consultas de Flujo de Datos
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.
¿Por qué Readyset requiere uniones binarias con predicados de igualdad?
El motor de flujo de datos de Readyset mantiene el estado de unión basado en hash utilizando predicados de igualdad de columna (por ejemplo, a.id = b.id). Los predicados de rango o las claves de unión basadas en expresiones no se pueden mantener incrementalmente en un contexto de streaming, por lo que no son directamente compatibles.
🇫🇷 Français
Réécriture SQL de Readyset : Pipeline de Requêtes de Flux de Données
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.
Pourquoi Readyset nécessite-t-il des jointures binaires avec des prédicats d'égalité ?
Le moteur de flux de données de Readyset maintient l'état de jointure basé sur le hachage en utilisant des prédicats d'égalité de colonne (par exemple, a.id = b.id). Les prédicats de plage ou les clés de jointure basées sur des expressions ne peuvent pas être maintenus de manière incrémentielle dans un contexte de streaming, ils ne sont donc pas directement pris en charge.
🇮🇳 हिन्दी
Readyset SQL पुनर्लेखन: डेटाफ़्लो क्वेरी पाइपलाइन
अधिकांश डेटाबेस हर बार क्वेरी को शुरू से फिर से निष्पादित करते हैं, जिससे पढ़ने की विलंबता क्वेरी जटिलता और डेटा आकार के समानुपाती हो जाती है। Readyset एक अलग दृष्टिकोण अपनाता है: यह प्रत्येक क्वेरी को एक डेटाफ़्लो ग्राफ़ में संकलित करता है—ऑपरेटरों का एक नेटवर्क (जॉइन, फ़िल्टर, एग्रीगेशन, प्रोजेक्शन) जो डेटा बदलने पर क्वेरी के परिणाम को लगातार बनाए रखता है। जब अपस्ट्रीम में एक पंक्ति डाली, अद्यतन या हटाई जाती है, तो परिवर्तन ग्राफ़ के माध्यम से प्रसारित होता है, और कैश किया गया परिणाम वृद्धिशील रूप से अद्यतन होता है। पढ़ना पूर्ण क्वेरी निष्पादन नहीं, बल्कि पूर्व-गणना सामग्री दृश्य में देखना बन जाता है।
यह आर्किटेक्चर SQL पर संरचनात्मक बाधाएं लगाता है। बाइनरी जॉइन के लिए समानता विधेय आवश्यक हैं; रेंज विधेय या अभिव्यक्ति-आधारित जॉइन कुंजियाँ समर्थित नहीं हैं। सहसंबद्ध उपक्वेरी को समतुल्य जॉइन में पुनर्लिखित किया जाना चाहिए, क्योंकि डेटाफ़्लो में प्रति बाहरी पंक्ति निष्पादन नहीं है। व्युत्पन्न तालिकाएँ समर्थित हैं लेकिन पूरी तरह से सामग्री मध्यवर्ती नोड्स में संकलित होती हैं; पुनर्लेखन पाइपलाइन उन्हें सुरक्षित स्थानों पर आक्रामक रूप से इनलाइन करती है।
समर्थित जॉइन प्रकारों में INNER, LEFT OUTER और CROSS शामिल हैं; RIGHT और FULL OUTER लापता मिलानों को ट्रैक करने की कठिनाई के कारण समर्थित नहीं हैं। एग्रीगेशन के लिए स्पष्ट GROUP BY कॉलम संदर्भ और कम से कम एक एग्रीगेट-व्युत्पन्न प्रोजेक्शन की आवश्यकता होती है।
व्यापार-बंद यह है कि क्वेरी को उस रूप में व्यक्त किया जाना चाहिए जिसे डेटाफ़्लो इंजन संकलित कर सके—मानक SQL से अधिक प्रतिबंधात्मक—लेकिन लाभ वृद्धिशील रखरखाव और तेज़ पढ़ना है।
Readyset को समानता विधेय के साथ बाइनरी जॉइन की आवश्यकता क्यों है?
Readyset का डेटाफ़्लो इंजन कॉलम-समानता विधेय (जैसे, a.id = b.id) का उपयोग करके हैश-आधारित जॉइन स्थिति बनाए रखता है। रेंज विधेय या अभिव्यक्ति-आधारित जॉइन कुंजियाँ स्ट्रीमिंग संदर्भ में वृद्धिशील रूप से बनाए नहीं रखी जा सकतीं, इसलिए वे सीधे समर्थित नहीं हैं।
🇮🇩 Bahasa Indonesia
Penulisan Ulang SQL Readyset: Pipeline Kueri Aliran Data
Sebagian besar basis data mengeksekusi ulang kueri dari awal setiap kali, membuat latensi baca sebanding dengan kompleksitas kueri dan ukuran data. Readyset mengambil pendekatan yang berbeda: ia mengompilasi setiap kueri menjadi grafik aliran data—jaringan operator (gabungan, filter, agregasi, proyeksi) yang terus-menerus memelihara hasil kueri saat data berubah. Ketika sebuah baris disisipkan, diperbarui, atau dihapus di hulu, perubahan tersebut menyebar melalui grafik, dan hasil yang di-cache diperbarui secara inkremental. Pembacaan menjadi pencarian ke tampilan materialisasi yang telah dihitung sebelumnya, bukan eksekusi kueri penuh.
Arsitektur ini memberlakukan batasan struktural pada SQL. Gabungan biner memerlukan predikat kesetaraan; predikat rentang atau kunci gabungan berbasis ekspresi tidak didukung. Subkueri berkorelasi harus ditulis ulang menjadi gabungan yang setara, karena aliran data tidak memiliki eksekusi per baris luar. Tabel turunan didukung tetapi dikompilasi menjadi node perantara yang sepenuhnya dimaterialisasi; pipeline penulisan ulang secara agresif inline mereka di tempat yang aman.
Jenis gabungan yang didukung termasuk INNER, LEFT OUTER, dan CROSS; RIGHT dan FULL OUTER tidak didukung karena sulitnya melacak kecocokan yang hilang. Agregasi memerlukan referensi kolom GROUP BY yang eksplisit dan setidaknya satu proyeksi turunan agregasi.
Tradeoff-nya adalah bahwa kueri harus dinyatakan dalam bentuk yang dapat dikompilasi oleh mesin aliran data—lebih restriktif daripada SQL standar—tetapi imbalannya adalah pemeliharaan inkremental dan pembacaan yang lebih cepat.
Mengapa Readyset memerlukan gabungan biner dengan predikat kesetaraan?
Mesin aliran data Readyset memelihara status gabungan berbasis hash menggunakan predikat kesetaraan kolom (misalnya, a.id = b.id). Predikat rentang atau kunci gabungan berbasis ekspresi tidak dapat dipelihara secara inkremental dalam konteks streaming, sehingga tidak didukung secara langsung.
🇯🇵 日本語
Readyset SQL書き換え:データフロークエリパイプライン
ほとんどのデータベースは毎回クエリを最初から再実行するため、読み取りレイテンシはクエリの複雑さとデータサイズに比例します。Readysetは異なるアプローチを取ります:各クエリをデータフローグラフ(結合、フィルター、集約、射影のオペレーターネットワーク)にコンパイルし、データが変化するにつれてクエリの結果を継続的に維持します。上流で行が挿入、更新、または削除されると、変更はグラフを通じて伝播し、キャッシュされた結果がインクリメンタルに更新されます。読み取りは完全なクエリ実行ではなく、事前計算されたマテリアライズドビューへのルックアップになります。
このアーキテクチャはSQLに構造的制約を課します。バイナリ結合には等価述語が必要です;範囲述語や式ベースの結合キーはサポートされていません。相関サブクエリは同等の結合に書き換える必要があります。データフローには外部行ごとの実行がないためです。派生テーブルはサポートされていますが、完全にマテリアライズされた中間ノードにコンパイルされます;書き換えパイプラインは安全な場所でそれらを積極的にインライン化します。
サポートされる結合タイプにはINNER、LEFT OUTER、CROSSが含まれます;RIGHTとFULL OUTERは欠落した一致を追跡する難しさのためサポートされていません。集約には明示的なGROUP BY列参照と少なくとも1つの集約派生射影が必要です。
トレードオフは、クエリをデータフローエンジンがコンパイルできる形式(標準SQLよりも制限的)で表現する必要があることですが、見返りはインクリメンタルなメンテナンスとより高速な読み取りです。
なぜReadysetは等価述語を持つバイナリ結合を必要とするのですか?
Readysetのデータフローエンジンは、列等価述語(例:a.id = b.id)を使用してハッシュベースの結合状態を維持します。範囲述語や式ベースの結合キーはストリーミングコンテキストでインクリメンタルに維持できないため、直接サポートされていません。
🇧🇷 Português
Reescrita de SQL do Readyset: Pipeline de Consulta de Fluxo de Dados
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.
Por que o Readyset exige junções binárias com predicados de igualdade?
O mecanismo de fluxo de dados do Readyset mantém o estado de junção baseado em hash usando predicados de igualdade de coluna (por exemplo, a.id = b.id). Predicados de intervalo ou chaves de junção baseadas em expressão não podem ser mantidos incrementalmente em um contexto de streaming, portanto não são diretamente suportados.
🇷🇺 Русский
Переписывание SQL Readyset: Конвейер запросов потока данных
Большинство баз данных каждый раз выполняют запросы с нуля, что делает задержку чтения пропорциональной сложности запроса и размеру данных. Readyset использует другой подход: он компилирует каждый запрос в граф потока данных — сеть операторов (соединения, фильтры, агрегации, проекции), которая непрерывно поддерживает результат запроса по мере изменения данных. Когда строка вставляется, обновляется или удаляется в вышестоящей системе, изменение распространяется через граф, и кэшированный результат инкрементально обновляется. Чтение становится поиском в предварительно вычисленном материализованном представлении, а не полным выполнением запроса.
Эта архитектура накладывает структурные ограничения на SQL. Бинарные соединения требуют предикатов равенства; предикаты диапазона или ключи соединения на основе выражений не поддерживаются. Коррелированные подзапросы должны быть переписаны в эквивалентные соединения, так как поток данных не имеет выполнения на внешнюю строку. Производные таблицы поддерживаются, но компилируются в полностью материализованные промежуточные узлы; конвейер переписывания агрессивно встраивает их там, где это безопасно.
Поддерживаемые типы соединений включают INNER, LEFT OUTER и CROSS; RIGHT и FULL OUTER не поддерживаются из-за сложности отслеживания отсутствующих совпадений. Агрегации требуют явных ссылок на столбцы GROUP BY и по крайней мере одной проекции, производной от агрегации.
Компромисс заключается в том, что запросы должны быть выражены в форме, которую может скомпилировать механизм потока данных — более ограничительной, чем стандартный SQL — но выгода заключается в инкрементальном обслуживании и более быстром чтении.
Почему Readyset требует бинарные соединения с предикатами равенства?
Механизм потока данных Readyset поддерживает состояние соединения на основе хэша, используя предикаты равенства столбцов (например, a.id = b.id). Предикаты диапазона или ключи соединения на основе выражений не могут быть инкрементально поддержаны в контексте потоковой передачи, поэтому они напрямую не поддерживаются.
🇨🇳 简体中文
Readyset SQL重写:数据流查询管道
大多数数据库每次从头重新执行查询,使读取延迟与查询复杂度和数据大小成正比。Readyset采取不同的方法:它将每个查询编译成一个数据流图——一个操作符网络(连接、过滤、聚合、投影),随着数据变化持续维护查询结果。当上游插入、更新或删除一行时,更改通过图传播,缓存结果被增量更新。读取变成对预计算物化视图的查找,而不是完整的查询执行。
这种架构对SQL施加了结构约束。二元连接需要相等谓词;范围谓词或基于表达式的连接键不受支持。相关子查询必须重写为等效连接,因为数据流没有每外行执行。派生表受支持但编译为完全物化的中间节点;重写管道在安全的地方积极内联它们。
支持的连接类型包括INNER、LEFT OUTER和CROSS;RIGHT和FULL OUTER不受支持,因为跟踪缺失匹配的难度。聚合需要显式的GROUP BY列引用和至少一个聚合派生的投影。
权衡是查询必须以数据流引擎可以编译的形式表达——比标准SQL更严格——但回报是增量维护和更快的读取。
为什么Readyset需要具有相等谓词的二元连接?
Readyset的数据流引擎使用列相等谓词(例如a.id = b.id)维护基于哈希的连接状态。范围谓词或基于表达式的连接键无法在流式上下文中增量维护,因此它们不直接受支持。