Javascript 这是查询MongoDB的最佳结构吗?
我正试图找到哪种方法更具可扩展性。 我有一个用户在拼车旅行中申请了一个座位,用户需要能够查看适用于他们的所有旅行。我的模型是这样的:Javascript 这是查询MongoDB的最佳结构吗?,javascript,mongodb,mongoose,nosql,Javascript,Mongodb,Mongoose,Nosql,我正试图找到哪种方法更具可扩展性。 我有一个用户在拼车旅行中申请了一个座位,用户需要能够查看适用于他们的所有旅行。我的模型是这样的: var UserSchema = new mongoose.Schema({ id: String, name: String, trips: [String] // An array of strings, which holds the id of trips }); var TripSchema = new mong
var UserSchema = new mongoose.Schema({
id: String,
name: String,
trips: [String] // An array of strings, which holds the id of trips
});
var TripSchema = new mongoose.Schema({
id: String,
description: String,
passengers: [String] // An array of strings, which holds the id of users
});
因此,当用户查看适用于他们的所有行程时,我的后端将搜索Mongo数据库中的所有行程。
我决定采用两种方法:
我认为方法2更好,因为它不必在旅行模型中进行更深入的搜索。我只是在寻求确认,想知道还有什么我需要考虑的吗? < P>如果你不做大数据,我会简单地说,这没什么关系——两者都足够好,但是如果你真的有上百万的用户对数百万用户的查询和TRIPS……/P>
- 对于选项1,您只有一个查询,但您必须确保您的字段
已编制索引,因此您需要维护另一个索引,以提高效率。另一个索引会影响您的写入性能passengers
- 对于选项2,您始终必须执行两个查询。
首先在用户集合中查询用户对象,然后在样式的查询中执行
,从
加载与任何TripID匹配的行程项目。您将在始终索引的user.trips
字段上查询。当然,当您总是加载您的用户时,只有一个查询真正起作用\u id
write
,您的模型效率很低,因为对于每次新的旅行,您都需要更新两个集合(旅行和用户)。因此,目前您的写操作增加了一倍,而且通常写操作比读操作更昂贵
最后:拥有易于维护的代码比一点性能更重要-->只需使用mongoose
populate
功能,一切都会自动完成。不要将引用存储为字符串,而是将其存储为ObjectId类型,并在模型中使用ref
keywoard。太棒了,这正是我所希望的洞察力!在我的范围内,与微不足道的读改进相比,我更喜欢写性能。我还没有使用猫鼬填充功能,但我一定会研究它。谢谢你,雷托!:)顺便说一句,这本书对你来说可能是一本好书——这本书出自有史以来最著名的计算机科学家之一:“过早优化是万恶之源”哈哈,这本书将是一本好书