我每隔12小時在我的amazon EC2微型實例上運行一個cron作業。它下載118MB文件並使用json庫進行解析。這當然會導致實例耗盡內存。我的實例有416MB的內存空間,但是我運行的腳本下降到6MB,然後被操作系統殺死。解析100MB JSON負載的有效方法
我想知道我在這裏有什麼選擇?是否有可能通過Ruby有效地解析這個問題,還是我必須下降到像C這樣的低層次的東西?我可以得到一個更強大的亞馬遜實例,但我真的想知道是否有可能通過Ruby來實現這一點。
更新: 我看過yajl。它可以給你json對象,因爲它解析,但問題是,如果你的JSON文件只包含1個根對象,那麼它將被迫解析所有的文件。我的JSON看起來是這樣的:
--Root
-Obj 1
-Obj 2
-Obj 3
所以,如果我做的:
parser.parse(file) do |hash|
#do something here
end
因爲我只有1個對象,它將解析整個JSON。如果Obj 1/2/3是root,那麼它會工作,因爲它會給我他們一個,但我的JSON是不是這樣,它解析並吃掉了500MB的內存...
UPDATE #2: 這裏的大118MB文件的較小版本(7MB):
GONE
這是可分析的,我不只是採取一些個字節。從文件,只要你一看它整個。我尋找的數組是這個
events = json['resultsPage']['results']['event']
感謝
是有可能的下載分成6分或更多的段,然後把他們重新走到一起? –
100MB的JSON文本?你在儲存什麼?亞歷山大圖書館? ':P' –
你爲什麼使用JSON呢?聽起來不像這份工作的正確格式。更多以記錄爲導向的東西(甚至CSV)會更好地匹配。如果你無法控制格式,那麼也許你可以手動剝離根對象來強制格式轉換爲面向記錄的JSON。 –