Hello! I have started to experiment with Durus. First, I'd like to understand what are object-oriented databases in general. I have some (very little) experience with ZODB; I did a search on papers on OODBs; I spent some time reading the source code of some Zope Products that use ZODB, most notable is TextIndexNG. Below is what I've found. Would you be so kind to look at it and say if I get it right? Thank you in advance! My English is a bit rough, sorry. Any correction will be appreciated. BTW, is "OODBs" the correct plural form? Object-oriented databases. An OODB stores objects; actually serialized images of objects, and serializes and deserializes objects at needs. An OODB assigns every object an OID (object ID) and stores a global mapping from OIDs to objects. A user can and should create "indices" - mappings from keys to objects (or OIDs). These indices help to fetch objects; they also are there to be iterated over, so the user does not need to fetch and test an every object in the loop (which can be quite memory- and time-consuming) - it is enough to iterate over an index and fetch only those objects that the user really needs; the index iteration is usually optimized time- and memory-wise. Serialized objects are the only "things" in a database. Indices are also such objects. Storing and fetching objects are the only operations (beside administration tasks, like packing) of an OODB. Removing objects is (sometimes? usually? always?) implemented as a modification of the parent object - the OODB breaks the link between the parent and the child, and stores the modified parent object. Index iteration is not a task of the OODB - indices are just special iterable objects (sequences or enumerators), usually implemented as (binary) trees for efficiency. Creating and deleting objects (including indices), and iterating over indices are main (if not the only) tasks related to OODBs that a user performs. All other manipulations with objects are outside the scope of OODBs, though OODBs that support automatic persistence take notes when objects are modified and store (serialize) new and modified objects at the end of a transaction. When developing programs a user is mainly confronted with the following 4 problems related to OODBs: * devise an object scheme - classes, attributes, object hierarchies; * name the objects (create indices); * upgrade (change) the object scheme; * remember to update all indices whenever an object is created, modified or deleted. Oleg. -- Oleg Broytmann http://phd.pp.ru/ phd@phd.pp.ru Programmers don't die, they just GOSUB without RETURN.