2016-02-29 87 views
0

我擁有數百萬個大小高達1MB的文件。我需要將它們存儲在文件系統中,並能夠從我的Java應用程序中讀取它們。我有點擔心額外的元數據,iNodes和性能的成本。如何存儲大量小文件

我不希望爲此運行外部服務,並希望嵌入到JVM中的某些內容。

在我重新發明輪子之前,這個問題已經解決了嗎?

我在想,在某個地方會有一個FileSystem的實現,它會在一個文件中存儲多個文件 - 但是我所有的搜索結果都是谷歌內存實現。對於任何與我的服務的其餘部分不同步的任何事情,都會增加額外的獎勵...

+0

在內存實現中有什麼問題?內存實現在做什麼 - 讀取文件並將文本附加到變量中? – Prashant

+1

我聽說過zipfilesystem http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html,但從來沒有與 – user43968

+1

@Prashant一起工作 - 我沒有百萬兆字節的遺憾的是RAM。 – Cheetah

回答

0

您可以使用嵌入式關係數據庫(如H2)並將文件的內容存儲爲Blob。

我不確定是否存在面向文檔的NoSQL數據庫,它可嵌入到Java應用程序中。如果是這樣,這可能是一個很好的解決方案。您可以查看this article以查找適合您需求的數據庫系統。

另一種解決方案是將文件簡單地存儲在文件系統中,並使用緩存框架將文件保存在內存中以提高性能。

1

我不得不多次存儲數百萬個文件,並且我總是在文件夾層次結構下實現存儲文件。

文件名爲abcdefghijk0123.extension將被存儲在文件夾結構ab/cd/ef/gh/ij/abcdefghijk0123.extension內。這樣做可以將大量文件存儲在同一個文件夾中,但不是全部文件。設置文件夾結構可幫助您處理文件夾的最大文件數量。

+0

好的方法,如果文件需要留在文件系統。非常類似於Unix系統通常管理的terminfo文件。 –