Decision time: NoSQL

I've spent the entire weekend reading countless articles and Quora/Stack Overflow Q&A's about the vast array of so-called NoSQL databases that are now available. I've always been a MySQL guy myself, but I had never before looked into the other options available. Since I am working on a new project (I'll be writing about it soon, and it isn't a new game), I figured I should see what all the hype is about.

I looked very closely at MongoDB, CouchDB, Riak, Redis, Membase, Cassandra, SimpleDB, and HBase. I found these all to be great products, but at the same time, they all addressed different needs. While the traditional MySQL database is extremely general purpose, the NoSQL movement was started with niche needs in mind.

Eventually this list was whittled down to MongoDB and Membase. SimpleDB proved to be too simple and didn't offer low enough latency. Cassandra and CouchDB, while great products, still felt a little rough around the edges. Redis was tempting, but ultimately it lacked the production support and data security needed to justify its use with this project.

Membase

Membase has been around for a while, but just a few months

ago they merged with CouchOne, forming Couchbase. The first thing that drew me to Membase had nothing to do with the database itself. I tend to be OCD about good design, and Couchbase has created a website second to none when it comes to NoSQL (and to open-source software in general).

However, the features and performance promised in Membase are about as close to perfect as you can find for most everything I develop here at GoldFire Studios. However, due to the newness of the merger, the feature-set and promises aren't fully implemented, and ultimately the product is currently too good to be true (the key word here is currently). The team behind this database is top-notch, so don't be surprised if you see a new blog post later this year talking about another new project that will be powered with Membase.

MongoDB

MongoDB is probably one of, if not the most hyped about

NoSQL databases out there (there could be a reason for that). I'd heard about MongoDB over and over for the past year or so, but I had never checked it out until I saw an interview from TechCrunch TV's Founder Stories with Kevin Ryan, where he talked about using MongoDB and its team (he is an investor with them). My interested was piqued, so I began this crusade last Friday to learn as much as I could about NoSQL and all of the choices available.

Interestingly enough, I've gone ahead and chosen MongoDB for this upcoming project.  One of the main reasons for this is because this is my first time venturing into these waters, and MongoDB is probably the most similar to MySQL of all of the NoSQL alternatives. The syntax is intuitive to a JavaScript junkie like myself (in fact the query language and data is all stored in JavaScript format), and the feature-set allows for complex queries that still perform well.

I also did some benchmarking to see if the quoted performance gains would live up to a real world test against my time-hardened MySQL optimization skills. Not only did they live up, they shined like I couldn't imagine. Average writes per second were ~215% faster, average reads per second were ~250% faster, and average updates per second were a whopping ~1000% faster!

Conclusions

Membase is a great system with great uses, but it isn't ready for prime-time at GoldFire Studios. However, it is an almost certainty that Membase will make it into a future project, and most likely sooner rather than later. MongoDB represents a great way to transition into the NoSQL realm without losing too much productivity on making a dramatic shift. The next post-school-learning I will tackle is Node.js, which will have a tremendous impact on the future of PokerRPG, BC Wars, and any new games that may arise in the future (get excited!).