Jak Neutron wykonuje zapytania#
Neutron przetwarza dopuszczony SQL na dokładnych migawkach Iceberg. Jego główna zasada mówi, że pamięć jest budżetem ustalanym przed alokacją, a nie założeniem sprawdzanym dopiero po wzroście procesu.
Dopuszczenie ustala znaczenie#
Warstwa wejściowa zapytania analizuje jedną instrukcję, klasyfikuje nieobsługiwane możliwości, rozwiązuje nazwy jeziora i wybiera migawki. Neutron otrzymuje zamknięty plan i dostęp do tabel o ograniczonym zakresie. Nie może podłączyć dowolnego katalogu ani zmienić prawa odczytu w prawo zapisu.
Wersje dialektu i tabel semantycznych uczestniczą w określaniu tożsamości. Zmiana analizy składni lub semantyki wartości unieważnia założenia pamięci podręcznej, zamiast po cichu ponownie używać wyniku z innego języka.
Jawny budżet pamięci#
Operatory rezerwują pamięć przed zachowaniem wierszy, kluczy, zdekodowanych stron i metadanych zrzutu na dysk. Agregacja skrótowa, złączenia, sortowanie, okna i materializacja mają ograniczone ścieżki stanu. Odczyty spekulacyjne obciążają ten sam budżet co odczyty wymagane.
Gdy kwalifikujące się zapytanie wyczerpie przypisany budżet, Supernova może ponowić je w większej klasie. SQL i wybrane migawki pozostają bez zmian. Zapytanie, które nie mieści się w dostępnym limicie, kończy się błędem, zamiast pozostawiać hostowi niekontrolowane zakończenie z powodu braku pamięci.
Odczyty są ograniczane#
Metadane katalogu identyfikują manifesty, pliki, grupy wierszy i statystyki. Ograniczanie projekcji zapobiega dekodowaniu kolumn, których zapytanie nadrzędne nie używa. Informacje z predykatów mogą wyeliminować pliki i grupy przed przeniesieniem danych.
Metadane i dane używają osobnych, ograniczonych pamięci podręcznych, aby duży zakres danych nie usunął małych manifestów potrzebnych do zaplanowania kolejnego odczytu. Pobieranie i dekodowanie nakładają się w ramach zarezerwowanego budżetu.
Stopniowany determinizm#
Operatory określają zachowanie kolejności, wartości null, liczb zmiennoprzecinkowych, znaczników czasu, liczb dziesiętnych, JSON i kolekcji zgodnie z kontraktem dialektu. Zapytania bez order by nie gwarantują kolejności prezentacji. Zapytania z operacjami wrażliwymi na kolejność dają stałą odpowiedź zgodną z udokumentowaną semantyką.
Neutron może działać obok dotychczasowego silnika na tym samym zapytaniu i migawkach. Porównanie rozróżnia wyniki identyczne, niezależne od kolejności, podlegające tolerancji i nieporównywalne. Sama wydajność nigdy nie przeważa nad niezgodnością wartości.
Błędne wyniki oznaczają uszkodzenie#
Awaria lub odmowa z powodu zasobów jest widoczna i można ją ponowić. Wiarygodnie wyglądający, ale błędny wiersz jest groźniejszy, bo może niezauważenie trafić do modelu lub decyzji. Neutron traktuje więc niezgodność semantyczną jak incydent poprawności: zachowuje dowody, wskazuje pierwszy rozbieżny operator i nie dopuszcza dotkniętej ścieżki do obsługi podstawowej.
To podejście wyjaśnia, dlaczego nieobsługiwane konstrukcje kończą się precyzyjną odmową. Jest ona bezpieczniejsza niż częściowa składnia, która przypadkiem zwraca wiersze.