Recently during our NoSQL Training Week, our class attendees had to come up with criteria for deciding when to choose a particular type of database (e.g. relational, column, key-value, graph, document, in-memory), and then a particular product (such as Neo4j for graph or MarkLogic for document or Couchbase for key-value).
It was not an easy challenge and attendees presented solutions ranging from decision trees to complex matrices weighing factors such as requirement types, performance, integrity, and security.
A large challenge faced by each group (and also faced by our organizations) was that the NoSQL products are becoming more complex. For example:
- Neo4j is a graph database that can support similar levels of data integrity as the relational database.
- Couchbase is both a key-value and a document database.
- Documents can be handled by Couchbase in JSON format or MarkLogic in XML format (but MarkLogic can handle JSON and Couchbase XML…).
To address this complexity, one of the groups changed the exercise around to be not a selection process but instead a process of elimination. If we can eliminate a particular type of database or database product, it makes the decision simpler and sometimes there can be more than one right answer.
Do you think this is a good approach? What are your thoughts?