2012-06-21 71 views
2

我需要一個接口,通過的MongoDB,我可以收集在處理數據就像一個標準的Python類文件對象。這些都將是相當小的文件(以KB爲單位,最多),特別是我需要的能力,追加這些所謂的文件。 (So this question is not a dupe.我應該如何將附加到mongodb中的小文件類對象?

我已經閱讀了GridFS的文檔,並且特別it says I should not use it for small files。我唯一能找到的其他實現都是PHP。我並沒有真的在尋求幫助編寫代碼的任何細節,但implementing the entire file api似乎是一項艱鉅的任務。

  1. 是否有任何捷徑或工具可以更容易地在python 2中實現文件類對象?
  2. 我是否錯過有人已經這樣做?

(我爲什麼這樣做呢?因爲我收到了我們部署一個預先存在的應用程序,在多節點雲環境不能透明地處理文件生成CSV文件第十一個小時的要求。)

回答

2

問題1:檢查出io模塊,尤其是IOBase。它通過一組相當明智的方法實現了所有文件。

+0

IOBASE是非常有益的,儘管它的ReadLine(S)的方法顯然需要閱讀()來輸出字節,這意味着你必須手動玩弄字符編碼(從來沒有的樂趣,尤其是在Python)。 – kojiro

0

你可以只將數據存儲爲二進制或文本,在MongoDB的集合。但是,你有兩個問題:

  1. 你必須實現儘可能多的Python的文件協議的爲你的其他代碼希望已經實現。

  2. 當您附加到「文件」時,文檔將在MongoDB中增長,並且可能需要在磁盤上移動到具有足夠空間容納較大文檔的位置。移動文件非常昂貴。

與GridFS的開始 - 文檔建議您不要使用靜態文件,但對於你的情況下,它是完美的,因爲PyMongo所做的工作爲你實現Python的文件協議MongoDB的數據。要附加到GridFS文件,您必須閱讀它,使用附加數據保存新版本,並刪除以前的版本。但是,無論如何,這並不比移動成長的文檔貴得多。

相關問題