Java 可扩展文件存储的最佳做法

Java 可扩展文件存储的最佳做法,java,file-storage,Java,File Storage,假设我们正在使用Play Framework(例如Spring)编写应用程序,我们希望使用一种标准的方法来管理和存储使用API(对象存储)上传的二进制文件,而不是自己管理文件系统。与使用Amazon云存储类似,但不锁定外部提供商 设想一下,我们也希望能够在与您正在开发的应用程序相同的服务器上运行此服务,直到增长需要您将文件存储移动到它自己的服务器(或群集),并将您的应用程序本身移动到它自己的群集中。如果我们从集群就绪服务开始,那么我们肯定可以快速扩展 我们是在小规模运行时继续自己管理文件系统,还

假设我们正在使用Play Framework(例如Spring)编写应用程序,我们希望使用一种标准的方法来管理和存储使用API(对象存储)上传的二进制文件,而不是自己管理文件系统。与使用Amazon云存储类似,但不锁定外部提供商

设想一下,我们也希望能够在与您正在开发的应用程序相同的服务器上运行此服务,直到增长需要您将文件存储移动到它自己的服务器(或群集),并将您的应用程序本身移动到它自己的群集中。如果我们从集群就绪服务开始,那么我们肯定可以快速扩展

我们是在小规模运行时继续自己管理文件系统,还是采用其他方式

这是我们需要考虑运行本地Hadoop HDFS实例的地方吗?例如,这样我们就不需要在应用程序中重写文件上载和处理,并且可以在需要时将文件管理系统扩展到集群中。如果将此功能作为带有公共API的服务提供,例如在内存中运行H2DB进行集成测试,那就太好了

或者,当我们还在制作简单的原型应用程序时,Hadoop HDFS、OpenStack Swift或Ceph是否过度杀戮

我确信我遗漏了一些东西,但我正在努力寻找解决方案。手工管理文件系统感觉很脏,不重写就无法将应用程序推送到任何PaaS提供商。同样,我认为还应该有一个本地解决方案,而不是总是与亚马逊等公司集成


有什么想法吗?

Hadoop HDFS用于存储非常大的文件(一个文件中有多GB的文本)并并行处理。您看过MongoDB附带的GridFS吗?()我在我的项目中使用了卡桑德拉,根据我的研究/阅读,Netflix也是如此。您对待字节数组(BLOB)就像对待任何其他数据库一样,只是分发是免费的,并且是线性可伸缩的。它还提供复制策略,以便在节点发生故障时确保数据足够安全。@kha:Cassandra常见问题解答有点不鼓励这样做:@a_horse_,_no_name True,但对于不需要流式传输的较小文件(并且小到可以加载到内存中),它是有效的。如果文件太大,无法轻松地加载到内存中(这不是我的用例),您可以使用Netflix提供的,并提供从Cassandra加载文件的流式接口,我认为它不再试图将整行加载到内存中(虽然我没有用过它,所以我不确定,但我想Netflix正在加载巨大的文件,所以它不知怎么工作)。