2012-12-07 39 views
0

我的團隊和我已得到文件格式的要求,其中包含支持Java庫的文件格式,該文件格式包含有關某些較大文件的各種元數據。實際上,我們希望將大文件(可能是100MB)和其他相關文件(元數據,非破壞性編輯等)封裝到一個捆綁的歸檔文件中。使用Java庫的隨機訪問結構化歸檔文件格式

對於一次性的創作,這是一件輕而易舉的事:剛扔在一個Zip文件的一切。但我們希望能夠不斷更新元數據,非破壞性編輯等。我們不希望將整個大於100MB的內容轉儲到臨時目錄,然後將所有內容壓縮回來,只需將行添加到其中一個元數據文件。

有一些項目(例如TrueVFS)表面聲音理想,聲稱將zip文件或其他存檔文件格式抽象爲文件系統。但仔細觀察看來,我們得到的唯一就地更新功能很簡單,只是appending new files,實際上並沒有改變或附加到單個文件。

我們需要的是位於Zip文件和關係數據庫之間的一些文件格式。有層次結構的東西會很棒。它必須有效地支持合理的大文件(超過100MB),並允許隨機訪問來添加,刪除和更改歸檔中的單個文件。我很驚訝無法找到任何東西。有什麼建議麼?

P.S.我幾年前遇到了不好的經歷,Microsoft compound file format被損壞了。我不知道像Apache POIFS這樣的東西是否可靠和高效的大文件。

回答

0

我不相信你所要求的是容易可行的,原因很簡單:文件系統一般不支持在文件中間插入數據 - 不是沒有截斷和改寫的餘數。這意味着當一個純文件存儲在一個存檔文件中時,簡單文件上的一個簡單附加文件將變爲截斷重寫操作。

你必須找到一種本質上覆制多大的實際文件系統的功能,爲了讓這樣的操作一些基於塊的格式。

我會着重於重構整個系統來強制執行該大數據文件的某些結構。這可以讓你把它變成可以存儲在數據庫中的東西。例如,基於行的文本可以存儲在具有兩列的表格中 - 行號作爲主鍵和行文本。任何基於行的操作都很容易變成基於DB的操作。

然後,您可以只使用嵌入式數據庫,如SQLite保持在同一文件中的一切,而不依賴外部服務器上。

+0

市場上有幾種這樣的虛擬文件系統。無需在任何地方推送不適當的sqlite。 –

+0

@ EugeneMayevski'EldoSCorp:使用結構化格式比存儲更有優勢。您可以用更少的代碼和大量工作來做更多的事情,並且它還爲將來的擴展做好準備,例如使用外部數據庫服務器來存儲中央存儲... – thkala

+0

結構化數據的結構化格式不錯。對於非結構化數據和較大文件,DBMS會引入不必要的開銷。 –

0

根據你想,你可以使用運行應用程序在哪些平臺我們Solid File System - 這是一個自動調整大小的容器文件支持的虛擬文件系統。它是用Ansi C編寫的,並且有Android的Java JNI包裝器(並且可以根據請求將這個包裝器帶到其他平臺 - 我們之前沒有這樣的目標)。

還存在代碼庫文件系統,據我所知,它也提供了一個Java的JNI。