Cloud Databases : MongoDB
For several years I’ve been using Oracle and other SQL relational databases. I’ve dedicated most of the time of my researching and developing on Oracle technology. There’s no question that Oracle leads on site installations and that the quality of the products and the ROI is one of the best. But the IT world is changing with the advent of Cloud Computing. From NOSQL databases, Key Value, to document oriented databases… nowadays there’s plenty of offers to satisfy almost any customer and any project. Dozens of players have been positioning their offer to the cloud market in the past 3 years, some small startups companies and some well-know big players in the traditional software market.
There are two main methods to run a cloud database: Virtual Machine and Database as a Service. With the first one, companies purchase a VM running at a cloud provider such as Amazon Web Services. Then, they run an image with a pre-installed database instance or they install the software themselves on the OS provided by that VM. The second, and for me the one that will rule the next decade, cloud providers offer database as a service, freeing companies from administering and managing the OS and the database itself.
I’ve researched and tested most of them in the past 3 years. From Oracle deployed on an EC2 image, passing by Google Bigtable/ App Engine Datastore and Amazon RDS / DynamoDB. But recently I’ve dedicated most of my time researching non-relational NOSQL databases.
The 4 database services that I’ve researched in the past months were a SQL cloud database (PostgreSQL Heroku) and 3 NOSQL based services: Databasedotcom (SalesForce), MongoDB (MongoHQ) and CouchDB (IrisCouch).
One of the most important cloud database features need to develop mobile apps is the availability of an API (REST). Salesforce Databasedotcom has one of the best REST API’s. It’s really well designed and it has a very strong security layer! Postgresql HEROKU service doesn’t provide a REST API. MongoHQ’s MongoDB document oriented database service was elected the database service for my most recent project. It offers a very good web interface, nice console database connection, has a reasonable REST API and pretty good spatial features. There are plenty of things that need improvement in future releases, such as database roles and OAUTH authentication, but until now the overall opinion is that’s a great choice.
MongoDB is a dynamic schema (or schemaless) database which stores structured data as JSON-like documents (BSON). It provides indexing by any JSON field, master-slave replication, load balanced sharded horizontal scaling, file storage and MapReduce features for aggregation queries.