News Feed

New features in darcs elephant-1.0 head

February 7th, 2009

Elephant 1.0 Alpha 2

January 15th, 2009
Download it now!

Bug fixes and minor feature enhancements

Elephant 1.0 Alpha 1

January 3rd, 2009

Significant development work has been taking place on the darcs elephant-unstable repository over the past year. The last stable release (0.9.1) is quite stale, lacking many bug fixes and features that are part of the upcoming 1.0 release.

We've decided to release a stable snapshot of the development tree and recommend that all users engaged in active development switch to this version of Elephant. This includes changing your target darcs repository from elephant-unstable to elephant-1.0.

While the Alpha 1 snapshot has not undergone rigorous testing, it is in daily use in a number of live applications and our test suites are currently green for all 0.9.1 and many 1.0 features on all data stores on SBCL/Linux. We invite users of other platforms to help expand the scope of testing of the 1.0 tree to ensure that any platform specific bugs are resolved prior to a final release.

The following new features have been introduced since our last release, 0.9.1, in November 2007.

New slot types
Hierarchical indexed slots
Indexed slots can now index a base class slot as well as all subclasses inheriting that slot. Index inheritance can be inhibited by redefining the slot in a base class.
Virtual derived index slots
A better way to manage derived indexes (the old derived index model is deprecated). You can define a virtual slot that is used to create the index. A slot argument defines the function of slot values that populates the index. Hints are available that inhibit updates to only occur when certain slots are written.
Set-valued slots
A simple API to an unordered aggregate slot using the pset api for access
Many-to-1 and many-to-many associations between slots in two different classes. They also uses a variation of the pset api.
'Checkout' slot caching
A simple means for runtime switching between persistent and transient slot behavior with the ability to sync transient values back to the store. Can buy up to 100x in read/write throughput at the cost of automatic thread safety
Dynamic schema evolution
  • Global persistent instance map (all instances are reachable unless deleted)
  • Each class has a DB schema that stores the class structure
  • Multiple schema versions of a class may exist in the database concurrently
  • Upgrade of DB instances to the latest schema can be done greed or lazily
  • Dereferencing pointers to deleted instances returns nil; this is a lazy form of referential integrity.
Berkeley DB Store
  • BDB 4.7 support (now recommended)
  • Support to globally enable MVCC from my-config.sexp; :mvcc t to open-store and :snapshot t in with-transaction
  • Read/write performance has been improved by up to 2x
  • db_deadlock support deprecated in favor of built-in operators (no external process needed)
Postmodern Store
  • Data caching within large transactions
  • Caching between transactions on a per-thread basis
  • Classes instances can exist in more than one store
  • Multi-store operations are safer (transaction interleaving, for example)
  • Serializer performance enhancements and bug fixes
  • Migration bug fixes as well and upgrade support from 0.9.1
  • Too many bug fixes and small enhancements to enumerate...
Garbage Collection (prototype)

The code base contains a working prototype of an online garbage collector using a mark and sweep strategy. Testing and documentation are not complete but you can experiment with it. Details are available on the mailing list archive from Jan 5th, 2009. Complete functionality will be available in the final release.

Query Language and Interpreter (prototype)

We also have a working sketch of a simple query language for elephant (query.lisp) that uses indices and a preliminary sketch of a query planner and interpreter (query2.lisp) that does something akin to joins. A modestly optimized form of this will be available as part of the final 1.0 release. Comments on the simple constraint language will be appreciated.

There is still much to do to iron down the final release:

Ian Eslick has primary responsibility for the features in this release. Alex Mizrahi, Henrik Hjelte and Robert Read have put in significant work upgrading and improving the SQL backends. Special thanks to Leslie Polzer for various contributions and picking up some of the support slack.

Other noteable contributors to this release in the form of small patches, tracking down hairy bugs, suggestions and documentation include: Christoph Ludwig, Anton Kazennikov, Glen Tarcea, Frank Schorr, Daniel Salama, Lukas Giessmann, Patrick May, Quan Hu, Red Daly, Richard Szopa, Sean Ross, Tiarnan O'Corrain, and Elliott Slaughter. Our apologies if we have left anyone out (email eslick at media mit edu if we have).

Elephant 0.9.1 now available

November 16th, 2007

Elephant 0.9.1 is now officially released.

This release provides official support for using the postmodern interface to Postgres as a back-end store. This back-end is about three times faster than the generic SQL interface on top of Postgres.

Note that existing Postgres repositories are not compatible with a Postmodern repository. However, Elephant supports multi-repository migration. If you have an existing Postgres repository and want to migrate to Postmodern, you should create a completely new Postmodern repository and migrate all of your data into it. The migration can be accomplished with a single command.

If you have been using the (unofficially released) postmodern backend, you will have to migrate your data into a CL-SQL based postgres backend, or into a BDB backend, and then migrate into your new postmodern repository. This release is not compatible with previous (development) versions of the postmodern functionality.

This release has been tested on a 64-bit Linux with SBCL 1.0.10, and other platforms as well. If anybody downloads it and tests it, please run the (large) set of automated tests and report your results to elphant-devel at We will update the platforms page as we receive your updates.

Elephant 0.9 now available

June 7th, 2007
Download it now!

Elephant 0.9 is a significant improvement in stability, platform support and feature set over Elephant 0.6.0, our last major release. This release should be considered a stable release, and any major bugs that are uncovered will be accommodated by a patch release.

Major Features of Elephant 0.9


We are planning a string of interim releases between 0.9 and 1.0, but we recommend that people using Elephant for active web sites and important applications use 0.9 until 1.0 is available. We will not guarantee clean upgrades between 0.9.x releases if the database format changes and cannot guarantee the same level of stability outside these major release milestones. The features planned for the 1.0 release of Elephant are recorded as tickets at the Trac project site.

Visit the documentation page to read the new reference manual and the download page to get the release.

Elephant 0.9 RC1 announced

April 30th, 2007
With the marked improvement in stability and functionality of the code base, the maintainers have decided to abandon the 0.6.1 release label and change the upcoming release to 0.9. This change puts us on a new roadmap leading to a 1.0 release later in 2007.

New features and improvements in release 0.9 RC1

Additional features integrated since the Beta 0.6.1 announcement:

Beta 0.6.1 Release available via CVS

March 21st, 2007

Supported Platforms

Download and Install

The beta release will only be available via CVS. Download the latest development HEAD.

cvs -z3 -d checkout elephant

This will put the elephant release into the directory 'elephant'. Read the INSTALL, UPGRADE and UPGRADE-BDB files for further instructions.

Purpose of the beta release

The tree is effectively a release candidate. We only need to verify OpenMCL, beef up the documentation and examples and make sure we have good test coverage. Otherwise this code base appears stable enough to release.

New features in 0.6.1

The beta release is a more stable version of the feature set in the alpha release. A list of the changes between alpha and beta can be found in the doc/oldfiles/TODO file.

Alpha 0.6.1 Release available via CVS

February 20th, 2007
Supported platforms:

Download and Install

The alpha release will only be available via CVS

cvs -z3 -d checkout -r ELEPHANT-0-6-1-alpha elephant

This will put the elephant release into the directory: elephant. Read the INSTALL, UPGRADE and UPGRADE-BDB files for further instructions.

Purpose of the alpha release

The primary developers do not have ready access to all supported platforms and would like to ask the community to help validate the current implementation on other platforms. We also are using the alpha to improve up our test suite. For more details please see the TODO file. If you have a favorite feature such as multi-threading, 64-bit, etc., please free to submit a test for the test suite.

New features in 0.6.1

See the downloads page for more information.

Release 0.6.0 Available

May 27th, 2006
The latest version is 0.6.0, is offically released as of May 27, 2006. It has been tested on a variety of lisp implementations and with a variety of storage repositories. This release is mainly the work of Ian Eslick, and offers a significant refactoring as well as the very convenient feature of automatic slot indexing. Julian Stecklina submitted a patch for FreeBSD which is in the CVS repository now but not in the 0.6.0 release.