Our goal is to investigate how the functional programming paradigm can be used to develop an alternative approach to database management systems. In this approach, a database system is implemented in a persistent functional language, i.e., a functional programming language with a notion of state. The state is accessed and modified through transaction functions written in the same language, which take as input the current version of the database, and return a new version of the database, together with an observable result.
Functional languages allow us to optimize transaction execution in ways that are currently very hard to do. First of all, the lazy evaluation strategy of a functional language can be exploited to avoid batch updates from blocking access to the database. For example, this allows maintenance to be performed while the database is in use. Moreover, functional transactions can be executed optimistically, where memoization can be used to reduce retry cost of failed transactions. Furthermore, updates in a functional language can be type checked, avoiding a broad class of problems that are common in current databases, such as incorrect processing due to typing errors, and command injection attacks.