Warning: Can't synchronize with the repository (Unsupported version control system "darcs": Can't find an appropriate component, maybe the corresponding plugin was not enabled? ). Look in the Trac log for more information.

Major components:

  • Slot value storage (on disk hash or just btree?)
  • Btree Library
  • Transaction Management
  • Support for garbage collection?
  • Multidimensional indexing such as Bkd-trees or R-trees?
  • Persistent heap?

Design tradeoffs:

Slot value storage issues:

  • Do we lock individual slot values (like the BDB data store) or entire class objects?
  • Do we use a hashing model, or just reuse the Btree library?

Btree library: binary fixed-size page approach vs. using and serializing a lisp Btree node object

  • Messing with binary pages adds complexity but probably saves effort.
  • If we use lisp structures for the BTree node (an alist, for example) then we don't know the size of a node until it is serialized at which time we may have to move it or split it up. Maybe this is fine.
  • If we design the abstraction right, we could start with one and move to the other.

Transaction management:

  • Fine-grained locking model vs. optimistic concurrency (versioned objects ala Rucksack?)
  • Does our solution involve deadlocks? How to unwind?

Multi-process support:

  • Centralized server or replication?
  • Distributed transactions?

Transactional block-store layer: What about a layer of the program that handles reading/writing to disk, transactions, and multi-process/-machine support. This layer could exist as a separate library and building efficient Btree/heap/hash/etc. persistent data structures would be a separate matter. The main transactional grunt work would be done by the block store and could be reused for other projects. --rdaly