The world’s 2 billion smartphones represent the most powerful and pervasive distributed system ever built. Open application marketplaces, such as the Google Play Store, have resulted in a vibrant software ecosystem comprising millions of smartphone and tablet apps in hundreds of different categories that both meet existing user needs and provide exciting novel capabilities. As mobile apps and devices become even more central to the personal computing experience, it is increasingly important to understand and improve their performance. In partnership with UB's PhoneLab, we are analyzing SQLite logs from smartphones deployed in the wild.
The usage of embedded databases by smartphone apps differs from traditional database access patterns in two important ways. First, mobile app embedded databases support interactive workloads where queries arrive in bursts separately by long periods of idleness. Thus, raw throughput is a poor way to evaluate their performance, and opportunities exist to reorganize data after interactive bursts to prepare for future requests.
Second, mobile app embedded databases support single apps that may issue queries with very specific properties. For example, our initial analysis has demonstrated that many Android apps use SQLite purely as a key-value store. In other cases, query patterns indicate that apps are using existing object-relational mapping libraries (ORMs) to persist objects, which produce their own distinctive access patterns. We have also seen cases where SQLite database were never updated by apps, indicating that the entire database may serve as a cache of structured app data that is only updated during app upgrades. In all of these cases, the freedom of the embedded database to couple itself tightly to a specific app may open up new optimization opportunities.
To explore these ideas we are beginning by building a smartphone embedded app database benchmark—actually a benchmark generator, which will be able to use traces of database activity to synthesize a benchmark for any app. This feature is critical to ensure that we can support the variety of app database usage patterns and update the benchmark suite easily as they change. We are also evaluating the performance and energy consumption of SQLite, the embedded database provided by default to Android apps, against alternatives such as BerkeleyDB and H-Store.
(PocketData is being developed in collaboration with Geoff Challen and Luke Ziarek, and is supported by NSF Grant #1629791)