Parece que en los lenguajes de consulta populares para bases de datos relacionales, es posible crear consultas que requerirán muchos recursos para responder. En la práctica, los administradores de bases de datos administran esto limitando la cantidad de memoria por consulta y verificando si hay consultas de larga duración si hay una desaceleración en la base de datos. Esto parece bastante ad-hoc, ¿hay una solución TCS para esto?
¿Existen lenguajes de consulta que solo pueden implementar consultas eficientes?
Si no hay tales idiomas, ¿hay alguna razón teórica para esto?
Algunas razones por las que podría esperar que este tipo de cosas existan o al menos tengan sentido:
- Tenemos lenguajes de programación que están específicamente diseñados para implementar solo cálculos eficientes (generalmente al tener cierta lógica restrictiva en su sistema de tipos)
- los lenguajes de consulta populares (como SQL) ya están inspirados en la lógica, por lo que no parece una exageración para los usuarios de bases de datos considerar lógicas más restrictivas.
- un usuario de base de datos no malintencionado ya intenta preparar consultas que se ejecutan rápidamente, por lo que deberíamos esperar que estos lenguajes de consulta más restrictivos solo obstaculicen a los usuarios maliciosos.
Esta pregunta está inspirada en la intersección de dos preguntas anteriores:
cc.complexity-theory
pl.programming-languages
db.databases
finite-model-theory
Artem Kaznatcheev
fuente
fuente
Respuestas:
Una forma de ver los lenguajes de consulta de la base de datos es a través de la lente de las bases de datos deductivas , donde las consultas se representan como programas lógicos. En esta configuración, el trabajo más relevante relacionado con su pregunta es el análisis de complejidad de los análisis estáticos de McAllester , que observó que puede razonar sobre el tiempo de ejecución de una consulta razonando sobre el número de "disparos de prefijo" en las reglas de su programa. Lo que es un "disparo de prefijo" no es terriblemente complicado, pero lo remitiré al periódico para eso.
En el mundo de la programación funcional, este tipo de cosas se llaman semántica de costos : no significa que solo pueda implementar consultas (programas) eficientes, sino que puede razonar sobre la complejidad asintótica de su programa declarativo de una manera razonable .
Algunos trabajos posteriores sobre implementaciones de las ideas de McAllester incluyen desde reglas de registro de datos hasta programas eficientes con garantías de tiempo y espacio (Liu y Stoller) y Dedalus: registro de datos en tiempo y espacio (Alvaro, Marczak, Conway, Hellerstein, Maier y Sears). Sin embargo, admito que aún no he leído el último de esos dos documentos.
fuente