Thursday, December 31, 2009 -
This will be hard to believe, but you have to believe me. You simply must. I have to get the hell out of here as fast as I can and so far everything I’ve tried is failing. I don’t know how this happened but I’m trapped here in 2009 on New Year’s eve, condemned, it seems, to relive this new year’s eve in Ground Hog Day perpetuity – arguing about data persistence, yet again.
Oh whatever fine – “it was a GREAT DECADE” – feel better? I didn’t mean to insult you but… well you wouldn’t understand anyway. There are so many things… so… many… things. The good thing is that I remember how keyboards work (I’d almost forgotten how cute this little iMac keyboard is – so retro!) and I’m here to deliver a message:
RECORD.
Dude you have a problem, and you’re holding the future back. That’s the only reason I can imagine why I’ve woken up here. I gave up on this whole lame “relational database as storage” argument a long time ago (well, a year in your future) which I can’t even believe I’m talking about again. If you could only know… if you could only see… just … how stupid this discussion has become.
It’s like Scotty discovering transparent aluminum (or aluminium if you’re from the European Republic of Argentina). I’ve been reading over my blog posits during the collation of my digital treatise to the Geek Hall of Fame in Houston and I read over the post I wrote previous to this one and it made me cringe a bit. Made me realize that I probably shouldn’t have just let it go. I didn’t believe in the Connor Paradox until just recently, when my cat disappeared in front of my eyes – replaced by a note that said “you can thank yourself earlier”.
Meh – you won’t get it. The short summary: the future is calling – time to get off the relational short bus.
I know there are reasons you like your relational systems and I’m here to tell you that it’s OK – also that I’m not a dick. The truth of it is that it’s probably better you address your addiction earlier, than later. Apparently I had the chance to push this issue and I didn’t take it, and history, it seems, is not without a sense of irony so here I am – back for a Groundhog Redo.
You’ll be mad (or 骨にひび as they say) but I’ll help you along here: you’ve got it backwards. Relational systems are for HOLDING data, not WORKING data. Your application does that. .NET 6.0 will finally build this in (System.Persistence) so that should be proof enough – here’s a screenshot:
Notice how the date range effects the binary rooting? It’s only a total of 2 minutes!
Anyway – trust me. Everything shifts. People start to realize that the mapping operation which took data, mapped it, and shoved it into the application REPEATEDLY, on every request/instantiation of an object, was ridiculous and cart before the horse-dog!
Thus was born the “Record” operation – built right into the framework – where your objects stay where they are supposed to (in your app) and when certain events happen, they “record” those events to the database. Rather than map on the way in, map on the way out.
Shift in platforms? Sure – it will happen about 3-4 times over the next 10 years but the persistence mechanisms will change with the times. MongoDB for instance supports Rails, C#, PERL, FORCE-CUBE, GLOM, and PreTTyLiTTlPlaTform - it’s also Open Source and because of this adapters/drivers are quick to come around (same for the other persistence engines out there, save Microsoft which only supports the MSPONG format).
Not good tooling? Your application is the tool – either way all of this goes away with the Ubiquitous Format Object (UFO) in the next 3 years. Tooling is really not a good excuse for … well any sort of technology limitation. Plumber shows up and says “I can’t fix your sink because my pipe-wrench isn’t a ReSharper Craftsman – sorry”. Builder Guy says “I can’t lay your tiles because this backer board doesn’t have a uniform hole-pattern on it, I have no idea where to put my nails!”.
Tooling… you’re a coder. Get over it.
Don’t believe me? Dude I just refined a multi-node Record yesterday to span multi-petabyte in just under 30 pica-seconds. I have the screenshot to prove it:
It doesn’t get any sweeter than that.
It’s one of the most stunningly simple things – like [objectional lifestyle] serving in the military – that it’s a wonder it took so long to catch on! The best part is that there are so many ways already to remove the database from your application – I covered most of them in the last post I wrote (well – thank [DIETY] I didn’t cover THAT one) – which one you choose is up to you but I’m here to tell you that you really do need to get a move on this.
No seriously – it needs to happen faster than it’s happening now. Yes I know your reservations and all the fears that keep you up at night – but we’re a bunch of programmers and we can get BEHIND things we need – not just whine about what the MAN won’t give us. Yes some people think that it’s “just not right” to work without a database (can’t believe I’m saying this) but… well history is pretty unkind to them.
Your relational system is there to handle DATA – not program artifacts. "BUT WAIT” you say - “MY PRODUCTS and CATEGORIES ARE DATA!” – actually they’re not. They’re assets/artifacts of your application (something that Fowler II brings up in “Methods of Programming Madness [2013 – Tekpub Press]”). What users do with said assets/artifacts is data – if they buy them, add them to Twitter Purchase Queue or Amazon’s Thought Bucket – that’s what your database needs to know. That’s what you RECORD to your relational system so you can query on it later.
No – you have to do this now. If you wait you’ll give into the most basic of geek responses (“you suck” or “I got a job to do”) and that only makes the issue hard for all of us later on (JDN and Joe Brinkman are co-chair of Houston Alt.net if you can believe it – and they’re not nearly as nice as those other guys were).
I know you’re probably thinking I’m off my rocker in a Governor Bruce Willis fashion (impeachment is too good for him). The truth is that it’s not nearly as Palin as it seems – you’re just not familiar with the idea. You have some asset data that works your application – things like Products or Posts that change little over time and only add descriptive help to the data your business cares about. The reports that fire the decisions. No one cares about the Product necessarily – what they care about is how to sell, if it sells, and who is buying it. This is the value of your application – this needs to be the first thing you think about.
RECORD maps this data to the “effluent” of the application – the user’s selections, activity, output, etc. This information is stored happily in whatever relational system you want – Microsoft’s Holo, Oracle/MySQL Vapor, whatever. Systems designed to answer the questions about “did it sell, to whom, and why”. A transactional system isn’t built to answer these questions – an analytical system is.
Transactional systems were conceived back in the 70s with dumb terminals! Things that had no memory and did what they were told by a larger system. Data had to be transactional as there wasn’t a choice. We have a choice now – we can use these systems in a far, far simpler manner – we can marshal objects in memory, queue them in all kinds of caches – treat them like the objects they are! Not just some record in a row of data!
It’s a mindshift for certain and I wish I could be more gentle with it – but consider this Future Intervention. Believe it or not in my timeline we’re still arguing over this crap – but RECORD is taking hold and slowly people are beginning to recognize there’s a better way (think PERL – Smalltalk actually wins this in my time).
Don’t feel too bummed – it’s not that big of a shift. Honestly the tools get a whole lot better and you’ll be way ahead of the curve. Didn’t you want to get in on the ground floor of some kind of movement? Well this is it. NoSQL is a nice start but they need your help. Moreover they need your code. Things like MongoDB are nice but they need drivers – a Linq driver to be specific, based on C#.
They need good blogs, documentation, training and acceptance. They’re powerful and are ready to pick up where their relational grandparents keeled over years ago– you can help here. You can pitch in and be a good technical citizen and do your part, make a name for yourself – make the difference that will tip the scales and send me back to my own time!
It’s going to take some doing – literally – to change your mind. I can feel you cringing about this – after all it’s all you know since you’ve started programming – working an application on top of a database. It’s just How It Is.
That excuse has been used for many, many things (“it’s the way we’ve done it ferrr yeeeerzzz”) that have served to hold back progress. It’s why that governor from Alaska actually WON! You can do better!
Your future is calling – I need to get out of here and I need to do it fast. I managed to forget most of this decade (thankfully) and being here, with this… Twitter thing chriping – using this frickin KEYBOARD again – it’s really taxxing.
When a developer drops and RDBMS, somewhere a Geek From the Future gets their wings and can go home.
Please send me back.