Wydaje się, że w popularnych językach zapytań dotyczących relacyjnych baz danych możliwe jest tworzenie zapytań, które będą wymagały dużej ilości zasobów. W praktyce administratorzy baz danych zarządzają tym, ograniczając ilość pamięci na zapytanie i sprawdzając, czy w bazie danych nie ma żadnych długotrwałych zapytań. Wydaje się to raczej ad-hoc, czy istnieje rozwiązanie TCS?
Czy istnieją języki zapytań, które mogą implementować tylko wydajne zapytania?
Jeśli nie ma takich języków, czy istnieje teoretyczny powód?
Niektóre powody, dla których mógłbym oczekiwać, że takie rzeczy istnieją lub przynajmniej mają sens:
- mamy języki programowania, które zostały zaprojektowane specjalnie w celu implementacji tylko wydajnych obliczeń (zwykle z ograniczoną logiką w ich systemie typów)
- popularne języki zapytań (takie jak SQL) są już inspirowane logiką, więc użytkownicy bazy danych nie wydają się zbytnio rozważać bardziej restrykcyjnej logiki.
- niegroźny użytkownik bazy danych już próbuje przygotować zapytania, które są wykonywane szybko, więc powinniśmy oczekiwać, że te bardziej restrykcyjne języki zapytań będą utrudniać tylko szkodliwym użytkownikom.
To pytanie jest inspirowane skrzyżowaniem dwóch poprzednich pytań:
cc.complexity-theory
pl.programming-languages
db.databases
finite-model-theory
Artem Kaznatcheev
źródło
źródło
Odpowiedzi:
Jednym ze sposobów patrzenia na języki zapytań do baz danych jest spojrzenie na dedukcyjne bazy danych , w których zapytania są reprezentowane jako programy logiczne. W tym ustawieniu najbardziej istotną pracą związaną z twoim pytaniem jest McAllester's Analiza złożoności analiz statycznych , która wykazała , że możesz uzasadnić czas wykonania zapytania, uzasadniając liczbę „uruchomień prefiksów” w regułach twojego program. To, co jest „odpalaniem prefiksu”, nie jest strasznie skomplikowane, ale odsyłam cię do tego artykułu.
W świecie programowania funkcjonalnego tego rodzaju zjawisko nazywa się semantyką kosztów : nie oznacza to, że można wdrażać tylko wydajne zapytania (programy), ale oznacza, że można rozsądnie uzasadnić asymptotyczną złożoność programu deklaratywnego. .
Późniejsze prace nad wdrożeniami pomysłów McAllester obejmują Od reguł danych do wydajnych programów z gwarancjami czasu i przestrzeni (Liu i Stoller) oraz Dedalus: Datalog w czasie i przestrzeni (Alvaro, Marczak, Conway, Hellerstein, Maier i Sears). Przyznaję jednak, że nie przeczytałem jeszcze tego drugiego z tych dwóch artykułów.
źródło