There has been a flurry of activity over the past couple of months on the cloud computing front, primarily related to Microsoft SQL Azure and Amazon RDS. Touted as the harbingers of a new era—the era of Relational DBMS-as-a-Service (DBaaS)—these latest offerings reassert the fact that databases are now part of the utility model of cloud computing.
For those planning on an early adoption, even with just two significant products (no one seems to have noticed Joyent's Accelerator for MySQL), it can be very difficult to choose. Here's a list of five things that will help you make the right choice.
Microsoft's target for SQL Azure is business applications running in the enterprise which are using databases of 5 GB or less. Amazon RDS is comparatively more flexible and targets a wider segment of users. Although with SQL Azure you can have a database as large as 10 GB, Amazon RDS allows storage of up to 1 TB per database instance. Microsoft advises sharding your data if your requirements will exceed their 10 GB limit. This isn't a bad idea: Sharding your data across multiple servers will scale much better than having it all on one bloated server.
Support for the Cloud Platform
SQL Azure is native to the Cloud platform. This means that while MySQL—which is what Amazon RDS provisions—is Cloud-capable (i.e., it can run on a cloud system without problems), SQL Azure was designed specifically for the Cloud. This would suggest that SQL Azure is poised to utilize explicitly any resources available in a cloud.
Deployment is where SQL Azure and Amazon RDS differ the most. While many people may lead you to believe otherwise, SQL Azure doesn't quite grasp the concept of server/database instances. The servers that you create with SQL Azure are basically logical containers. These containers are provisioned exclusively for you, and will host only your databases. There is a one-to-many relationship between a physical node in the Cloud and the servers you create—several servers created by different users may be hosted on the same hardware platform in a shared environment. This is known as multi-tenant architecture. The biggest advantage of this is that Microsoft is able to provide SQL Azure at very low rates. However, you can't tailor a system for better performance. For instance, you can't change the query cache size. Moreover, having a limit of 10 GB forces you to make design decision for applications that require large databases, such as splitting data between multiple databases.
Amazon RDS also implements a multi-tenanted architecture, but this is done at a very different level than with SQL Azure. Amazon RDS provisions a specialized EC2 instance to each AWS account. You can then create multiple, highly varied instances of MySQL on your EC2 instance. Database instances can vary on the basis of storage (e.g., up to 1 TB) and computing resources (e.g., up to 26 ECUs and 68 GB of RAM), and you have complete control of your database parameters. This can be changed using the APIs provided with Amazon RDS.
Compatibility with Existing Systems
For now, SQL Azure supports only a subset of the features available with SQL Server. Amazon RDS flaunts complete support for MySQL features, with the exception of replication. If you already use MySQL, your applications will probably work seamlessly with Amazon RDS. For instance, in one of our previous posts, we described how to set up MONyog for an Amazon RDS database instance. SQL Azure features support for Transact-SQL, and existing libraries (i.e., ADO .NET, ODBC and PHP) for connection.
Cost to Features Ratio
With all of its limitations in comparison to Amazon RDS, SQL Azure is definitely a cheaper solution. A notable feature is that databases are automatically replicated across multiple systems providing for read scale-outs, as well as a transparent fail-over mechanism in case of hardware failure. By contrast, Amazon RDS has specifically disabled replication on its MySQL instances. Then again, SQL Azure doesn't offer a parallel to the unique on-demand snapshot-based backup method offered by Amazon RDS. Data in SQL Azure is automatically backed up and restored when a disaster occurs. This is transparent to the user, which does provide the high availability that this feature implies.
Choosing between SQL Azure or Amazon RDS would probably depend the most on the type of technology you use already. If you primarily have a Microsoft shop, then SQL Azure will be a better choice, as the technology would be familiar—you'll get Visual Studio integration, support for .NET applications, T-SQL, etc. On the other hand, if you have a LAMP shop, Amazon RDS is definitely the better choice.
If you're still not sure which to use, consider what is your primary motivation to move your database to the Cloud. It's probably for scalability. As your business grows, so does your database. Although Amazon RDS has many features, customizations, and options, scalability is what's most important. Amazon RDS database instances have limited scaling capability. For instance, if you create a Double Extra Large DB Instance, and you need more computing resources (i.e., CPU and memory), you'll have to change the instance type to Quadruple Extra Large and restart your database before it will take effect. What's worse, if you've created a Quadruple Extra Large DB instance and your DB instance is not actually using all of the resources available, you'll be paying much more than you should. SQL Azure on the other hand, allows unlimited scaling at no extra cost. All you pay for is the increased data transfer.
Still, SQL Azure allows only up to 10 GB of storage. If you want more storage, you'll have to create a new database, shard your data across the two databases, and possibly pay double the price—even if you need only a few gigabytes more.
Again, it depends on your technology preferences, how much flexibility you need, and what is your budget. You have to consider all of this when choosing the best Cloud platform and database system for your situation, and when configuring whatever you choose.