看起来存储文件是基本的东西,但是偶然发现了一定的问题。以下是我在JAVA编程时在服务器上存储文件的理解。
您无法存储在mysql中,因为如果文件很重,则不建议使用。所以,我决定不选择这个。
也不建议将文件存储在容器中,例如Tomcat或Wildfly,可能是因为它需要部署并且类似的东西?
你绝对可以存储文件,Apache文件服务器?我很困惑。我们可以这样做,并将文件存储在这里,将其引用到数据库中吗?这与网站存储图像或文件的方式类似吗?
我也遇到过一些像NoSql这样的数据库,但是我没有深入研究,认为最后可能是错的,我本可以把时间花在其他东西上。
这样说,在服务器中存储文件,在JAVA Web应用程序上引用它并将其记录在数据库中的好方法是什么?
答案 0 :(得分:1)
我们通常不会将文件放在数据库(NoSQL或RDBMS)中,因为它们不是文件系统。如果有人上传文件,则将其存储在文件系统中,并可能在数据库中记录名称和其他元数据以备将来使用。您可以从技术上将文件的内容放在数据库中,它有自己的优点和缺点 - https://softwareengineering.stackexchange.com/a/150787/156860
建议不要将上载的文件驻留在Web / app服务器中,因为您可能有多个服务器来处理负载,如果您将文件放在一个服务器中,则另一个服务器可能在访问内容时遇到问题。如果一台服务器出现故障,该服务器中的文件将无法供其他服务器使用。您可能需要一个共享的驱动器/磁盘,所有服务器都可以连接并读取该文件。
JavaEE通过提供资源适配器来处理这个问题,该资源适配器抽象出应用程序如何与资源交互'通常(也可以是文件或其他资源)。但是如果没有关于什么样的文件,有多大以及如何使用它们的更多细节,那么很难找到''这个问题的解决方案。
答案 1 :(得分:0)
这取决于你的用例是什么。如果你更深入地了解你想要解决的问题,你应该得到更好的回应。
我认为一般来说,像Amazon's S3这样的云解决方案非常普遍,很好,并且很容易使用。您还可以获得服务器的好处,不一定必须自己提供文件,这意味着非基于文件的请求的带宽更多。
您无法存储在mysql中,因为如果文件很重,则不建议使用。所以,我决定不选择这个。
这实际上取决于你正在做什么,如果你有高流量和大文件,那么这不会很好地扩展。如果您的流量较小且文件较少,则没有理由认为这不是一个可行的解决方案。
也不建议将文件存储在容器中,例如Tomcat或Wildfly,可能是因为它需要部署并且类似的事情?
不完全确定“in”容器的含义,你的意思是在war文件中吗?还是在本地文件系统上?通常不建议但是,它实际上取决于流量,文件大小等。本地文件系统可以工作,但你应该使用像NFS这样的东西,所以如果服务器发生故障,文件就不能用了它
我见过人们使用本地文件系统和git来存储通过服务器保存的文本文件。这给了他们冗余和版本。
你绝对可以存储文件,Apache文件服务器?我很困惑。我们可以这样做,并将文件存储在这里,将其引用到数据库中吗?这与网站存储图像或文件的方式类似吗?
我从来没有亲自使用过Apache文件服务器,但是你有什么困惑呢?在做了一个简单的Google后,它看起来基本上只是一个Apache服务器,这意味着你发出HTTP请求来存储和检索文件。这与S3的工作原理类似,所以我认为它可能是一个很好的通用解决方案。
我也遇到过一些数据库,比如NoSql,但我没有深入研究,认为最后可能会出错,而且我会把时间花在其他东西上。
您选择的实际NoSql解决方案将拥有自己的要求,因此我不能说解决方案有多好,但同样,它实际上取决于您的流量和文件大小。我使用的NoSql解决方案都有HTTP接口,因此使用它们与Apache或S3没有什么不同。最大的区别是你必须像NoSql解决方案中的数据库那样查询文件,但这些查询通常是通过HTTP发送的,所以并非真的那么不同。