我的问题是关于显示缩略图和存储空间。
假设我有一个网站,用户可以上传照片并在相册中查看照片。
这种情况下照片通常如何存储?图像本身还是通常存储在数据库中的文件路径?
如果照片很大并且您想要显示缩略图,那么最好是:
答案 0 :(得分:4)
将图像存储在数据库中几乎总是一个坏主意。 BLOB可以真正减慢数据库的速度。它还限制了您在不同驱动器周围传播存储的能力。当文件是分开的时,您甚至可以拥有一个或多个单独的映像服务器来减少主动态服务器上的负载。我的建议是:
在数据库表中,包含图像所在目录和图像名称的列。这样您就可以自由地更改存储图像的位置,循环驱动器,稍后添加更多存储空间以及将新图像放入新存储中,或者您想要的任何内容。将路径和文件名存储在单独的字段中会使图像从一个目录移动到另一个目录变得微不足道。
您肯定希望生成缩略图以减少网络带宽并使应用程序运行得更快。但是,您可以根据需要生成缩略图,或者在系统负载较低时生成缩略图。如果您使用的是Linux,ImageMagick可以自动批量调整图像大小。它甚至可以按百分比而不是绝对数量调整大小。
答案 1 :(得分:0)
某些软件(如TikiWiki)将照片存储在数据库中。然后它还会在数据库中缓存缩略图大小的照片。
其他软件将其存储在目录中。这就是Gallery2的运作方式。我发现目录方法更具可扩展性。如果请求的尺寸与原件尺寸不同,通常应用程序将使用ImageMagick调整照片大小,然后存储调整大小的照片的副本。
另一种方法是将照片重新上传到S3等服务,而不是将照片存储在本地。
答案 2 :(得分:0)
这是常见问题,基本答案取决于它。您需要提供更多信息。你打算用什么数据库? SQL Server 2008具有一些很好的新功能,可以使用FILESTREAM函数处理此场景。一般来说,我更喜欢将它们放在数据库中,但是如果你只是把它们放在自己的脑中而不考虑设计和访问要求,那么随着照片数量的增加,你的表现会很差。
答案 3 :(得分:0)
如果您绝对肯定您的网络服务器将始终可以访问托管图像的文件系统,那么请走这条路线。也许
但是,如果您认为您可能需要创建图像服务器,因为您的Web服务器上的硬盘驱动器空间不足或者您需要运行多个Web服务器,那么省去麻烦并将它们存储在数据库中。存储在文件系统中的难点是跨越网络的安全要求。
另外,请记住,并非所有数据库服务器在这方面都是相同的。 SQL 2008引入了FILESTREAM数据类型,它实际上将图像存储在本地文件系统上,同时允许通过db服务器进行所有读/写访问。这样做的另一个好处是允许您在存储时对传入的文件运行病毒扫描程序。
Oracle现在有一些不错的文件存储设施了。 MySQL的?我不认为我想尝试,但你可能没事。
关于第二个问题:将缩略图与图像一起保存。此过程仅在每个图像上发生一次,并节省了演示带宽。使用HTML来调整图像大小确实对客户端没有任何作用。