Infrequently Noted

Alex Russell on browsers, standards, and the process of progress.

The Non-Relational DB Strikes Back!

When I started at Jot, one of the things I fell most in love with about the platform was the way that application developers on the system never, ever had to think about "the database". You just had nodes (JS objects which could serialize themselves to XML) and nodes had properties. Setting a property on the node persisted it and created a new version of the node.

Instead of thinking about how you were going to represent your problem in objects and then figuring out some way to map them to an RDBMS, you just started figuring out your problem in code, letting the normal development cycle iterations of what a "thing" is continue without stopping after every change to babysit the database or perform some sort of lame (or brittle) "migration". Recently I've been excited to see this kind of work start to evolve in the Django world while aspects of the non-relational data store have been finding more mindshare through projects like CouchDB and ERlang's built-in Mnesia persistence layer, although they all still feel relatively primitive in comparison to the "experimentation is free" environment that Jot offered. Sometimes folks ask my why I don't get into RoR, and every time I look into it again I'm alway struck how....backward it is. Hopefully the rumored gemstone port to ruby will plug up some of the remaining conceptual leaks that the RDBMS addiction has tortured the RoR and DJango app development process with.

Adding to the non-RDBMS data storage action is the announcement by Amazon of their SimpleDB service. It shares some of the best features of the Jot model (easy key/value setting, no schema, query anything) but doesn't yet seem to have the ability to version individual records. Even if SimpleDB doesn't do it, I expect it to pop up in another form somewhere else soon.

I'm tremendously excited about these sorts of services and data stores. It's been clear for some time that most data storage tasks for even departmental applications are main-memory tasks. It'll be interesting to see how the language environments respond to these changes. Microsoft's LINQ integration into .NET languages is the first major stab in this direction, and I expect the next up-and-coming language will probably develop something similar in order to one-up Java and Ruby by making "schema evolution" look more like adding properties to an object or a class prototype (in JS parlance).

Hopefully soon all of this work will soon yield a web framework for general consumption that will show the rest of the world what Jot got dead right: that when your data and your program can evolve in harmony and without friction or risk, you are truly liberated. When storage is free (and it nearly is), "screwing up" should mean starting a fire in your data center. Everything else is just a version rollback.