You can’t go anywhere on the interwebs without bumping into a NoSQL post somewhere. At least in the Rails community, MongoDB seems to be gaining the most mindshare. Mongo has the whole NoSQL thing going for it, as well as the two most important things from a developer’s perspective — a full-featured ORM or two (MongoMapper and dm-adapter-mongo) and the ability to (easily) index and query your data. So even though there is no SQL, you can still do things like this, which feels very comforting and familiar to a Rails developer:
However, MongoDB was designed as a single-node database, and achieves scalability in the same way a MySQL db would, by using things like masters, slaves, and shards. So while Mongo buys you the flexibility of a schema-less data store, you are still stuck with the same old scaling problems of the SQL databases. Why not just use a SQL db as a schema-less store in the first place? (a la Friendly).
Riak is a data store built from the ground up for scaling. The scaling story can be summed up in three words: “Add a node.” That’s it. No “shards”, “masters”, “slaves”, etc etc. It’s an incredibly compelling story. The problem is that as much as the ops folks love it, ops folks don’t build apps. Developers do. And in its current form, Riak makes app developers work harder to build their app, in exchange for a much easier time scaling and maintaining the app down the road. But developer’s don’t care, because they don’t usually have to worry about the scaling issue, its someone else’s job. So it’s easy for them to ignore the long-term benefits and go with something familiar and easier to get into, like Mongo.
Basho seems like a great company with a refreshing attitude towards making money from open source software, and I really want to see them succeed. But they need to move fast to gain mindshare in the developer community, and that means investing in the tools that make developer’s lives easier. It seems that they have taken the first step and hired Sean Cribbs, the developer of the awesome Ripple gem, which is a Rails-compatible Object Mapper for Riak. I hope they continue to focus on developer tools and make Riak the first choice when building a new Rails app.
(We are doing our small part for the community by hacking on Briak, which is a data browser for Riak clusters based on Sinatra.)