Persistent Object Database Persistent Object Database
home Student Projects no local find frame, full screen Google search web for topic jump to footer translate with Babelfish by Roedy Green ©1996-2008 Canadian Mind Products
This essay is about a suggested student project in Java programming. This essay gives a rough overview of how it might work. It does not describe an actual complete program. I have no source, object, specifications, file layouts or anything else useful to implementing this project. Everything I have to say to help you with this project is written below. I am not prepared to help you implement it; I have too many other projects of my own.

I do contract work for a living, which could include writing a program such as this. However, I don’t do people’s homework for them. That just robs them of an education.

You have my full permission to implement this project any way you please.

A persistent object database lets you do two things:
  1. Code as if you had unlimited amounts of virtual RAM for your objects.
  2. Shutdown and restart a program without losing your objects.
There are a number of commercial persistent object databases. The catch is they are all very expensive. The world needs a cheap or free POD (Persisten Object Database) that can be used by students, demos, small businesses and for prototyping large projects,

How could you write a very simple one? Start by implementing the Hermit Crab variable length file class. Use ordinary serialisation to save and restore objects. You can retrieve objects from the hermit crab file by serial number.

Basically you are simulating a segmented virtual memory system with an LRU (Least Recently Used) cache of objects. You need an array indexed by object number. With that array you can find out if the object is currently in RAM, and if so where in RAM it is. If it is not in RAM, you can use the object number to retrieve it. You also have to keep track if each RAM-based object is clean or dirty. Dirty means it has been changed, and eventually the disk copy will have to be updated. The simplest way to implement an LRU is to maintain a chain. Every time an object is touched, you move it to the head of the chain. The object on the tail end of the chain is then the least recently used.

Ideally you would code your application that used the POD as if the POD were not there. Some commercial PODs automatically insert code in your application to help give that illusion. The trickiest part of this project involves techniques to make the POD as transparent as possible. You might want to study some commercial PODs to get some ideas on how to handle this.

Let’s look at some of the problems:

Another totally different approach would spin off some independent jobs and use inter-task communication. You create as big a metavirtual VM as you need by spinning off additional jobs. You serialise the entire thing to disk only at startup and shutdown. A simple version would keep all the objects in a single VM, perhaps even the main VM.

You might like to study a commercial POD before attempting to write your own. See Objectstore and Poet.


CMP_homejump to top
CMP logo
feedback Please email your feedback for publication, errors, omissions, broken/redirected link reports
and suggestions to improve this page to Roedy Green : feedback email
made with CSS
HTML Checked!
ICRA ratings logo
mindprod.com IP:[65.110.21.43]
Your face IP:[38.103.63.16] The information on this page is for non-military use only.
You are visitor number 3,493. Military use includes use by defence contractors.
You can get a fresh copy of this page from: or possibly from your local J: drive (Java virtual drive/Mindprod website mirror)
http://mindprod.com/project/pod.html J:\mindprod\project\pod.html