1 Introduction
Elephant is a persistent object database for Common Lisp that
supports storing CLOS objects and most lisp primitives.
It supports persistent collections via a BTree interface.
Elephant was originally developed as an interface layer on top
of the Sleepycat / Berkeley DB library, a widely-distributed
embedded database. Many unix systems have it installed by default.
Berkeley DB is ACID compliant, transactional, process and
thread safe, and fast relative to relational databases. Recently,
Elephant was extended to provide support for relational database backends.
It has been tested with Postgres and SQLite 3. It supports, with some
care, simultaneous multi-repository operation and enables convenient
migration of data between repositories.
The support for relational backends and migration to the LLGPL was to
allow for broader use of Elephant in both not-for-profit and commercial
settings.
Elephant goals:
- Transparency: most Lisp values are easy to persist without
signifcant effort or special syntax. Talk to the DB entirely from Lisp;
not requirement for domain-specific languages (such as SQL) to access persistent
resources. Enable interactive control of the database with no external
server dependencies.
- Safety: ACID, transactions. Concurrent with good multi-user and
multi-threaded semantics, isolation, locking and deadlock detection.
(Deadlock detection does require an external process to be launched)
- Simplicity: a small library with few surprises for the
programmer. Lisp and Berkeley DB together are an excellent substrate;
Elephant tries to leverage their features as much as possible.
Support for multiple backends should be load-time options and mostly
transparent to the user.
- Performance: leverage Sleepycat performance and
reliability. In addition to fast concurrent / transactional modes,
elephant will (eventually) offer an accellerated single-user as
well as in-memory modes that should be comparable to prevalence
style solutions, but leverage a common interface.
- Historical continuity: Elephant does not try to innovate
significantly over prior Lisp persistent object stores such as
AllegroStore (also based on Berkeley DB), the new AllegroCache,
the Symbolics system Statice and PLOB. Anyone familiar with
those systems will recognize the Elephant interface.
- License Flexibility: Elephant is released under the LLGPL.
Because it supports multiple implementation of the backend, one
can choose a backend with licensing and other features appropriate
to your needs.
Join the Elephant mailing lists to ask your questions and
receive updates. Pointers can be found on the Elephant website at
http://www.common-lisp.net/project/elephant.
Installation documents can be found in the file INSTALL.
Opportunities to contribute can be found in the file TODO.