Zope is an interesting piece of software that allows the creation and
management of dynamic web sites. Perhaps you have used a ZWiki already,
an application that offers and invites modifications of its web pages by
its user community.
Next to the new 2.3.2 version of Zope, the final version of the Zope
You can download the online version from
The book is published by New Riders Publishing, in the same generous way
Pennington's GTK+ book, or the Goat Book on the GNU autotools.
If you like it, support these folks by buying the dead tree version!
Today (Friday, May 4, 2001) Slashdot posted an article
that outlines the benefits of an OODBMS. There were a lot of posts,
most of which shot down the idea of using an OODBMS, giving a number of
reasons why it is impractical.
Well, I'm here to explain that an object-oriented database really
does work, specifically ZODB, which is a component of Zope.
- To write RDBMS oriented software I have to write the schema and the
application. With ZODB I only have to write the application.
- Schema changes: Python deals so gracefully with changes to the
application classes that in practice, it is rare to need to update the
database to match the schema. Sometimes a "live update" trick is needed,
but if you grep for "__setstate__" in the Zope source code (which has
been evolving for years now) I think you'll find the need is quite rare.
- Skills availability: To the programmer, ZODB is but a thin layer
above Python. Python is easy to learn and rapidly growing in popularity.
- Scaleability: ZODB includes a "BTrees" module which lets you store
and retrieve individual records of large data sets. And of course
there is ZEO, now open source, which turns ZODB into a fully distributed
- Pluggable backends: ZODB can use a flat file for storage, an Oracle
database, or (recently available) Sleepycat's popular BerkeleyDB. An
object-relational mapping will probably be another backend in the
Now, I can see that an OODB would have major problems with more
tightly constrained languages. Both C++ and Java would probably throw a
fit if you tried to deserialize an object that was created with an older
version of a class. But Python merrily lets you do it, and that makes
all the difference IMHO.
If you'd like to use ZODB independently of Zope, I recommend you take
a look at Andrew M. Kuchling's
programming guide. But you should also try Zope itself to see that an OODBMS really
is a good idea.