Now a days, you can find a large number of database technologies. Having such a large number of products and choices means having more trade-off decisions to make. Given that each database product is optimized for certain trade-offs, it rests on the software architects to pick the appropriate database with these trade-offs in mind as it relates to the requirements of their service.
Choosing the most appropriate database based on the requirements of your service is the one most important architectural and system design decisions because later if you find that the selected database is not appropriate for all your requirements then migrating to another database is usually very costly and risky process.
Criteria for choosing a database
Choosing an appropriate database is not based on a simple decision tree where you can just decide simply that if we have structured data then we will use relational database; if we have a semi-structured or unstructured data we will use maybe something like NoSQL. Also, it is not as simple as saying that since we need ACID requirements we will choose relational database and if we don’t need ACID requirements and we can live with eventual consistency let’s choose a NoSQL database.
There are multiple different criteria that we have to go through in parallel and we have to to weigh different choices of databases that we have that how those databases will fulfill all those criteria or requirements that we
have and after that we have to come up with an appropriate database for our service.
You also need to understand that sometimes you may be in a situation where you will have to choose between two databases and none of them is appropriate for your requirements but in that case you have to see which of the database among these two databases is more appropriate as compared to the other for your requirements.
We choose a database technology for our service based on the following criteria:
- Ease of Learning Curve
- Product Maturity and Technical Support
- Data Model or Schema Support
- Scalability Support