BACKGROUND IMAGE: iSTOCK/GETTY IMAGES
Developers and application designers have so many options for deploying a database in the cloud that it may be difficult to choose the best option. Are you better off running your own database server in an IaaS cloud, or should you switch to a PaaS option? The option of Database as a Service, such as Cloudant's NoSQL database service, might sound appealing, but what are the tradeoffs?
Existing code may be difficult to port to a Platform as a Service (PaaS) database option; even related databases, such as Microsoft SQL Server and Windows Azure SQL Database, are not fully compatible. For example, SQL Database does not support some of the free text operations supported in SQL Server. (See SQL database documentation for other nonsupported Transact SQL statements.)
So, if you have an existing application built on a three-tier architecture with a MySQL, Oracle, SQL Server, PostgreSQL or other commonly used relational database management system, you can move the database server to an Infrastructure as a Service (IaaS) cloud. With this option, you keep control over configuration and administration, but you also continue to assume responsibility for backups, monitoring, and scaling up (or down) as needed.
Conversely, if you have started new development or redesigned an existing database layer, then PaaS or Database as a Service (DBaaS) might be a good fit with your requirements. Decide early on if you want to use a SQL or a NoSQL architecture.
SQL and NoSQL pros and cons
There are advantages and disadvantages to both SQL and NoSQL databases, but some of the most important factors are your team's skill level in developing with each type and how well each type fits with your requirements. The benefits of a "technically superior" choice can be negated by a long learning curve for your developers. Don't put too much emphasis on features that you may not need, even if they are used in marketing to bolster the argument for one type of database over another. For example, two-phase commits for distributed transactions are important for some applications, but do you really need them?
Options for SQL-based relational database platforms available as PaaS include Amazon Relational Database Service (RDS) and Windows Azure SQL Database. Amazon RDS supports MySQL, Oracle and Microsoft SQL Server database. Disk I/O is often a concern when optimizing database performances, so consider storage options when developing to a PaaS or DBaaS database.
Amazon Web Services (AWS) allows customers to provision RDS instances with either standard storage or with Provisioned IOPS. The latter is a good option for transaction processing applications. If you can tolerate variance in I/O performance, standard storage can save on AWS fees. Customers can provision from 1,000 to 30,000 IOPS at a cost of 10 cents per IOPS per month.
Google Cloud SQL is a cloud-based implementation of MySQL designed for small-to-midsize applications. Its integration with Google App Engine makes it a good option for developers already using that PaaS. Pricing is available in either a package plan or a per-use plan.
When cost and rapid scalability are concerns, a NoSQL option might be a better fit. NoSQL databases do not have all the features many of us depend on to build transaction-oriented systems, but they do fit well with Web and mobile applications that can require rapid scalability. AWS and Microsoft both have NoSQL database services.
Amazon DynamoDB is a managed NoSQL database. Customers provision capacity for reads and writes, and pay an hourly rate based on that. AWS measures capacity in terms of "Units of Read Capacity" and "Units of Write Capacity." See the Amazon documentation and cost estimator for more on pricing.
Amazon SimpleDB is another NoSQL option. Its primary advantage is its lower cost. SimpleDB is a good option for small applications that can tolerate slower performance. For large volumes of data that will require partitioning and automatic scalability to handle processing loads, DynamoDB is probably a better option.
Microsoft's NoSQL offering is called Table Storage, and like Amazon DynamoDB, is a key-value pair data store. These databases are good candidates for applications that support large volumes of data, have fairly simple relations among data types, and can benefit from not having a fixed, predefined schema. Pricing for Table Storage is based on data volumes and redundancy levels.
In addition to IaaS vendors, such as Amazon, Microsoft and Google, you have the option of choosing a specialized database service, such as Cloudant's Database as a Service. Cloudant offers multi-tenant and dedicated CouchDB database services starting at $1.00 per gigabyte per month, plus additional charges for HTTP requests (e.g., GET, PUT, POST and DELETE). Pricing information is available here.
About the author:
Dan Sullivan, M.Sc., is an author, systems architect and consultant with more than 20 years of IT experience. He has had engagements in advanced analytics, systems architecture, database design, enterprise security and business intelligence. He has worked in a broad range of industries, including financial services, manufacturing, pharmaceuticals, software development, government, retail and education. Dan has written extensively about topics that range from data warehousing, cloud computing and advanced analytics to security management, collaboration and text mining.
A deep dive into Oracle MySQL cloud service