The first critical step in application design is the choice of the database. Conventionally, the choice was simple, for all the options were relational databases (RDBMS) and they provided a consistent interface (SQL) that was platform independent.
However RDBMS technology is not capable of handling large volume or variety of data. The emergence of big data technologies has thrown up a plethora of options for non-relational database models that provide efficient storage, retrieval and manipulation of large volume of data and with different data models.
Databases can be categorized based on the data model and the compromise of CAP - ie Consistency, Availability and Partition Tolerance that they implement.
There are several different data models that database engines now provide. The following are the most widely known models:
The CAP theorem proves that of the three attributes of Consistency, Availability and Partition Tolerance, any database can only provide two attributes. Each database therefore can only provide two of these attributes.
For more information about how different engines work out the CAP compromise, see the following link: http://blog.nahurst.com/visual-guide-to-nosql-systems
Considering the above two attributes that various database engines provide, we often come across applications which require to handle more than one data model and with different CAP combinations.
Polyglot Persistence suggests that instead of attempting to compromise the capabilities of a single database engine, it is recommended to use more than one database engine to suit the nature of data that the application needs to handle.
Having handled these challenges in various applications, we have created Oodebe as a reusable platform for addressing these challenges by implementing the following: