我有这样的模型结构:
class Entity < ActiveRecord::Base
habtm :properties_1
# ...
habtm :properties_N
end
我需要通过任何属性集写入请求,它会导致N个连接:
Entity.joins(:properties_1, :properties_N).where("properties_1.id = ? AND properties.N = ?", p1_id, pN_id)
N可以是> 20
我可以使用什么来提高查询性能?
我考虑将所有这些设置缓存到具有序列化属性的大表,但看起来这个问题很常见,可能存在任何现有的解决方案。
有什么想法吗?
感谢您提前!
答案 0 :(得分:1)
这看起来像实体 - 属性 - 值(EAV)模式。
http://www.slideshare.net/stepanyuk/implementation-of-eav-pattern-for-activerecord-models-13263311
https://github.com/kostyantyn/hydra_attribute
EAV在关系数据库中不是一个好的解决方案,最好使用像MongoDB这样的面向文档的数据库