#2 - usually the journal should be pretty quick to allocate - I've not experienced this problem directly myself.
I'll add some extra bits to the bottom of the post with your notes.
The Mongo team seem somewhat reluctant to implement it.
Also, I'm working on Snappy compression with Mongo (it's already used for the journal), however it's not currently stable and work is sporadic due to my startup.
Compression could have drawbacks on documents that get updated frequently. But it will be extremely useful on documents that get created and rarely/never change, coincidentally what I mostly have.
It would also greatly help if keys are compressed or indexed in some way since it could be done transparently.
You may recall the Mongo team being reluctant to make the database function well in single server setups, but they did address that with journalling.
In src/mongo/db/db.cpp I see:
void _initAndListen(int listenPort ) {
...
dur::startup(); // <- this i believe preallocs journal files
...
listen(listenPort); // after journal prealloc i think
p.s. this blog post is a very interesting article overall i think, without commenting on all the specifics...
1. The keys in Mongo documents get repeated over and over again for every record in your collection (which makes sense when you remember that collections don't have a db-enforced schema). When you have millions of documents this really adds up. Consider adding an abstraction mapping layer of short 1-2 character keys to real keys in your business logic.
2. Mongo lies about being ready after an initial install. If you're trying to automate bringing mongo boxes up and down, you're going to run into the case where the mongo service says that it's ready, but in reality it's still preparing its preallocated journal. During this time, which can take up to 5-10 minutes based on your system specs, all of your connections will just hang and timeout. Either build the preallocated journal yourself and drop it in place before installing mongo, or touch the file locations if you don't mind the slight initial performance hit on that machine. (Note: not all installs will create a preallocated journal. Mongo tries to do a mini performance test on install to determine at runtime whether preallocating is better for your hardware or not. There's no way to force it one way or the other.)