2016-05-01 52 views
0

我正在创建一个简单的系统,用户可以通过在搜索框中输入该图像的名称来查看小图像。我无法决定如何以最有效的方式存储图像。我想到的3个解决方案,我想知道哪一个是对这个问题的最佳解决方案:将图像存储在数据库vs文件服务器上与服务器上的Zip文件

  1. 存储图像的斑点或Base64串在一个数据库和基于与用户输入加载图片简单的查询。这样做会增加数据库的负载并导致更长的加载时间。

  2. 将图像作为单独文件存储在文件服务器上。通过根据用户输入分配image.src属性来加载它:image.src =“./server/images/”+ userInput;然而,这样做会增加我服务器上的文件请求数量,所以它会更加昂贵。或者最后,我可以将图像存储在文件服务器上的一个zip文件中。在程序开始时立即下载。这样做的好处是,加载页面时只会有一个请求。但是,加载所有文件需要一些时间。

请注意,每个图像的大小约为1-3KB。所有图像将手动放置在服务器/数据库中。此外,最多只有100-200幅图像。所有这些考虑可能无关紧要。但我想知道推荐的方法是什么。

注意:我运行的服务器是AWS服务器,我发现请求太多会增加服务器的成本。这就是为什么我对方法nr怀疑。 2

+1

#3很可能是一个不起动。如果你有10K图像并且用户只能查看1K(或500,或其他),会发生什么?您已经使用带宽来传输绝大多数内容从未使用的文件,并增加了将从zip文件查看的*文件定位和提取到磁盘上可加载的临时文件的开销观看。您还添加了在添加或删除图像时更新zip文件的开销和复杂性。 –

+0

只有大约100张图片。但是你所说的话仍然适用。好点子。 –

+0

至于你的笔记,无论是请求从数据库还是从磁盘加载图像,你都会有相同数量的请求。 –

回答

1

我也管理存储的图像并从AWS EC2中检索。我的解决方案和对您的建议与选项2类似,但添加缓存可以减少服务器请求。

将图像保存在一个文件夹中,或者更好地存储在S3存储中,并根据包含URL的数据库查询或仅图像名称的名称进行调用。然后将其放置在HTML中的占位符内。

Select url from img.images where image_name='blue_ocean' 

然后我把它绑定到一个占位符在HTML

<img src="/images/< blue_ocean>.jpg alt=""> 

关于许多请求到服务器,您可以缓存图像,我建议使用Service Workers一个强大的WebAPI允许缓存图像,并因此减少服务的数据量。

另一种方法是通过解析它的X,Y使用Sprites,其是一个文件或图像片,其包含了所有的请求的图像,因此代替许多请求时,只有一个请求,然后抓住每个所需图像,坐标。这种方法非常有效,可用于游戏中,以减少多次请求短时间内多个图像的开销。

相关问题