AgileWiki COODBMS - The Copy-on-write OODBMS. CowDb, which COODBMS builds on, was all about raw capability: fast deep copies, b-trees, extensible hashes and lists. The purpose of COODBMS is to organize all that stuff into something much more usable. The basic idea here is that objects can be grouped together into simple trees, and the trees in turn are organized as a non-cyclic graph (much like a family tree). We call these trees Rolons.
A Brief Introduction to Rolons
COODBMS adds a powerful organizational structure to CowDb: Rolons.
You can think of a Rolon as a simple tree structure. There are four subtrees (or Units):
· Classifier Unit - Specifies the relations the Rolon has with other Rolons.
· Descriptor Unit - Defines the Rolon's behavior.
· Ledger Unit - Holds the Rolon's state.
· Journal Unit - Tracks the activities in which the Rolon has participated.
The nodes under each Unit are called Sections and the leaves of the tree are called Section Entries.
Rolons themselves are organized as a non-cyclic graph or bush structure, similar to a family tree where a Rolon can have multiple parents and multiple children. The resulting structure can be quite arbitrary and is only intended to make it easy to locate Rolons of interest (one means, anyway), but useful structures tend to be ontological in nature.
Now the power of COODBMS does not derive from the implementation, but from the fact that its organizational structure is universally applicable to all applications. This allows us to develop generic operations which would otherwise be application-specific.
We can reduce OO to this: Data + Logic -> Objects. But in rolonics we look at things this way: Relations + Behavior + State + Activity -> Rolons. Rolonic theory then divides meta data into Relations and Behavior, while adding the history of the activities the Rolon has participated in. It is this comprehensive and structured way of looking at things which makes Rolonics so powerful.
Another difference between OO and Rolonics is Context. In Rolonics, every Rolon, Section and Section Entry has access to the environment it operates in. This is implemented using an Inversion-Of-Control (IOC) method which provides every object with information about its context. COODBMS extends the context provided by CowDb with the methods getMyRolon() and getMyUnit.
In COODBMS, the JUnit itself is a calendar, as can be a Ledger, Descriptor or Classifier section. Calendars are essential for recording activity and for planning. Like almost everything else, COODBMS barely touches this topic. JOODBMS, the next layer over COODBMS, dives much deeper into this aspect.
In CowDb terms Rolons are always First Class Objects, which means they are under an Index. The Units and Sections subclass PList or PLargeTable. And the Section Entries can be any PObject.
To join Rolons into a larger structure, each Rolon will contain a Parents and a Children Classifier Section. These CSecs will hold a list of PHandles which contain the names of other Rolons in the same Index. The reference counting logic is also modified so that a Rolon which is not well known and which has no parents will be deleted. And as Rolons are organized as a non-cyclic graph, reference counting works quite nicely.
Pathnames and pathname resolution is also augmented, though note that a rolon can have multiple pathnames. When a pathname is created for a rolon, the first parent in the parent CSec is used.
Rolonic elements are created using the same methods as are used in CowDb, but note that a Rolon can only be created in an Index (Rolons being First Class Objects) and Sections can only be created in a Unit or another Section. (Sections being the nodes of the tree whose root is a Unit.
What's New in This Release:
· There are no known bugs as of this release, which includes fixes for caching problems, memory leaks, and navigation of past time.
· Multi-threaded stress testing has also been completed successfully.