No-SQL Databases

We often hear the phrase that data is the most important entity in the new world. The success of any product or company is dependent on the amount of data that can be acquired and processed for decision making. With such an emphasis on data, it was evident that the software industry explores additional options for storing data along with traditional RDBMS.

This does not mean Relational databases are not good enough, they are good for some of the use cases but do have their limitations. For example, a relational database can be difficult to scale (sharding is there but it has its own limitations), can be challenging to manipulate (try adding a new column to an existing table), or can be slow (complex join based queries).

No-SQL database is not just a single database, but more of an umbrella term covering a set of databases or in simple words a non-RDBMS database is termed as a no-SQL database. Let’s take a look at four broad categories in which no-SQL databases can be divided.

Key-Value database: Most simple form for storing data. As the name suggests data is stored in form of Key-Value pairing, think of it as a hashmap kind of data store. Data can easily grow exponentially as long as the keys being used are unique.

Example: Redis, Riak

Document-based database: This can be thought of as an extension to the key-value database. The values being stored are in form of a structured document. Metadata is provided so that each document is indexed and is searchable.

Example: MongoDB, CouchDB, CosmosDB

Column-based database: RDBMS stores data in form of row-based storage. In contrast, a column-based database stored the data in column-oriented storage. This gives an advantage for searching data based on columns easily and at the same time lets your data grow up to large levels by supporting the distribution of data. Further Read: https://en.wikipedia.org/wiki/Column-oriented_DBMS

Example: Cassandra, HBase

Graph-based database: An interesting set of data can be where each data node is linked to another node in some manner. For example, think of a social networking site, where each profile node can be linked to another node as a friend (or colleague). Graph-based databases provide inbuilt support for storing this kind of data.

Example: Neo4J, OrientDB

Additional Reads: https://en.wikipedia.org/wiki/NoSQL http://www.opensourceforu.com/2017/05/different-types-nosql-databases/

Common Cloud Services

Cloud computing or Cloud has become a term that is used very loosely now in the software industry. It is important that we understand what the cloud is. If we think of the cloud objectively, it is nothing but a set of services clubbed together and being offered by various cloud services providers. These services can be as simple as getting a Virtual Machine off the shelf, or onboarding a sophisticated complex machine-learning algorithm to process our data.

Let’s think of a very simple application. What all you need to deploy a simple application and make it available to end-users?

Deployment for a simple web application

The bare minimum services that one needs for an application to be deployed are server, database, and storage. We are not talking about scalability, security, API gateway services for now to keep it simple. If we go to any cloud platform we do get all these services in common umbrella service types of Compute, Storage, and Database.

Amazon Web Services

Compute: Compute is the most basic set of services provided by a cloud service provider. In simple words, this is where you will deploy your code and execute it. The simplest form of the compute service is Virtual machines. You can provision VMs from the cloud and deploy tools and services needed for your application to work. You deploy your application and expose it to the outside world.

Storage: Second most important thing that an application will need is storage. You need to store images, files, logs, etc. for your application to work fine. All cloud services provide us with different storage options. Customized according to user needs with respect to performance, security, redundancy, etc.

Database: Another set of services that are core to any application is a database. The database itself has gone through many interesting transitions in the last few years. From just Relational databases, we have now a set of no-SQL databases, which includes a column-based database, document-based database, graph-based database, key-value database, and so on. All major cloud service providers have good support for all the common databases and provide additional features like encryption, redundancy, etc off the shelf.

Other important services: Though we have talked about only Compute, Storage, and Database so far, the cloud platform provides many more services. Services related to Networking, Security, Machine Learning, IoT, etc. are available off the shelf from cloud service providers.