Es scheint, dass es in gängigen Abfragesprachen für relationale Datenbanken möglich ist, Abfragen zu erstellen, für deren Beantwortung viele Ressourcen erforderlich sind. In der Praxis verwalten Datenbankadministratoren dies, indem sie die Speichermenge pro Abfrage begrenzen und nach lang laufenden Abfragen suchen, wenn die Datenbank langsamer wird. Dies scheint eher ad-hoc zu sein. Gibt es eine TCS-Lösung dafür?
Gibt es Abfragesprachen, die nur effiziente Abfragen implementieren können?
Wenn es keine solchen Sprachen gibt, gibt es dafür einen theoretischen Grund?
Einige Gründe, warum ich erwarten könnte, dass solche Dinge existieren oder zumindest Sinn machen:
- Wir haben Programmiersprachen, die speziell dafür entwickelt wurden, nur effiziente Berechnungen zu implementieren (normalerweise durch eine restriktive Logik in ihrem Typsystem).
- Beliebte Abfragesprachen (wie SQL) sind bereits von der Logik inspiriert, sodass es für Datenbankbenutzer nicht schwierig erscheint, restriktivere Logiken in Betracht zu ziehen.
- Ein nicht böswilliger Datenbankbenutzer versucht bereits, Abfragen vorzubereiten, die schnell ausgeführt werden. Daher sollten wir erwarten, dass diese restriktiveren Abfragesprachen nur böswillige Benutzer behindern.
Diese Frage ist inspiriert von der Überschneidung zweier vorheriger Fragen:
cc.complexity-theory
pl.programming-languages
db.databases
finite-model-theory
Artem Kaznatcheev
quelle
quelle
Antworten:
Eine Möglichkeit, Datenbankabfragesprachen zu betrachten, besteht in der Linse deduktiver Datenbanken , in denen Abfragen als Logikprogramme dargestellt werden. In dieser Einstellung ist McAllester's On the Complexity Analysis of Static Analysis die relevanteste Arbeit im Zusammenhang mit Ihrer Frage. Dabei wurde festgestellt, dass Sie über die Laufzeit einer Abfrage nachdenken können, indem Sie über die Anzahl der "Präfix-Zündungen" in den Regeln Ihrer Abfrage nachdenken Programm. Was für ein "Präfix-Feuern" ist, ist nicht besonders kompliziert, aber ich werde Sie dafür auf das Papier verweisen.
In der Welt der funktionalen Programmierung wird dies als Kostensemantik bezeichnet : Dies bedeutet nicht, dass Sie nur effiziente Abfragen (Programme) implementieren können, sondern dass Sie die asymptotische Komplexität Ihres deklarativen Programms auf vernünftige Weise begründen können .
Einige spätere Arbeiten zur Umsetzung von McAllesters Ideen umfassen Von Datenloggeregeln zu effizienten Programmen mit Zeit- und Raumgarantien (Liu und Stoller) und Dedalus: Datenlog in Zeit und Raum (Alvaro, Marczak, Conway, Hellerstein, Maier und Sears). Ich gebe jedoch zu, dass ich das letztere dieser beiden Papiere noch nicht gelesen habe.
quelle