Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Spring Data provides the boilerplate code and plumbing to enable you to interact with various NoSQL repositories in a Spring-consistent manner. Depending on your needs, you could even find the persistence logic for your entire application defined in a handful of Spring Data interfaces. Get started with Spring Data domain objects and repositories, then learn about two ways to implement Spring queries in Spring Data: by naming convention or using QueryDSL, which ensures type-safe queries that are validated at compile time.
Reflect back on all the persistence code that you've written for Java applications. Given the requirements, can you say that you know every line of code that you need to write? If your answer is yes, and you're just putting off writing the code, then I believe you're better off automating that process. In fact, years ago I built a Maven plug-in (see Resources) that processed a class diagram in XMI format and generated a domain model. The domain model was annotated with Hibernate annotations and included a set of persistence classes. When it came to building a MongoDB persistence strategy I almost fell back on that approach -- but that was before I discovered Spring Data.
One thing that the Spring framework has done very well is to reduce or eliminate boilerplate code. Instead of spending time on generic implementation code, Spring developers spend more time on business logic. Spring provides the configuration and plumbing code.
At SpringOne in 2010, Spring creator Rod Johnson and Neo4j co-founder Emil Eifrem were trying to determine the best way to integrate support for Neo4J into the Spring framework. Their collaboration eventually led to the Neo4J module for Spring Data. Thus Spring Data evolved into an abstraction layer on top of data repositories. Initially focused on NoSQL, it was later extended for JPA and relational databases.
If you're unfamiliar with Spring's programming model, start here with Steve's introductory tutorial, "Mastering Spring MVC" (JavaWorld, April 2009).
It's good to keep Spring Data's inception in mind, because NoSQL repositories are quite different from relational databases. Relational databases provide support for SQL queries and solve a specific category of problems, which makes them easy to abstract. But NoSQL repositories specialize in particular features and functionality. MongoDB, for instance, is good at managing dynamic documents; Neo4J is good at representing highly interconnected graphed entities; and Redis is good at representing key/value entries in a cache.
Each NoSQL repository addresses a different problem domain, and each problem domain prefers a specific query style. If Spring Data were to simply abstract all NoSQL repositories you would lose the unique benefits of the individual repositories. So instead Spring Data provides a consistent programming model for interacting with NoSQL repositories, using patterns and models from the Spring framework. As a result you get a consistent way of interacting with different NoSQL repositories, and you're able to leverage each one's individual strengths.