Mongoid和has_and_belongs_to_many关联

3
我正在使用Mongoid的HABTM关联,以下是我的模式: 1)用户具有多个专业 2)专业也具有多个用户。
这样做可以正常工作,我很满意。但是我注意到,任何一个专业实例中的用户id都被保存为一个数组,如下所示:
<Specialization _id: 52db847e6d69631dee000000, user_ids:      [BSON::ObjectId('52db84b66d69631dff000000'), BSON::ObjectId('52db88906d69631f17000000')]

如果我只有两个使用这种专业技能的用户,那么当我想象到将来可能有10,000个用户时,我就会害怕出现查询和搜索问题,即使在此字段上添加了索引,文档的大小也会很大。请问是否应该担心性能问题,以及我哪里做错了?谢谢。
2个回答

3

您的顾虑是合理的。我尝试使用HABTM,但它的扩展性非常差。嵌入式提供了更快的速度,但我需要为嵌入模型创建独立存在的文档(而嵌入意味着您无法这样做)。最终,我只是通过使用数组字段存储外键ID来创建了一个手动关系。虽然有些简单粗暴,但它解决了我在可扩展性方面的问题。


我觉得我会保持现状,但是通过使用“.without”方法来优化查询,这可能会在很大程度上解决问题。 - NoDisplayName

0
首先,您需要重新考虑是否要使用HABTM关系,或者您可以在不使用mongoid助手的情况下完成它。
您可以考虑将特殊化嵌入到用户中(但这取决于您的数据量)。
现在,如果ID样式不方便,您可以覆盖它,例如:对于特殊化。
field :_id, as: :spec_id, type: String
before_save :set_id

...

private

def set_id
  #creates a simpler id
  #self.spec_id = ...
end

请提供有关您的模型的更多信息(记录计数,可能的增长,您将查询什么等)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接