Joe Blomstedt has a long post up on the Riak mailing list about (eventual) consistency, Riak, Dyanmo, guarantees, etc. Its worth reading as a whole, but the last passage caught my eye
I can never emphasize this point enough - as I've said before, when you walk down the NoSQL path you will find out thatIf you do look at other options, take the time to truly understand the guarantees provided. What does atomic, multi-master replication mean for a given product? What failure conditions can it tolerate? Can you ever lose data under rare, but not necessarily uncommon scenarios? If you're unsure, ask questions. It's not about good or bad. Different products have different guarantees. The goal is to ensure that whatever features/guarantees you need for your project are provided by the choice you decide upon.
- You didn't understand your own problem-space as well as you thought you did.
- You didn't understand the package that you are using as well as you think you do.
- It will not scale the way you thought it would. Oh, it'll scale all right, just not the way you thought it would.
- Your object/document/JSON/whatever model really doesn't map exactly the way you expected it to.