Mongoid和has_and_belongs_to_many关联

时间:2014-01-19 08:18:18

标签: ruby-on-rails performance mongodb mongoid

我正在使用与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名用户时会有多大,我很害怕我会有查询和搜索问题,即使我添加了这个字段的索引,文档的大小也会很大我想,有人能告诉我是否应该担心性能问题和我错在哪里

谢谢

2 个答案:

答案 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

提供更多关于您的模型的信息(记录数量,可能的增长,您将查询的内容等)