Comparing AWS SimpleDB and Windows Azure Table Storage – Part I

We have a multitude of options for storing data in the cloud. If you are looking for a storage mechanism for fast access to non-relational data, then both the Amazon Web Service (AWS) SimpleDB product and the Microsoft Windows Azure Table storage are viable choices. In this post, I’m going to do a quick comparison of these two products, including how to leverage the .NET API provided by both.

First, let’s do a comparison of these two.

Amazon SimpleDB

Windows Azure Table

Feature

Storage Metaphor

Domains are like worksheets, items are rows, attributes are column headers, items are each cell

Tables, properties are columns, entities are rows

Schema

None enforced

None enforced

“Table” size

Domain up to 10GB, 256 attributes per item, 1 billion attributes per domain

255 properties per entity, 1MB per entity, 100TB per table

Cost (excluding transfer)

Free up to 1GB, 25 machine hours (time used for interactions); $0.15 GB/month up to 10TB, $0.14 per machine hour

0.15 GB/month

Transactions

Conditional put/delete for attributes on single item

Batch transactions in same table and partition group

Interface mechanism

REST, SOAP

REST

Development tooling

AWS SDK for .NET

Visual Studio.NET, Development Fabric

These platforms are relatively similar in features and functions, with each platform also leveraging aspects of their sister products (e.g. AWS EC2 for SimpleDB), so that could sway your choice as well.

Both products provide a toolkit for .NET developers and here is a brief demonstration of each.

Amazon Simple DB using AWS SDK for .NET

You can download the AWS SDK for .NET from the AWS website. You get some assemblies in the GAC, and also some Visual Studio.NET project templates.

In my case, I just built a simple Windows Forms application that creates a domain, adds attributes and items and then adds new attributes and new items.

After adding a reference to the AWSSDK.dll in my .NET project, I added the following “using” statements in my code:

using Amazon;
using Amazon.SimpleDB;
using Amazon.SimpleDB.Model;

Then I defined a few variables which will hold my SimpleDB domain name, AWS credentials and SimpleDB web service container object.

To create attributes and items, we use a PutAttributeRequest object. Here, I’m creating two items, adding attributes to them, and setting the value of the attributes. Notice that we use a very loosely typed process and don’t work with typed objects representing the underlying items.

Summary of Part I

Easy stuff, eh? Because of the non-existent domain schema, I can add a new attribute to an existing item (or new one) with no impact on the rest of the data in the domain. If you’re looking for fast, highly flexible data storage with high redundancy and no need for the rigor of a relational database, then AWS SimpleDB is a nice choice. In part two of this post, we’ll do a similar investigation of the Windows Azure Table storage option.