我拥有数百万个大小高达1MB的文件。我需要将它们存储在文件系统中,并能够从我的Java应用程序中读取它们。我有点担心额外的元数据,iNodes和性能的成本。如何存储大量小文件
我不希望为此运行外部服务,并希望嵌入到JVM中的某些内容。
在我重新发明轮子之前,这个问题已经解决了吗?
我在想,在某个地方会有一个FileSystem
的实现,它会在一个文件中存储多个文件 - 但是我所有的搜索结果都是谷歌内存实现。对于任何与我的服务的其余部分不同步的任何事情,都会增加额外的奖励...
我拥有数百万个大小高达1MB的文件。我需要将它们存储在文件系统中,并能够从我的Java应用程序中读取它们。我有点担心额外的元数据,iNodes和性能的成本。如何存储大量小文件
我不希望为此运行外部服务,并希望嵌入到JVM中的某些内容。
在我重新发明轮子之前,这个问题已经解决了吗?
我在想,在某个地方会有一个FileSystem
的实现,它会在一个文件中存储多个文件 - 但是我所有的搜索结果都是谷歌内存实现。对于任何与我的服务的其余部分不同步的任何事情,都会增加额外的奖励...
您可以使用嵌入式关系数据库(如H2)并将文件的内容存储为Blob。
我不确定是否存在面向文档的NoSQL数据库,它可嵌入到Java应用程序中。如果是这样,这可能是一个很好的解决方案。您可以查看this article以查找适合您需求的数据库系统。
另一种解决方案是将文件简单地存储在文件系统中,并使用缓存框架将文件保存在内存中以提高性能。
我不得不多次存储数百万个文件,并且我总是在文件夹层次结构下实现存储文件。
文件名为abcdefghijk0123.extension
将被存储在文件夹结构ab/cd/ef/gh/ij/abcdefghijk0123.extension
内。这样做可以将大量文件存储在同一个文件夹中,但不是全部文件。设置文件夹结构可帮助您处理文件夹的最大文件数量。
好的方法,如果文件需要留在文件系统。非常类似于Unix系统通常管理的terminfo文件。 –
在内存实现中有什么问题?内存实现在做什么 - 读取文件并将文本附加到变量中? – Prashant
我听说过zipfilesystem http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html,但从来没有与 – user43968
@Prashant一起工作 - 我没有百万兆字节的遗憾的是RAM。 – Cheetah