It’s probably not a good approach for a number of reasons, but every time a new development technology or platform comes along, I first evaluate how I’d develop a theatre ticketing system with it. I reimplemented newts a few times in Java because I didn’t get it remotely correct the first time out, so I know the problem inside and out and it can be extended to an online model for those kinds of technologies. So while it might not be an ideal reference concept, for me it’s a good start.
This past week Amazon announced SimpleDB to extend their web services platform to small, semi-structured, queryable data storage. It really does make you ask the question “What doesn’t their platform provide?”. The answer to that is a transactional data store for non-file data. That’s right, SimpleDB isn’t a database in the currently common understanding of the term. The lack of transactionality and the ‘eventual consistency’ model help hugely in the scaling out methodology used by companies like Amazon, and having seen a couple of presentations about that strategy, I’m a proponent myself.
And for many, many applications which currently use a RDBMS, no transactionality/consistency is fine. In fact, to use my ticketing system example, there’s only one place where I actually need to read and update data atomically, and even that is a single integer associated with each performance. But I really do need it in that one place. I’ve thought about it for a while, and it’s just not optional.
Where does that leave me on the Amazon platform? I think it means I have to install a RDBMS on a couple of EC2 instances and jump through all the annoying hoops to get that to work and be robust and scale. All that for a single atomic integer update.
What could they do to help with this? Well after a little head scratching, what I’d like is to be able to write some distributed transactional/atomic logic on the Amazon platform for these small cases where it’s actually required, and where I’ve considered the scaling implications.
So I’d like a transaction/atomic primitives service. A SimpleAtomic service which lets me create and access simple Locks, AtomicBooleans and AtomicIntegers (similar to the java.util.concurrent classes).
I’m looking forward to discussing this at work and outside as I’m sure the ideas of (1) moving transactions/atomicity logic explicitly into the application and (2) doing transactional work in a scaling environment will be controversial in each environment respectively.