2014-01-22 83 views
1

我正在開發需要處理多個文檔文件(PDF,DOC等)的應用程序。在Java EE 6應用程序中存儲大量文件的最佳方法(數據庫/文件系統)

我使用PostgresSQL 9.2將這些文件存儲爲大對象和Hibernate Blob,以便以不會超載內存的方式將它們寫入並讀取爲流。

我的問題是如果有最好的方法來處理它?或者在數據庫中存儲大量的二進制文件是一個好方法?也許將文件存儲在文件系統中速度更快,但這並不能保證數據的完整性,也不保證可擴展性。

回答

0

這一切都取決於您的需要和用例。至少在db中將它們存儲爲blob沒有任何問題。如果您已經擁有數據庫並存儲了其他相關數據,並且需要一致的方式,那麼您的方法可能是唯一的方法。

當然,如果您有一些數據庫無法滿足的要求,或者當您認爲使用數據庫過度使用數據庫是因爲您沒有數據庫通常滿足的要求,那麼您可能會想到其他方法。

正如你所提到的那樣,存儲在文件系統中有一些缺點。但是,如果你有一些限制,比如同一個名字不會被使用兩次,並且只有一個實例正在寫同一個文件,不需要事務/回滾等等,文件系統方法在簡單性方面獲勝。

例如,如果您需要擴展,因爲您存儲的數據過多,以至於一臺機器不足以存儲它們,您可能需要考慮使用NOSQL技術來擴展存儲。

你的問題是如此的開放,我可以永遠寫幾個選項。

+0

將文件存儲爲blob會導致OutofMemoryError?我正在處理應用程序中的一些文件,並將文件存儲爲android sqllite數據庫中的編碼字符串,並在文件總大小達到20 mb時導致出現OutofMemoryError錯誤,其中可能包含數百個文件。使用blob會導致同樣的問題嗎? ? – KJEjava48

0

根據您嘗試存儲的數據類型有時候休眠並不是真的有用,對我來說這聽起來對我來說可能是其中的一種情況。將一個平面文件拖入一個Java對象可能不會爲你購買那麼多。您可能想考慮將文件存儲在像MongoDB這樣的面向文檔的數據庫中。你正在做的就是這些類型的數據庫。

相關問題