MongoDB是否需要双重链接数据,类似于MySQL,其中相关条目具有指向彼此的ID。换句话说,是否有任何性能差异:
db.events.find({userIds: myId}).fetch()
和
db.events.find({_id: {$in: [1, 2, 3, 4]} }).fetch()
MongoDB是否需要双重链接数据,类似于MySQL,其中相关条目具有指向彼此的ID。换句话说,是否有任何性能差异:
db.events.find({userIds: myId}).fetch()
和
db.events.find({_id: {$in: [1, 2, 3, 4]} }).fetch()
通常,$in
查询速度快得惊人,但它是否是正确的方法取决于数据的基数(每个用户的最大事件数,每个事件的最大用户数)和您的查询模式。
一般来说,索引的想法是避免来回链接。这使得您提到的繁琐更新变得不必要。它也更容易查询,更容易维护,更容易分页。
最后一个参数特别重要,但取决于您的查询模式:假设您要显示用户最近参加的十个事件。然后,您可以创建一个{userIds : 1, eventDate: -1}
与查询完美匹配的索引,而不必拉取或迭代用户去过的所有事件。
如果您想使用其他方法进行此查询,您还必须将 存储eventDate
在用户中,这似乎很尴尬。
另一方面,如果活动规模很大,您可能会遇到活动对象大小的问题(想想 100 万参与者)。您可能希望对参与者的名称进行非规范化以进行显示,这会使对象变得更大。
如果您选择使用$in
查询,请记住
ObjectIds
并且用户每天都参加一个活动,您可能会点击_id
您拥有的每个存储桶,也包括旧存储桶,这可以贵)。