Docunext

  • About

Document Based Storage Systems

February 25th, 2010

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:

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

replication master: 0 slave: 0 initialSyncCompleted: 1

DBTOP (occurences|percent of elapsed)

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%

Related Posts:

Yearly Indexes: 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2015 2019 2020