
I just received my invitation to begin using Amazon's SimpleDB service, currently in Limited Beta. SimpleDB was launched earlier this year, and is the latest in Amazon's arsenal of services in the cloud. Like all of Amazon's other web services, you pay only for what you use.
From: Amazon Web Services
Greetings from Amazon Web Services,
Thank you for signing up for Amazon SimpleDB. You now have immediate access to Amazon SimpleDB and can build innovative and entrepreneurial applications using this and other AWS web services.
Any usage charges (as applicable to the services you are using) will be billed to your account on your next billing date. Please see the Account Activity area of the AWS web site for detailed account information:
http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=activity-summary
To build your application and make valid web service requests, you'll need your Access Identifiers. Obtain and learn more about Access Identifiers on the AWS web site:
http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
Thank you for your participation in the Amazon Web Services community. See http://aws.amazon.com for more information.
Sincerely,
Amazon Web ServicesThis message was produced and distributed by Amazon Web Services LLC, 1200 12th Avenue South, Seattle, Washington 98144-2734
SimpleDB uses a different paradigm than most developers are accustomed to. In many cases, you will find that the differences are intended to simplify the architecture and use of SimpleDB. Relational databases have largely failed in terms of management simplicity - even a reasonably sized SQL Server instance requires a full-time DBA to constantly care for it. Using SimpleDB, you not only get the benefit of using a fully managed service (Amazon will manage the service for you), but the interface is simple enough to avoid the problems that typically cause problems with relational database performance.
Using SimpleDB, developers group data into domains (think tables), and domains are composed of items (think rows). Each item is composed of attribute/value pairs, similar to a relational database's columns. However, unlike relational databases, it is trivial to add new attributes to an item at any time and an attribute can contain multiple values. For example, an attribute named "size" could contain the values "S", "M", "L", "XL", and "XXL". Data is queried and manipulated using familiar REST-like PUT, GET, and DELETE requests.
There are several main differences between SimpleDB and a traditional relational database system. First, items are not defined a priori - attributes are added when necessary to items, making them more flexible. Second, the data is not stored in a tabular data structure. Rather, the data is stored hierarchically. This format is more flexible, and supports higher performance with little grooming required. Third, all data is stored as text. This puts the responsibility for domain integrity squarely on the developer - there will be no runtime errors warning of a violation of a field's intended data type. Consult the online Getting Started Guide for more juicy software details. The guide contains sample code all its operations in C#, VB.NET, Perl, and PHP. If you try reading the guide using IE (I use IE7), don't be discouraged by the abhorrent look of the pages as their functionality do not seem to be affected. Open the page in Firefox if you care how it looks.
Amazon charges separately for what it calls machine utilization, which translates to query cost, data transfer, and storage of the items stored in SimpleDB. The charge for machine utilization is $0.14 per "Amazon SimpleDB Machine Hour". Typical queries require near-negligible time to execute. Inbound data transfer costs $0.10/GB, while outbound transfer is based on tiered pricing: $0.17/GB for the first 10 TB/month with lower priced tiers costing $0.10/GB over 150TB. I will be paying $0.17/GB. Finally, data storage is charged at the flat rate of $1.50/GB/month.
One drawback that will need to be considered when designing an application that uses SimpleDB is that each item attribute value is limited to 1024 bytes. Larger items should be stored in the S3 system with only a pointer stored in SimpleDB. The limitation is likely intended for to help with managing performance of the SimpleDB system, but it is also important to consider that the data storage cost of SimpleDB is 10 times the cost of S3.
For most attributes this will not be a problem. However, there are many cases where it makes more sense to store larger chunks of data in the database. For example, in an online retail sales application, the description of many items could go well over 1024 bytes. It doesn't seem reasonable that you would store a series of items, such as item descriptions for a retail sales site, separately in S3. A possible solution to this issue is to create several attributes named Description_01, Description_02, Description_03, etc., using as many as necessary to store the required production description. This functionality could easily be abstracted into a SimpleDB library.
I am signed up. When I can find time, I will convert portions of this site to SimpleDB to give it a spin. I will certainly build a sample app and share my experiences here.


