Spring Boot-存储图像的最佳方法(SQL后端)

时间:2018-07-21 11:38:03

标签: java sql-server spring spring-boot

存储图像的最佳方法是什么(考虑到空间和时间效率)。

假设这些图片用作个人资料图片,那么它们将经常从数据库中获取。

我有一些想法:

  • 将图像作为Blob存储在数据库中,或者
  • 在春季启动时使用文件系统,并将图像存储在文件夹中,然后在数据库中使用/存储字符串键以标识图像。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为将图像存储在DB中是一个非常糟糕的主意。您只需要在数据库中存储图像链接(表的列:user_id,profile_image_url),并且图像文件应该存储在任何分布式文件系统中(例如Amazon S3)

答案 1 :(得分:0)

SQL Server支持数据库内部的Blob存储,并且还可以与Windows集成以在文件系统中存储Blob(提供通过TSQL和Windows API的访问)。

这些功能分别称为FilestreamFileTables

这些功能的目的是为存储Blob数据提供“两全其美”的功能。 SQL Server管理所有应用程序数据的一致性,可用性和可恢复性,但是大文件存储在数据库外部。

但是这里的重点是,由于SQL Server支持将blob数据存储在数据库文件中或文件系统中,因此Microsoft进行了大量测试以帮助客户确定哪个是更好的选择。

根据测试得出的经验法则是,在大约1MB的数据库内存储性能比文件系统更好,而在此之上,文件系统更好。基本上,外部Blob具有较低的每GB成本和更好的流传输性能,但在打开,创建,删除等操作时具有较高的按文件访问成本。盈亏平衡点约为1MB。

例如参见Filestream Storage上的本白皮书