将图像存储在数据库中,还是具有数据库链接的文件中?


22

将图像文件存储在数据库中是否合适?还是最好只在数据库中存储文件的路径,同时将文件本身保留在服务器上?

还有其他方法可以做到这一点吗?

Answers:


22

我强烈建议您将图像存储在文件系统中而不是数据库中。

在数据库中存储图像有几个缺点:

  • 数据库可能会意外增大。有时空间是个问题。例如,对于SQLServer express,您有4GB的限制。

  • 数据迁移可能会很麻烦,例如,如果您从SQLServer切换到Oracle

  • 查询会变得很慢,并且数据库负载很大

  • 如果映像位于文件系统上并且其他应用程序使用其他数据库,则与其他应用程序的互操作性会更好。您也可以直接访问它们,不需要数据库工具。

  • 总体表现较差

  • 无论如何,从数据库检索图像时,您可能必须创建临时文件。没必要

这些缺点远远超过了保持数据库中存储的图像的路径与文件系统同步的代价。在少数特殊情况下,最好将图像存储在数据库中。


11

研究SQL Server 2005和NTFS文件系统(Microsoft)以比较CRUD性能:与BLOB或不与BLOB。这项研究也在Web应用程序中完成。您列出了另一个数据库(MySQL),并且我假设您的PHP站点未使用Windows Server,因此如果有人对不同的技术进行了类似的研究,这将很有趣。

原来,这取决于文件的大小。SQL Server支持(小于2倍)256K或更小的Blob,而文件系统则支持1MB +的文件。本研究中的文件系统比数据库更好地处理碎片,因此,如果您不断更新这些文件,或者该系统随着时间的增长而增长,碎片化将是文件系统将做得更好的更大因素。

您需要确定您的站点对维护这些文件的责任。如果您要为保险索赔代理人建立一个站点来上传事故照片,则最好具有交易控制权,并确保这些文件在服务器上。好的数据库会为您完成此任务,因此作为开发人员,您会承受更大的压力。

在设计过程中,应考虑复制,备份,灾难恢复,碎片,剩余磁盘容量以及随时间变化的性能。这只是对SQL Server早期版本的一项研究,与其他数据库制造商一样,我猜想处理大文件和二进制文件是一个主要的竞争舞台。


您可能还需要考虑集成解决方案。例如,在SQL Server上有FILESTREAMRemote Blob存储
Fernando Correia 2012年

4

如果您将拥有大量映像,则将它们存储在数据库中可能会消除在文件系统级别上用尽inode的问题。

但是,最好使用更合适的文件系统来解决此问题,并且在组织上建议使用该文件系统采取任何措施。

否则,将图像存储在数据库中会完全浪费资源。如您所说存储路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.