我們有許多個Meters,它們以給定的時間間隔讀取大量參數,並將數據(以CSV格式)上傳到MYSQL數據庫。優化Rails應用程序數據庫中的大量行
我在Rails的如下仿照這樣的:
Meter
has_many :parameters
Parameter
belongs_to :meter
has_many :readings
Reading
belongs_to :parameter
(我用正常的外鍵 - meter_id和parameter_id - 到鏈接表)
這是偉大的工作與我的種子數據我在參數模型中使用self.readings.pluck(:value).latest
以獲取最新值並將其傳遞給視圖。
唯一的問題是儀表每30秒上傳一次數據。這意味着 - 由於目前有20個參數 - 僅僅超過一個月的數據,我的Readings表中就有超過20,000,000行,這意味着抓取最新數據的查詢每個需要大約500ms。
我追求優化這個方法的建議。我已經爲parameter_id字段添加了一個索引,但除此之外,我並不確定要繼續執行的最佳方法...
這可能是我需要重新考慮數據庫的結構,但這似乎是最有意義的,因爲我希望能夠動態地添加新的參數(因此爲什麼我不能只是讓我的列成爲參數名稱),這似乎是Rails默認存儲數據的方式。
在此先感謝。
您的數據庫模式似乎沒問題,但關係數據庫有其侷限性。你有一個很好的例子(時間序列)來使用NoSQL(例如'Cassandra'),因此我建議從那裏開始。 Cassandra也讀取CSV。 – blelump 2014-11-20 19:34:33