I’m developing a new project which require a data structure not yet well defined. We are evaluating different solutions for persistence and Amazon AWS is one of the partners we are considering. I’m trying to recap solutions which it offers.
Amazon Relational Database Service (RDS)
Relational Database similar to MySQL and PostgreSQL. It offers 3 different engines (with different costs) and each one should be fully compatible with the protocol of the corresponding DBMS: Oracle, MySQL and Microsoft SQL Server.
You can use it with ActiveRecord (with MySQL adapter) on Rails or Sinatra easily. Simply replace you database.yml
with given parameters:
production: adapter: mysql2 host: myprojectname.somestuff.amazonaws.com database: myprojectname username: myusername password: mypass
Key/Value Store similar to Riak and Cassandra. It is still in beta but Amazon released a paper (PDF) about its structure a few year ago which inspire many other products.
You can access it using Ruby and aws-sdk
gem. I’m not an expert but this code should works for basic interaction (not tested yet).
require "aws" # set connection parameters AWS.config( access_key_id: ENV["AWS_KEY"], secret_access_key: ENV["AWS_SECRET"] ) # open connection to DB DB = AWS::DynamoDB.new # create a table TABLES["your_table_name"] = DB.tables["your_table_name"].load_schema rescue AWS::DynamoDB::Errors::ResourceNotFoundException table = DB.tables.create("your_table_name", 10, 5, schema) # it takes time to be created sleep 1 while table.status == :creating TABLES["your_table_name"] = table.load_schema end end
After that you can interact with table:
# Create a new element record = TABLES["your_table_name"].items.create(id: "andrea-mostosi") record.attributes.add(name: ["Andrea"]) record.attributes.add(surname: ["Mostosi"]) # Search for value "andrea-mostosi" inside table TABLES["your_table_name"].items.query( hash_value: "andrea-mostosi", )
Relational DBMS based on PostgreSQL structured for a petabyte-scale amount of data (for data-warehousing). It was released to public in the last days and SDK isn’t well documented yet. Seems to be very interesting for big-data processing on a relational structure.
In-RAM caching system based on Memcached protocol. It should be used to cache any kind of object like Memcached. Is different (and worse IMHO) than Redis because doesn’t offer persistence. I prefer a different kind of caching but may be a good choice if your application already use Memcached.
RESTFul Key/Value Store using only strings as data types. You can use it with any REST ORM like ActiveResource, dm-rest-adapter or, my favorite, Her (read previous article). If you prefer you can use with any HTTP client like Faraday or HTTParty.
[UPDATE 2013-02-19] SimpleDB isn’t listed into “Database” menu anymore and it seems no longer available for activation.
Many companies offer support to theirs software deployed on EC2 instance. Engines include MongoDB, CouchDB, MySQL, PostgreSQL, Couchbase Server, DB2, Riak, Memcache and Redis.
Sources
- http://blog.webyog.com/2009/11/16/top-10-things-to-know-about-amazon-rds/
- http://www.intridea.com/blog/2012/1/30/dynamodb-for-the-uninitiated
- http://cloud.dzone.com/articles/six-reasons-avoid-amazon
- http://rarestblog.com/blog/2013/02/15/redshift-postgresql-in-the-cloud/
- http://harish11g.blogspot.it/2012/11/amazon-elasticache-memcached-ec2.html
- http://www.slideshare.net/martin.rehfeld/amazon-simple-db-07-feb-2008-rug-b