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.