Professional Documents
Culture Documents
Brian Zambrano
MongoSV
December 3, 2010
Dynamic
Neighbors change often
Neighbors events change often
Flexibility
Want to incorporate other social graphs
Product may evolve quickly
Performance
We need really fast reads
Frequent writes
8
Performance
Flexible schema design
Easy to work with
We felt comfortable MongoDB would mature as
our needs became more demanding
10
11
12
{ "_id": 4558992,
"events" : {
"all_ids": [ 116706, 179487, 16389, 827496 ],
"curr_ids": [ 827496 ],
}
},
Past and current
attendance
13
{ "_id": 4558992,
"events" : {
"all_ids": [ 116706, 179487, 16389, 827496 ],
"curr_ids": [ 827496 ],
},
"nns" : [
[ 2816442, 0.2 ],
[ 1615962, 0.047619047619047616 ],
],
} Nearest neighbors
(user_id, score)
14
{ "_id": 4558992,
"events" : {
"all_ids": [ 116706, 179487, 16389, 827496 ],
"curr_ids": [ 827496 ],
},
"nns" : [
[ 2816442, 0.2 ],
[ 1615962, 0.047619047619047616 ],
],
"fb" : {
"_id" : 4808871, Facebook data
"name" : "Brian Zambrano",
"location" : "San Francisco, California",
"friends" : [ 568876525, 569507467, 569559792 ],
},
}
15
{ "_id": 4558992,
"events" : {
"all_ids": [ 116706, 179487, 16389, 827496 ],
"curr_ids": [ 827496 ],
},
"nns" : [
[ 2816442, 0.2 ],
[ 1615962, 0.047619047619047616 ],
],
"fb" : {
"_id" : 4808871,
"name" : "Brian Zambrano",
"location" : "San Francisco, California",
"friends" : [ 568876525, 569507467, 569559792],
},
}
16
17
18
Two + n queries
1. Get neighbors
nns = db.users.find({_id : {$in : user.nn_ids}})
19
Two + n queries
1. Get neighbors
nns = db.users.find({_id : {$in : user.nn_ids}})
Optimization opportunity:
Embed orders in Event records
20
Score neighbors
3. Update nn_ids
db.users.update({_id : uid},
{$set : {nn_ids: nn}})
21
22
23
24
25