00:01 At this point, we pretty much had MongoDB
00:03 doing everything we needed it to do,
00:05 and we'd heard MongoDB was fast,
00:07 but it turned out it didn't really seem to be behaving as quickly as maybe we hoped,
00:11 we put a ton of data from our dealership in there,
00:14 and we were getting query times of like one second, 700 milliseconds, stuff like that.
00:17 It was okay, but really, we saw it can do much better.
00:20 What levers and knobs do we have to turn to make this faster?
00:24 The most important one, even more important than in relational databases,
00:28 are the indexes, we'll see MongoEngine as well as PyMongo in the shell
00:33 all have really good ways to deal with this.
00:35 Document design is really important, mostly around this embedding question
00:39 but there are many ways to think about document design,
00:42 there's a lot of really non intuitive and powerful patterns,
00:45 design patterns you can apply here.
00:48 What is your query style, maybe one query is better than another
00:51 and using projections to only pull back a subset of responses,
00:56 suppose we have a car that has a ton of those service histories
00:59 and we don't care about them for a particular query
01:02 we could suppress returning those from the database
01:04 which saves us a lot of bandwidth on the network,
01:07 disks reads on the database server and deserialization processing on our side.
01:11 We also saw there is some network apology things we can do,
01:15 replication and sharding, and those are both interesting and powerful
01:19 but not part of this course, so go check that out on your own if you're interested.
01:23 For indexes, we took an example like our car
01:27 and we said let's suppose we have make here
01:30 that we're interested in querying by a service history,
01:32 and if you look below how service history is defined as the service record objects
01:36 and they have a description and a customer rating
01:39 and things like this, price for example,
01:41 so our goal is to query these things, the make, the service history and stuff, quickly,
01:45 so we saw adding an index which really a powerful way to do that,
01:48 so all we've got to do is go to our meta object, our meta element here
01:52 and say these are the index as an array
01:55 now these indexes can simply be the name of the thing,
01:58 like make that's super straightforward,
02:01 they could traverse the hierarchy using the Javascript style, using the dot,
02:05 so we'll service_history.customer_rating
02:08 and that would go down and let us do queries deep into these cars
02:12 and say let's find the ones that are either good or low customer ratings
02:17 and we can even do composite indexes,
02:19 so here we're having a composite index on price and description,
02:22 within the service history, so we do that by having this fields dictionary thing
02:27 and the fields are an array, so you can use the simple version
02:29 or if you need to, you can get a more complex definition of the index there.