The AgileWiki project is an application that explores new knowledge representation. It is an attempt to implement, at least in part, Norm Kashdan's Rolonic Theory, a profoundly different approach to time and knowledge representation. CowDb is a high-speed object store over which the next generation of AgileWiki will be written.
The COW Database
With RDBMS technology (and the theory behind it), we have got a good handle on data. But the same can not be said for objects. OODBMS technology has fallen out of favor--it is simply not good for report generation. Part of the problem is a lack of indexing capability. But I have also come to believe that we simply lack the kind of comprehensive theory for objects that we have for data.
CowDb is an Object Store of a different flavor, as the objects are more disk-centric than memory centric, which means that extensible hash tables and b-trees are just another kind of object. The intention here is two fold:
CowDb is a product, not a research project. Speed, robustness and ease of use are essential.
CowDb is a platform for constructing a Rolonic database, Rolonics being that comprehensive theory of objects which has been so sorely lacking.
Here are some key features of "AgileWiki CowDb":
· Light Weight A small memory footprint, but with a configurable cache size.
· Simple Operation Each database has a single disk file. No log files; no before image files.
· Highly robust Fully transactional. Recovery is fast and fully automated.
· Branches (virtual deep copies) can be done at any level.
· Extensible Hashes for fast access to large collections.
· B-Trees for ordered access to large collections. Includes range iterators.
· Long Running Queries An advanced threading model allows long running queries to continue on one branch while updates execute in other branches in the same database.
· Extensible Almost every object used in the implementation has an interface. And the factory pattern is used throughout. New application objects can be defined by subclassing PersistentObject (and extending the factory) or objects can be stored in a container for Serializable POJOs. Byte arrays are also supported.
· Framework Free Injection Of Control (IOC) is used in place of a complex framework. This significantly reduces the complexity as well as making it easier to understand.
· Conditional Compression Large objects are compressed; small objects are not.
· Common Context Object methods and methods both operate within the context of an index, so the same programming style can be used.
· Navigatable Context A transaction can easily migrate from one context to another by selecting another index.
· Pathnames Every object has a pathname by which it can be located.
· Symbolic Links Both direct references (disk offset) and symbolic links (via a pathname) are supported. Symbolics which reference an existing object are updated when the object's pathname changes.
What's New in This Release:
· Dirty cache issues and memory leaks have now been addressed.
· There are no known bugs.