【问题标题】:Mongoid and has_and_belongs_to_many associationMongoid 和 has_and_belongs_to_many 关联
【发布时间】:2014-01-19 08:18:18
【问题描述】:

我正在使用与 Mongoid 的 HABTM 关联,​​并且我有以下方案:
1) 用户 has_and_belongs_to_many:专业化
2) 专业化 has_and_belongs_to_many :users

一切正常,我很高兴,但我注意到任何专业化实例中的用户 ID 都保存为数组,如下所示:

<Specialization _id: 52db847e6d69631dee000000, user_ids:      [BSON::ObjectId('52db84b66d69631dff000000'), BSON::ObjectId('52db88906d69631f17000000')]

如果我只有 2 个具有此专业的用户,当我想象当有 10,000 个用户时它会有多庞大时,我害怕我会遇到查询和搜索问题,即使我添加一个这个字段的索引,我猜文档的大小也会很大,有人可以告诉我是否应该担心性能问题以及我错在哪里

谢谢

【问题讨论】:

    标签: ruby-on-rails performance mongodb mongoid


    【解决方案1】:

    您的担忧是有道理的。我尝试使用 HABTM,但它的扩展性很差。嵌入为我提供了更快的速度,但我需要嵌入模型的独立现有文档(嵌入意味着你不能这样做)。最终,我只是通过一个数组字段来存储外部 ID 来创建手动关系。它又快又脏,但它解决了我的可扩展性问题。

    【讨论】:

    • 我想我会保持原样,但使用“.without”方法优化查询,这可能主要解决问题
    【解决方案2】:

    首先,您需要重新考虑是否要使用 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多