This is a summary about the MongoUK conference held today here in London. It was great! Unlike other commercial conferences this one actually cost money but it was only about $50 and although there were free coffee cups, stickers and stuff this didn't feel at all like they were trying to sell themselves. The focus was on the technology. Great!
As often with these things, you realise that you have actually grasped a couple of things quite well now but it's also humbling in that there is so much you haven't grasped that other people are way ahead of you in.
What I learned
1) DBRefs
aren't anything special. It's just an embedded document. The difference between saving an ObjectId
from another collection is that with a DBRef
you also get some information about which collection that belongs to. So, if your "foreign reference" is called user
then you don't really need to remind yourself (and your disk space and your index space) that it belongs to the collection users
. Having said that, I think ORMs (e.g. MongoKit) will do a better job automatically wrapping these references if you use DBRefs
.
2) ensureIndex()
is not cheap. Even if it doesn't necessarily change your structure. Don't take it lightly. Do it as an administration task and treat it such. Get it right because it is really important and the name "ensure" might sound more harmless than it actually is if the collection is huge.
3) Regular expressions can be indexed if they're "range-able" (my own word). For example if you index a field called username
you can use your index if you do a query on /^pet/
.
Also, on the subject of indexing, if you have a compound index (e.g. ensureIndex({x: 1, y:1})
) you can use the index if you just do a query on x
. But not on y
. Did I understand that correctly Richard?
Lastly regarding indexes, the indexing engine is very smart and polymorphic. If you ensure an index on an array it will index the elements of the array and not just the whole array as one entity.
4) Elliot Horowitz is a smart cookie
5) Journaling is cool but if your traffic is high, sharding and replication is more important. The addition of the journaling feature might be slightly more to just PR related but I like it because some setups are so small that I don't need 5+1 replica sets and then I really want and need journaling. To paraphrase Elliot: "Due to disks' inherent nature, corruption will always happen".
6) 10Gen is trying to attract more enterprise use by writing case studies but also to fulfil enterprise driven feature requests. Encryption is one such that is currently one such feature.
7) Map/Reduce is currently "one of the biggest annoyances of MongoDB" but this is being genuinely worked on. It currently works and is very flexible but it's clunky and can be slow due to Javascript being slow. What's being done is that all standard aggregating operators (e.g. sum()
) will soon (2.0 release hopefully) become part of the core and done in C++. The other thing they're actively looking into is changing the Javascript engine to V8.
8) Triggers is Javascript is a very frequent feature request but they would be really quite hard to implement (and get right) and it would potentially be slow due to depending on the Javascript engine. It's on the roadmap but very far down. I'm happy for it to be introduced in 2027.
9) MongoDB has really thought about sharding. It's not something that has been thrown in good measure. The database (including config servers, load balancers and slaves) is all taken care of by MongoDB basically. The only challenging thing for you (developer) to think about is what key to shard on.
10) A company called Server Density have a really good looking application for monitoring MongoDB. It works by you installing a daemon on your MongoDB cluster and looking at the aggregated states and stuff on their application running on their own servers. David Mytton's presentation is best digested in these 6 blog articles
11) Version 2.0 is going to be another big step forward for MongoDB. In particular it's going to improve on concurrency which understandably is a hard problem to solve but now that MongoDB is maturing it's the right time to attack this.
Last but not least, I need to do something about the way I look or smell or something! I chatted to about 10-15 people and not a single one of them walked up to me. I had to start every single interaction. Am I that intimidating or are people perhaps not interested in talking to strangers?
Comments
Peter,
Great write-up matey.
You know what they say: how do you tell if a programmer is extrovert..? He's looking at your feet when he's mumbling at you.
You don't smell *that* bad... ;-)
Nicholas.
In some senses I don't mind because I can learn more from other people by not talking about me and what I do (which I already know).
Another technique I try is to not stand face on with people but instead tilt so that it's apparent to a third person that he can join in.
I think I'm a bit spoiled after various entrepreneur meetups where people are much more open and unafraid.
Or, perhaps I need to do more cool work so that people come up to me to talk about my work rather than taking a random chance. On to Github we go!