Mongo's internal storage mechanisms are a mess. BSON is incredibly inefficient as a storage format (for instance, it stores arrays as string -> string maps with a literal index, ie ["1" "first element" "2" "second element"]), it relies on mmap / fsync for read / write scheduling (see [1] for some issues specifically with regards to database usage), and its "linked list of documents" approach means that any appreciable number of removals or updates badly fragments your storage space. Oh, and key names aren't interned, so better use the first N unicode characters rather than sensible names if you need to fit everything into the page cache (and due to the lack of caching algorithms beyond the OS's LRU-by-page, you definitely need to fit everything into the page cache). "Everything" really means "both data <i>and indexes</i>" since the OS doesn't know the difference between your index & data - it will quite happily evict index entries from cache in favor of a data scan.<p>[1] <a href="http://rhaas.blogspot.co.uk/2014/03/linuxs-fsync-woes-are-getting-some.html" rel="nofollow">http://rhaas.blogspot.co.uk/2014/03/linuxs-fsync-woes-are-ge...</a>