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