Current
Implementations
PerDiS
PerDiS
[] is a persistent distributed store, supporting persistence by reachability
(PBR) and garbage collection. PerDiS adopts a two-level address scheme, which
organizes objects into clusters. Invisible to programmers, a cluster is
implemented as a collection of segments, consisting of contiguous pages.
PerDiS uses a special variant of malloc to allocate persistent objects. To
access a persistent object, the programmer first uses a pathname to open a
cluster, stored as a file, and then uses a character name to obtain a pointer
the object. On a page fault, a process named PerDiS Daemon (PD) fetches
the requested object and takes a pointer swizzling. For keeping
consistency, transaction control is supported.
PJama
PJama
[] is formerly called PJava or Persistent Java, supporting persistence by
reachability. A PJama program has a flat persistent address space, where PJavaStore
is the root of persistence from which all persistent objects are reachable. To
access a persistent object, the programmer uses a character name to obtain a
reference of the root object that the requested object is organized in, and
references the requested object through the root object. On an object fault,
the requested object is fetched and an early swizzling or a lazy
swizzling [7] will occur.
ObjectStore
ObjectStore
[] is a client-server object database, supporting persistence by declaration:
it uses a special variant of operator new and delete to create and destroy
persistent objects. ObjectStore adopts a four-level address scheme, which
organizes objects into clusters, clusters into segments, segments
into databases. To access a persistent object, programmers first use a
pathname to open a database; then use a character name and a type descriptor
named typespec to retrieve a pointer of the root object that the
requested object is organized in; finally retrieve a pointer to the requested
object from the root object. Besides, the programmer can pass a 32-bit integer
to os_database::get_segment() to obtain a pointer of a segment, while calling
os_segment::get_all_object_clusters() to enumerate a pointer to a cluster [69].
On a page fault, the requested object is fetched and a pointer swizzling
will occur.
Texas
Texas
[] is a single machine object store, supporting persistence by declaration:
it uses a special variant of operator new and delete to create and destroy
persistent objects. Similar to PJama, Texas supports a flat persistent space,
where all persistent objects are stored in a persistent heap associated with a
file. Invisible to programmers, a store is structured as a collection of pages.
The programmer uses a normal pointer to access a persistent object, fetched on
a page fault followed by a pointer swizzling.
Mneme
Mneme
[] is a persistent distributed store, supporting persistence by declaration:
it uses functions MnObjectCreate and MnObjectCreatePtr to create persistent
objects. Mneme adopts a two-level address scheme, organizing objects into file.
To enable multiple managing strategies for objects, Mneme introduces pool,
where persistent objects are created. To access a persistent object,
programmers first use a pathname to open a file, and then use an object
identifier, a 32-bit integer, to obtain a pointer to the requested object
through a handle. The latter process is called an object fault. Mneme
supports transactions and recovery.
Other
Persistent Systems
The
following table is a brief survey of some existing persistent object systems. For
lack of documents, there may be something missed. However, the purpose of this
survey is to compare some major features in various persistent object system
designs. Some abbreviations are listed in the note below the table.
Comparisons of some
persistent object systems
|
Name |
Type |
Supported languages |
Distribution Support |
Persistence Model |
Approaches |
|
PerDiS |
|
C, C++ |
Transaction support |
PBR |
Pointer swizzling based on page fault |
|
PJama |
|
Java |
Yes |
PBR |
Swizzling on object fault |
|
ObjectStore |
|
C++, Java |
Client/server |
PBD |
Pointer swizzling based on page fault |
|
Khazana |
|
C++ |
|
|
Flat shared address space |
|
Shore |
|
C++ |
Peer-to-Peer |
PBR |
Registered objects |
|
Thor |
|
Theta, C++ |
Client/server |
PBR |
Lazy pointer swizzling + surrogate |
|
Mneme |
|
Smalltalk, Modula-3 |
Transaction support |
PBD |
Object fault |
|
Texas |
|
C++ |
No |
PBD |
Pointer swizzling at page-fault time |
|
Objectivity |
|
C++, Java, Smalltalk |
Client/server |
PBR for Smalltalk; PBI for DB/C++/Java |
No swizzling |
|
O2 |
Database |
C, C++ |
Client/server |
PBD and PBR |
No swizzling Hash tables are used for mapping |
|
Cricket |
Database |
|
|
|
|
|
QuickStore |
|
C++ |
Client/server |
- |
Pointer swizzling based on page fault |
|
LOOM |
|
Smalltalk |
- |
- |
Swizzling based on object fault |
Note:
An
Address scheme refers to a persistent address scheme but not a memory address
scheme
An
ID refers to an identifier
PBR
refers to persistence by reachability
PBD
refers to persistence by declaration
PBI refers to persistence by inheritance