  Data prefetching aims to improve access times to data storage systems by
predicting data records that are likely to be accessed by subsequent requests
and retrieving them into a memory cache before they are needed. In the case of
Persistent Object Stores, previous approaches to prefetching have been based on
predictions made through analysis of the store's schema, which generates rigid
predictions, or monitoring access patterns to the store while applications are
executed, which introduces memory and/or computation overhead. In this paper,
we present CAPre, a novel prefetching system for Persistent Object Stores based
on static code analysis of object-oriented applications. CAPre generates the
predictions at compile-time and does not introduce any overhead to the
application execution. Moreover, CAPre is able to predict large amounts of
objects that will be accessed in the near future, thus enabling the object
store to perform parallel prefetching if the objects are distributed, in a much
more aggressive way than in schema-based prediction algorithms. We integrate
CAPre into a distributed Persistent Object Store and run a series of
experiments that show that it can reduce the execution time of applications
from 9% to over 50%, depending on the nature of the application and its
persistent data model.
