2016-02-29 48 views
2

我正在使用PStore來存儲某些計算機模擬的結果。不幸的是,當文件變得太大時(我看到的超過2GB),我無法將文件寫入磁盤,並收到以下錯誤;Ruby PStore文件太大

Errno::EINVAL: Invalid argument - <filename> 

我知道,這大概是IO的限制,但我不知道是否有解決方法。例如,要讀取較大的JSON文件,我首先需要split該文件,然後分別讀取它。可能最終的解決方案應該是切換到後端的適當數據庫,但由於我使用的特定Ruby(Sketchup)的一些限制並非總是可行。

回答

1

我打算假設您的數據有一個可以用作原始鍵的字段。

因此,我會建議,而不是將數據轉儲到一個巨大的文件,你可以把你的數據到不同的文件/桶。 例如,如果您的數據有name字段,則可以取第一個1-4個字符的名稱,使用rojj-datafile.pstore這些字符創建一個文件並在其中添加條目。任何名稱以'rojj'開頭的記錄都將進入該文件。

一個更結構化的版本是把第一個字符作爲一個目錄,然後把文件放在那裏,就像r/rojj-datafile.pstore

很明顯,您的讀寫機制必須考慮到這個新的文件結構,並且毫無疑問最終將處理數據放入pstore的速度會更慢。

+0

你假設正確。不幸的是,每個密鑰的內容可能會生成一個已經有幾GB的文件。數據實際上是表示特定模擬結果的時間序列。我可以按時間步長分開,但是在那一點上,我可以簡單地爲每個文件保存一個「元帥」文件。 – Rojj