我正在研究铁路协会。
假设,我有一张表有很大关联的表。
Sample.rb
has_many :sample_assoas
has_many :assoas through: :sample_assoa
has_many :sample_assobs
has_many :assobs through: :sample_assob
has_many :sample_assocs
has_many :assocs through: :sample_assoc
and so on...
在这种情况下,我认为由于关系复杂,过程将非常缓慢。 (因为rails应保持匹配关系以获得结果。)
所以我想,如果我可以将所有关系数据存储到单个哈希以获得更快的结果,那该怎么办呢。
Samples schema
id :integer
name :string
hash :something...?
我发现postgresql“hstore”将数据存储在哈希值中。
但以这种方式存储是个好主意吗?
或者你有什么建议吗?
感谢
答案 0 :(得分:0)
首先,模型可以包含任何数字或关联。它不会影响处理时间。 hstore无法替换关联,两者都用于不同的功能。
关联用于简化查询构建。考虑:
class ModelA < ActiveRecord::Base
has_many :modelbs
end
class ModelB < ActiveRecord::Base
belongs :modela
end
您可以找到与ModelA关联的ModelB记录,如下所示:
@modela = ModelA.find(xxx)
@modelbs = ModelB.where(modela_id: @modela.id)
使用关联只需写:
@modela = ModelA.find(xxx)
@modelbs = @modela.modelbs
hstore用于以哈希格式保存值。所以它们不打算用作关联。在大多数情况下,我们不想在所有关联表中保存记录。所以我们应该添加关联。如果在这种情况下使用hstore,则大多数值将设置为nil。
在hstore的情况下,您需要手动迭代哈希以获得所需的结果。