我在应用中试用了Mongoid,Stations
每5分钟发送一次Observations
(288 /天)。这相当于一个非常大的数据集,如何建立性能关系?
最关键的问题是获取所有电台和最后一次观察。这听起来很简单但是在Postgres中是PITA。
我正在使用
Rails 4.0.3
Mongoid 4.0.0beta
1。嵌入
class Station
embeds_many :observations
def latest_observation
observations.last
end
# fields ...
end
class Observation
embedded_in :station
# fields ...
end
2。有许多/属于/ embeds_one:latest_observation
class Station
has_many :observations
embeds_one :latest_observation, class: 'Observation'
end
class Observation
belongs_to :station
after_save :update_station
def update_station
self.station.latest_observation = self
self.station.save!
end
end
答案 0 :(得分:1)
我认为第一种选择不是可行的解决方案。你最终会得到一些(少数)站点记录,因为嵌入观察结果会变得很大。
就MongoDB
而言,我建议:
stations: [
{
id: sta_1234,
observations: [ {observation_id: obs_1234, observation_data: {} }, ...]
}, ...
]
观察结果具有固定的大小。
那样你不会失去任何历史
实际上observations
可能会更好observation_ids
而你只保留ids或每个观察的一些有用数据
关于它的一个“缺点”是你必须在某些时候使用原始mongo因为mongoid不支持所有东西(但是),但我认为它的好处更大。
使用这种方法,您将不得不在应用中处理插入的重复数据,这应该没问题。