Il semble que dans les langages de requête populaires pour les bases de données relationnelles, il est possible de créer des requêtes qui nécessiteront beaucoup de ressources pour répondre. En pratique, les administrateurs de base de données gèrent cela en limitant la quantité de mémoire par requête et en recherchant les requêtes de longue durée en cas de ralentissement dans la base de données. Cela semble plutôt ponctuel, existe-t-il une solution TCS à cela?
Existe-t-il des langages de requête qui ne peuvent implémenter que des requêtes efficaces?
S'il n'y a pas de telles langues, y a-t-il une raison théorique à cela?
Certaines raisons pour lesquelles je pourrais m'attendre à ce que ce genre de choses existent ou au moins aient un sens:
- nous avons des langages de programmation qui sont spécifiquement conçus pour implémenter uniquement des calculs efficaces (généralement en ayant une logique restrictive dans leur système de type)
- les langages de requête populaires (tels que SQL) sont déjà inspirés par la logique, il ne semble donc pas exagéré pour les utilisateurs de bases de données de considérer des logiques plus restrictives.
- un utilisateur de base de données non malveillant essaie déjà de préparer des requêtes qui s'exécutent rapidement, nous devons donc nous attendre à ce que ces langages de requête plus restrictifs ne gênent que les utilisateurs malveillants.
Cette question est inspirée de l'intersection de deux questions précédentes:
la source
Réponses:
Une façon d'examiner les langages de requête de base de données est à travers la lentille des bases de données déductives , où les requêtes sont représentées comme des programmes logiques. Dans ce cadre, le travail le plus pertinent lié à votre question est l'analyse de la complexité des analyses statiques de McAllester , qui a observé que vous pouvez raisonner sur le temps d'exécution d'une requête en raisonnant sur le nombre de "cuissons de préfixe" dans les règles de votre programme. Qu'est-ce qu'un "tir de préfixe" n'est pas terriblement compliqué, mais je vous renvoie à l'article pour cela.
Dans le monde de la programmation fonctionnelle, ce genre de chose s'appelle une sémantique des coûts : cela ne signifie pas que vous pouvez uniquement implémenter des requêtes (programmes) efficaces, mais cela signifie que vous pouvez raisonner de manière raisonnable sur la complexité asymptotique de votre programme déclaratif. .
Certains travaux ultérieurs sur la mise en œuvre des idées de McAllester incluent De règles de journal de données à des programmes efficaces avec des garanties de temps et d'espace (Liu et Stoller) et Dedalus: Journal de données dans le temps et l'espace (Alvaro, Marczak, Conway, Hellerstein, Maier et Sears). J'avoue cependant que je n'ai pas encore lu le dernier de ces deux articles.
la source