2016-02-29 76 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文件。 –