簡體   English   中英

大型數據集中的Mongoid中的最佳關系

[英]Optimal relation in Mongoid for a very large data set

我正在嘗試使用具有每5分鍾(288 /天)發送Observations Stations應用程序中的Mongoid。 哪個加起來會構成一個非常大的數據集,如何建立性能關系?

最關鍵的查詢是獲取所有測站和最后的觀測值。 聽起來很簡單,但在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

我認為第一種選擇不是可行的解決方案。 您最終將獲得一些(很少)站點記錄,這些記錄會因嵌入觀測值而變得巨大。

關於MongoDB我建議:

  • 嵌入一​​定數量觀測值的站點集合(最近30天左右的觀測值)
  • 可以用作倉庫的觀測集合

stations: [ { id: sta_1234, observations: [ {observation_id: obs_1234, observation_data: {} }, ...] }, ... ]

觀測值具有固定大小。

那樣

  • 您可以快速參考最近的觀察結果。
  • 您將擁有固定大小的文檔(這對mongo非常有用!)
  • 您將不會失去任何歷史

    實際上, observations可能更佳,因為它是observation_ids而您只保留了id,或有關每個觀察值的一些有用數據

一個“缺點”是,您必須在某些時候使用原始的mongo,因為mongoid還不支持所有功能(但是),但是我認為這樣做的好處更大。

使用這種方法,您將不得不在插入應用程序時處理重復的數據,這應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM