Monday, September 18, 2006

Persistence for object oriented languages vs. programmer efficiency

I am about 4 months into a project using a very expensive object persistence mechanism (Franz Lisp AllegroCache) that almost automatically wraps Common Lisp CLOS classes for automatic persistence and B-Tree indexing of as many slots as you want to tag as indexed. As is sometimes is the case, here commercial software tools save time and effort. There is a very interesting open source project for Common Lisp (Elephant) that does something similar by using BerkleyDB or a relational database as the backend - it looks good, but it is not yet an out of the box solution.

For Java work, although I was once a fan of Hibernate, I try to use Prevayler instead: if you add new instance variables to the end of class definitions you can add to your object model without breaking your persistent storage - a neat trick, to be sure.

When it comes to the best programmer productivity using object relational mappers, I personally think that Ruby Rail's ActiveRecord wins hands down - with the slight cost that you design database schema instead of class models.

2 comments:

adam said...

How would you do ORM or DAO in Java with AllegroGraph?

Mark Watson, author and consultant said...

Hello Adam, you would use AllegroCache as an ORM for CLOS classes, and use AllegroGraph to store data as RDF triples (a graph based data store, useful for things like storing friend of friend networks, etc.)

My opinion: Ruby wins the ORM game hands down with either ActiveRecord or DataMapper. DataMapper handles object identify better than ActiveRecord, so perhaps look at DataMaper first.