Wednesday, October 30, 2013
Using DynamoDB, work in progress
At work we're using Amazon Web Services' DynamoDB for a backend. This is early days and a work in progress, but I thought I'd post about what we're doing so far because I've seen so little elsewhere about it.
Our Web framework is Ruby on Rails. Rails is a system that favours convention over configuration. Most RoR developers use ActiveRecord, Rails' built-in system for object modeling and abstracting away SQL database access. If you stay on the rails, this works fantastically. Rails automates or partially automates many tasks and systems, from migrating your data when the model changes, to setting up unit tests that conveniently setup and instantiate the things you want to test. Building on top of this, many Ruby gems extend your Rails functionality in powerful ways (Web UI test automation, authentication and user management, access to social network sites).
As soon as a project starts to diverge from Rails conventions, trouble begins. Trouble may be contained if the difference can be contained and made as conformant as possible to the default components. For example, when writing a API that serves RESTful JSON resources instead of HTML, it's best to figure out how to use views to serve the JSON in the same way that HTML views are generated (a topic of a few posts I did a couple years ago).
Which brings me to Dynamoid. Amazon's Ruby gem for access to DynamoDB is very basic and exposes DynamoDB architecture directly. That can be useful but it doesn't behave anything like ActiveRecord, and in order to use Rails' powerful tools and extensions, we need something that behaves as much like ActiveRecord as possible. The only ActiveRecord replacement for DynamoDB that I could find, that was at all active, was Dynamoid. So I'm pinning my hopes on it. AFAICT so far, it is incomplete but has "good bones". I've already fixed one tiny thing and submitted a pull request, and intend to continue contributing.
Next post will be about testing in this setup.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment