Ian Eslick sent a nice comparison of Elephant and Rucksack, two Common Lisp persistence systems, to the Elephant development list. It gives an overview of how each system solves implementation problems related to making Lisp objects persistent.
Here's an excerpt from his email:
- Rucksack is a reasonably compact, easy-to-understand system written entirely in Common Lisp. Elephant has complex dependencies between Lisp, C and the architectural commitments of BDB. Elephant performs poorly on SQL today so BDB is the high performance backend. BDB has license issues for even small scale commercial deployment.
- Rucksack has full support for garbage collection, Elephant has minimal off-line support for storage reclamation
- Elephant will allow multiple lisp processes to use the same persistent store concurrently, a Rucksack store is locked to a single lisp instance. Elephant can be configured with BDB replication, allowing for larger-scale deployment.
- Elephant is much more mature and it's disk storage is much more likely to be reliable so it will be some time until Rucksack is sufficiently mature for prime time.
- Rucksack performs object-level collision detection, Elephant performs record-based collision in a paged storage system. This has different implications for how classes should be designed (slot values with large arrays, for instance, should be wrapped in their own persistent class so that writes to other slots does not result in multiple copies of that array).