Web应用程序中的图像

时间:2014-04-20 13:02:00

标签: web

我正在处理用户上传大量图片的应用程序,我必须显示那些图片网页

存储和检索图像的最佳方法是什么。

1)数据库 2)文件系统 3)CDN 4)JCR 或其他什么

我所知道的是 数据库:从数据库保存和检索图像将导致对数据库的大量查询,并且每次都会将blob转换为文件。我认为这会降低网站性能

FileSystem:如果我将图像信息保存在文件系统中的数据库和图像文件中,则会出现同步问题。就像我对数据库进行备份一样,我们确实备份了images文件夹。如果有数百万个文件,它将消耗大量的服务器资源 我在这里读到它 http://akashkava.com/blog/127/huge-file-storage-in-database-instead-of-file-system/

另一个选择是CDN和JCR

请建议最佳选择

此致

2 个答案:

答案 0 :(得分:1)

如果您只计划部署到一台服务器(即不是负载均衡器后面的几台服务器),或者所有服务器都可以访问共享文件系统,那么使用文件系统只是一个选项。除非您在应用程序服务器中缓存频繁访问的文件,否则它也可能效率低下。

将数据库中的实际二进制数据存储起来可能有些过分,而不是数据库最好的数据,这是对的。

我建议组合:

  • 由公共可访问(但至关重要的公开只读)存储(如Amazon S3)支持的CDN(例如AWS CloudFront)意味着无论浏览用户位于何处并在适当的位置缓存,您的图像都能得到有效服务他们的浏览器(从而最小化带宽)。 S3(或类似)意味着您有一个API可以从您的应用程序服务器上传和管理它们,而不必担心所有服务器(以及外部世界)将如何访问它们。
  • 我建议可能会保存有关数据库中每个图像的元数据。这意味着您可以为每个图像分配一个唯一的密钥(由您的数据库生成),添加额外的信息(文件格式,大小,标签,作者等),还可以通过CDN将路径存储到S3(或类似的)作为可公开访问图像的路径。

数据库和共享的公共可访问存储的这种组合可能是一个很好的组合,为您提供两全其美的优势。数据库还意味着如果您将来需要移动/更改或批量删除图像(可能删除正在删除其帐户的作者上传的所有图像),您可以执行有效的数据库查询以收集元数据,然后更新/更改数据库表示存在的S3位置存储的图像。

您说要在网页上显示图像。这种组合意味着应用程序服务器可以有效地查询数据库以查看要显示的图像(包括限制作者,分页等),然后生成包含引用正确CDN路径的图像的视图。这意味着在将动态内容(显示图像的页面)与静态内容(图像本身通过CDN)结合起来时,查看图像也非常有效。

答案 1 :(得分:0)

CDN可能是您的不错选择。

您可以将图像链接与数据库中的图像信息一起存储。