We have seen that existing classifications focus only on address translation techniques. While address translation is an important issue, it constitutes only one of several design issues that must be considered when implementing persistence. We have identified a set of design issues that we believe are fundamental to efficient implementation of any persistence mechanism. We believe that a specific combination of these issues can be used to characterize any particular implementation. In effect, we are proposing a general classification scheme based on granularities of fundamental design aspects.
A classification based on ``eager'' and ``lazy'' swizzling is ambiguous, because it does not attack the problem at the right level of abstraction. The real issue in the distinction between lazy and eager swizzling is the size of the unit of storage for which address translation is performed. This can range from as small as a single reference (as in Moss's ``pure lazy swizzling'' approach) to a virtual memory page (as in pointer swizzling at page fault time), or even as large as an entire database (as in Moss's ``pure eager swizzling'' approach).5
We believe that it is preferable to consider address translation (and other design issues) from the perspective of a granularity choice rather than an ad hoc classification based on confusing translation semantics. In fact, the ambiguity arises primarily because the classifications either do not clearly identify the granularity, or, because they unnecessarily adhere to a single predetermined granularity. Discussing all design issues in terms of granularity choices provides a uniform framework for identifying the consequence of each design issue on the performance and flexibility of the resulting persistence mechanism. This is preferable to ambiguous classifications such as eager and lazy swizzling because many schemes are both ``eager'' and ``lazy'' at different scales, along several dimensions.