After posting Redis, MemcacheDB, or CouchDB?, I did some work with MemcacheDB.

The convenience was really cool, but the limitations became quickly apparent.

I found myself managing my own index of documents; i.e. no fun. That might be ok in some cases, but not for browsing documents. It might be possible to eventually and easily automate indexing, but I decided to read up again on the other NoSQL projects.

I’m surprised with how many of these are written in erlang! Of them all, CouchDB (erlang) and MongoDB (C++) look the most impressive. They are way more than a key/value storage system; but could be used as such, as long as the documents are in JSON format.

Since the documents are stored in JSON, they have some inherent key/value pairs. Thus, these keys can be used for some tentative relationships, aka views.

While I prefer erlang to java, its still a fairly big dependency for a database. Thankfully, mongodb is written in C++ and there are debian packages available, as well as in the official debian “sid” repository.

So it looks like I’ll eventually be switching from memcachedb to mongodb.

NOTE: I think its awesome that the mongodb developers chose the AGPL for the license!

UPDATE: A big difference between CouchDB and MongoDB is that CouchDB uses a REST style interface, while MongoDB does not, it uses language specific drivers. However, as the MongoDB docs state, a REST interface can be created in the future, and it appears there are some projects which make this possible, like sinatra_resource.

MongoDB Web Monitor Output

mongodb dev-48-gl.savonix.com:27017

db version v1.3.3-, pdfile version 4.5
git hash: nogitversion
sys info: Linux domU-12-31-39-09-BE-63 2.6.21.7-2.fc8xen-ec2-v1.0 #2 SMP Tue Sep 1 10:04:29 EDT 2009 i686 BOOST_LIB_VERSION=1_35

dbwritelocked:  0 (initial)
uptime:    93667 seconds

assertions:

replInfo:

Clients:
<table border=1>ThreadOpIdActiveLockTypeWaitingSecsRunningOpNameSpaceQueryclient
initandlisten012004local.system.namespaces{ name: /^local.temp./ }0.0.0.0:0snapshotthread0000.0.0.0:0websvr2-12004admin.system.users{}0.0.0.0:0</table>
time to get dblock: 0ms
# databases: 2
Cursors byLoc.size(): 0

replication
master: 0
slave:  0
initialSyncCompleted: 1

DBTOP  (occurences|percent of elapsed)
<table border=1>NS total ReadsWrites QueriesGetMoresInsertsUpdatesRemoves GLOBAL0|0.00%0|0.00%0|0.00%0|0.00%0|0.00%0|0.00%0|0.00%0|0.00%</table>
</div>

Related Posts:

* [Interesting MongoDB Ruby Gems](http://www.docunext.com/blog/2010/02/interesting-mongodb-ruby-gems.html)
* [dm-mongo-adapter versus the Bare MongoDB Driver](http://www.docunext.com/blog/2010/02/dm-mongo-adapter-versus-the-bare-mongodb-driver.html)