It also makes different trade-offs in usability of the software. It is (in my opinion) the most sysadmin friendly datastore, without hiding complexity, the tools are just pleasant to use. However, it has a larger curve for developers. We did a shootout to find a solution that would work for our needs and it came down to Mongo vs. Riak. We went with Mongo and are feeling the pain of getting everything automated and set up, but consider it a one-time cost rather than an "every time we get a new developer" cost.
Having worked with some quite large Mongo setups, I think you'll find the administration of Mongo ends up being significantly more than a single upfront cost.
Dealing with sharding + replica sets is an administrative nightmare with Mongo.
Do you have some more insight into this?
We currently run a hybrid Riak-MySQL setup, and are actively looking at Mongo to replace parts of it. In a few tests mongo 's speed seems to be all over the place: From REALLY fast to quite slow. And that is without the admin involved in a larger scale setup.
If it claims to be distributed and its not written in erlang, don't use it.
Well, that's the filter I use when looking at anything. If its not written in erlang I spend a lot of time trying to figure out exactly how it isn't really actually a distributed system. Usually I find out that it isn't.
While I generally agree with you, there are some applications out there that get distributed multi-node environments "right" without using Erlang. It's just much harder to do because those problems are (for the most part) solved BY Erlang for the programmer.
If something says it is parallel this, or concurrent that, that is when I filter it - thus far Erlang's concurrency model has been unmatched (in my limited experience) by any other language I've used for efficacy and simplicity.
That's an extremely crude filter. A lot of the best distributed system stuff is built on the JVM. Too many to name, but I'll name one anyway: Zookeeper