0

所以我已經開始工作,我必須從xls excel電子表格中導入一噸記錄的項目。sqlite數據庫是蝸牛慢,如何形成一個適當的db

該電子表格有超過105列和1750行,其中我使用軌道控制檯腳本創建1記錄每列/行條目....以及剛剛達到183,000記錄的北部,現在軌道是緩慢的,因爲所有地獄。即使只是試圖加載 Record.last(30) 在行動/控制器我想加載需要超過5分鐘。

這是自從我冒險進入rails之後遇到的一個新問題,我從來沒有必須使用任何大量的記錄。

來自電子表格的數據僅爲列(日期)和行(度量)。記錄是一個Video對象的孩子,所以基本上我只是試圖保持視頻的每週記錄視圖度量。我的問題是有超過1700個視頻和每個視頻90個記錄的平均值。

我對明天的想法(它在這裏的後半部分)是創建一個日期和視圖屬性來記錄日誌數組並存儲在裏面的日期和視圖數組:view然後在模型中創建一個方法到日期.zip(視圖)並將它們轉換爲哈希值。然後只要在顯示它們的時候調用該方法即可查看。

我在尋找關於如何正確處理和存儲大數據的建議......我做錯了什麼?

此外,只是爲了清楚說明,此應用程序中沒有存儲視頻或圖像。只有原始數據。

+0

你可以使用客戶端/服務器dbms而不是sqlite嗎? – 2012-03-05 10:31:12

+0

經過研究,我實際上發現它只是缺少索引記錄的外鍵索引。有時我可以用70-130 +關聯的記錄調用60個視頻片斷,導致我的數據庫篩選60次每個視頻的外鍵的180,000條記錄。 – n0denine 2012-03-05 17:09:00

回答

1

經過研究,我實際上發現它只是缺少 索引記錄的外鍵。有時候我可以打電話給60 帶有70-130 +關聯記錄的視頻片斷導致我的db 篩選了每個視頻的外部關鍵碼的所有180,000條記錄60 次。

經過一番搜索,我發現​​。由於我對數據庫設計的知識有限(即使這是給定的),我並沒有意識到這造成了巨大的差異。

創建一個新的遷移AddIndexToVideos有:

class AddIndexToVideos < ActiveRecord::Migration 
    def self.up 
    add_index :records, :video_id, :name => 'video_id_ix' 
    end 

    def self.down 
    remove_index :records, :video_id, :name => 'video_id_ix' 
    end 
end 

傾斜,然後從負載記錄是這樣的:。

... 記錄負載(400.5ms)選擇 「記錄」 * FROM「history」WHERE 「records」。「video_id」= 6081 AND(created_at>'2012-02-27 16:12:44.164356')ORDER BY created_at ASC LIMIT 1 ... (還有更多)用aro以及各自對此的加載時間爲400ms:

...記錄載入(0.3ms)SELECT「records」。* FROM「history」 WHERE「records」。「video_id」= 6084 AND(created_at>'2012-02 -27 17:32:17.377215' )ORDER BY created_at ASC LIMIT 1 ...

課...經常使用在父表始終外鍵索引。 我希望這篇文章可以幫助未來的人。

相關問題