Optimizing database-backed applications with query synthesis

Alvin Cheung, Armando Solar-Lezama, Samuel Madden
2013 SIGPLAN notices  
Object-relational mapping libraries are a popular way for applications to interact with databases because they provide transparent access to the database using the same language as the application. Unfortunately, using such frameworks often leads to poor performance, as modularity concerns encourage developers to implement relational operations in application code. Such application code does not take advantage of the optimized relational implementations that database systems provide, such as
more » ... icient implementations of joins or push down of selection predicates. In this paper we present QBS, a system that automatically transforms fragments of application logic into SQL queries. QBS differs from traditional compiler optimizations as it relies on synthesis technology to generate invariants and postconditions for a code fragment. The postconditions and invariants are expressed using a new theory of ordered relations that allows us to reason precisely about both the contents and order of the records produced complex code fragments that compute joins and aggregates. The theory is close in expressiveness to SQL, so the synthesized postconditions can be readily translated to SQL queries. Using 75 code fragments automatically extracted from over 120k lines of open-source code written using the Java Hibernate ORM, we demonstrate that our approach can convert a variety of imperative constructs into relational specifications and significantly improve application performance asymptotically by orders of magnitude. List getRoleUser () { 2 List listUsers = new ArrayList(); 3 List users = this.userDao.getUsers(); 4 List roles = this.roleDao.getRoles(); 5 for (User u : users) { 6 for (Roles r : roles) { 7 if (u.roleId().equals(r.roleId())) { 8
doi:10.1145/2499370.2462180 fatcat:q67ysla4ybc3jnrhx4jgdespkq