我有一個rails應用程序,其中包含大約3000萬行的表格,這些表格由我的數據提供程序每季度向我提供的文本文檔構建。從那裏我做一些操作和比較其他一些表,並創建一個更多的自定義數據的表。更新Rails應用程序中的大量數據
我第一次做這件事時,我通過Rails控制檯運行了一個ruby腳本。這很慢,顯然不是最好的方法。
什麼是簡化此過程並在沒有任何或至少非常有限的停機時間的情況下在生產服務器上對其進行更新的最佳方法?
這是我想這個過程是最適合現在:
在數據讀取創建rake任務。使用activerecord-import插件進行批量寫入並關閉主動記錄驗證。將這些數據加載到全新的重複表格中。
在新創建的表上構建索引。
將新創建的表格重命名爲rails應用程序正在查找的名稱。
刪除舊的。
我打算在生產服務器上做的所有這些。
有沒有更好的方法來做到這一點?
從評論其他注意事項:
- 表已經存在
- 舊錶和數據都是一次性
- 表可以被鎖定只能選擇
- 必須最大限度地減少停機時間
- 我們目前服務器狀況是2個高CPU Amazon EC2實例。我相信他們有1.7GB的RAM,所以臨時存儲整個導入可能不是一個選項。
- 新數據是原始文本文件,行分隔。我有解析已經用Ruby編寫的腳本。
使用resque或delayed-job運行導入作爲後臺任務可能會起作用,您是否急於讓它們進入或者不希望服務器在運行時放慢速度。 – nodrog 2012-02-13 18:18:49
有點匆忙。我更關心的是爲此提供最無痛和自動化的流程,因爲我必須從現在開始每3個月完成一次,直到永遠。 – Patm 2012-02-13 18:26:17
可能的路線取決於您的確切要求。 您需要的表格是否已經存在?結構是否改變?你需要表中的舊數據嗎?新的數據是否完全取代了表格的舊內容?你能獨佔鎖定表嗎?你需要儘量減少停機時間?你有足夠的內存可用來暫時保存整個導入的數據嗎? – 2012-02-13 18:42:17