I am evaluating (no specific use cases), just trying to understand the NoSQL (non-relational) solutions in breadth.
So, I pretty much understand Dynamo in term of (taken from Dynamo paper):
- Partitioning –> Consistent hashing
- High availability –> Vector clocks
- Handling temp failures –> Sloppy quorum
- Failure recovery –> Merkel Trees
- Membership and failure detection –> Gosisp protocol
My question is, what are the other ways of each of these 5 (may be more “problems”) are dealed with in other solutions like:
- Bigtable based systems,
- Just key-value storage like Redis and BDB.
- other hybrid systems.
Other important issues:
1) Secondary Indices: If you don’t need them then you can probably find an acceptable way to use most datastores.
2) Multiple Data Centers: If you’re dealing with multiple data centers then you may not be able to use a master-slave architecture. Multi-master systems are much more complicated.
3) Transactions: If you need to make transactions (multi-step operations that need to act like they’re one step), you may have difficulties with many non-relational systems because they tend to sacrifice more than they strictly need to with respect to ACID (atomicity, consistency, isolation, and durability).