我正在使用与Mongoid的HABTM关联,我有以下方案:
1)用户has_and_belongs_to_many:专业化
2)专业化has_and_belongs_to_many:用户
一切正常,我很高兴,但我注意到任何专业化实例中的用户ID都保存为数组,如下所示:
<Specialization _id: 52db847e6d69631dee000000, user_ids: [BSON::ObjectId('52db84b66d69631dff000000'), BSON::ObjectId('52db88906d69631f17000000')]
如果我只有2位具有此专业化的用户,并且当我想象当有10,000名用户时会有多大,我很害怕我会有查询和搜索问题,即使我添加了这个字段的索引,文档的大小也会很大我想,有人能告诉我是否应该担心性能问题和我错在哪里
谢谢
答案 0 :(得分:3)
您的担忧是有效的。我尝试使用HABTM,但它的缩放非常差。嵌入为我提供了更快的速度,但我需要独立的嵌入式模型的现有文档(嵌入意味着你不能这样做)。最后,我通过使用数组字段来存储外部ID来创建手动关系。它快速而又脏,但它解决了我的可伸缩性问题。
答案 1 :(得分:0)
首先,你需要重新考虑是否要使用HABTM关系,或者你可以在没有mongoid帮助者的情况下进行。
您可以考虑将specialiazations嵌入用户,(但这取决于您的数据量)。
现在如果id样式不方便你可以覆盖它 例如。专业化
field :_id, as: :spec_id, type: String
before_save :set_id
...
private
def set_id
#creates a simpler id
#self.spec_id = ...
end
提供更多关于您的模型的信息(记录数量,可能的增长,您将查询的内容等)