The NoSQL movement has rekindled interest in data storage solutions. A few years ago, within limited scale systems, storage choices for programmers and architects were simple: relational databases were almost always the choice. However, Cloud and ever increasing user bases for applications have given rise to larger scale systems, and relational data bases cannot always scale to meet the needs of those systems. As an alternative, the NoSQL movement has proposed many solutions.
For a programmer who wants to select a data model, they now have to choose from a wide variety of choices like local memory, relational, files, distributed cache, column family storage, document storage, name value pairs, graph DBs, service registries, queue, and tuple space etc. Furthermore, there are different layers/access choices such as directly accessing data, using object to relation mapping layer like Hibernate/JPA, or using data services. Moreover, users also need to worry about how to scale up the storage in multiple dimensions like the number of databases, the number of tables, the amount of data in a table, frequency of requests, types of requests (read/write ratio).