2009-08-28 49 views

回答

15

我通常将它们存储为文件去,并存储在数据库中的路径。对我来说,将它们作为blob推入数据库是一种更容易,更自然的方法。

将它们存储在数据库中的一个参数:更容易完成全备份,但这取决于您的需求。如果您需要能够轻松获取数据库的完整快照(包括图像),那么将它们作为Blob存储在数据库中可能是一条可行的路。否则,您必须将数据库备份与文件备份配对,并以某种方式尝试关联这两者,以便如果必须执行还原,则需知道要还原哪对。

+3

如果你有一个网络应用程序,文件是要走的路,你用数据库中的路径信息构建HTML,指向存储在客户端浏览器将从其下拉的文件。 – 2009-08-28 15:05:23

+0

我正在构建一个离线应用程序。我发现存储blob可以轻松复制数据库。只是一个想法! – 2013-06-24 18:04:42

+0

我写了一个小型运输系统并将图像粘贴到数据库中。一旦达到大规模,数据库备份变得非常有问题(30,000张图像)。 最终数据库和任何查询返回图像停止。数据库引擎SQL服务器存在严重问题,必须清除查询缓存才能解决问题。最后我最终将它重构了出来。 添加一些磁盘管理是值得的,我从不再将图像粘贴到SQL Server数据库。 – Skarsnik 2015-03-18 06:26:53

2

如果我在一台Web服务器上运行,并且只能运行在一台Web服务器上,我将它们存储为文件。如果我在多个网站头上运行,则将图像的参考实例放入数据库BLOB,并将其作为文件缓存在网站头上。

10

这取决于图像的大小。

微软研究院有关于这个问题的interesting document

+11

该文档的总结是文件系统(NTFS)在文件大于1MB时性能更好,数据库对文件小于1MB(越小越好)的性能会更好。 – sjdirect 2014-01-17 18:18:08

+0

这篇论文是从2006年开始的,那是11年前的事了。所以今天的事情可能会不同。实际上,结论是:“(...)如果对象平均大于1 MiB,则NTFS比SQL Server有明显的优势。如果对象数量低于256 KiB,则数据库具有明显优势。在这个范围内,这取决于...“ – 2017-10-17 04:36:44

1

斑点可在DB /脚本,为什么不直接存储路径重。我们曾经使用blob的唯一原因是它需要合并复制或者资产的超级安全性(因为除非登录或者其他东西,否则无法拉出图像)

+0

对你来说,我需要”超级安全“。所以我认为像安全文件一样的纳税申报一个blob会是最好的,没有?然后所有非安全项目,如图像等。 ,可能在文件夹中? – user982853 2017-05-24 18:02:36

2

鉴于您可能想要保存图像以及名称,简要说明,创建日期,创建等等,您可能会发现保存在数据库中会更好。那样,一切都在一起。如果您保存了相同的信息并将图像存储为文件,则必须从两个地方检索整个“图像对象”......然后在路上,您可能会发现自己正在同步问题(某些图像未找到) 。希望这是有道理的。

2

通过保存你的意思是使用它们来显示在网页或类似的东西? 如果是这样的话,最好的选择是使用文件,如果你使用的是数据库,它将不断受到照片请求的打击。而且这种情况并不能很好地扩展。

+0

没有图像,这些只是交易相关的文件,所以每次有人像访问徽标或其他东西一样访问该网站时都不会拉动这些文件,这些文件都是客户端文档,当专业人士或客户端试图查看它们时 – user982853 2017-05-24 17:59:40

9

我试图使用数据库(SQL Server和MySQL)来存储介质(< 5mb)文件,我得到的是很多麻烦。

1)某些数据库(SQL Server Express)具有大小限制;

2)一些数据库(MySQL)变得极其缓慢; 3)当你必须显示一个对象列表时,如果你不小心做了SELECT * FROM表,大量的数据会试图从数据库上下移动,导致致命的慢响应或内存失败;

4)一些前端(ruby ActiveRecord)处理blob有很大的麻烦。

只需使用文件。不要将它们全部存储在同一个目录中,使用一些技术将它们放在多个dirs上(例如,可以使用GUID的后两个字符或int id的后两个数字),然后将路径存储在db中。

+0

您在'SELECT * FROM table'上卖了我 - 我定期使用它来进行测试,单靠这个可能会导致我头痛。 – rybo111 2014-02-07 10:56:13

2

问题是,您的应用程序是否处理BLOBS或其他应用程序数据文件?您的用户是否将图像与其他数据一起上传?如果是这样,那么你应该将BLOB存储在数据库中。它使备份数据库变得更容易,并在出现问题时恢复到事务一致状态。

但如果你的意思是它们的应用infratstructure的一部分,而不是用户数据,那么可能的答案是图像,第

3

数据库服务器的性能命中是一个颇具争议的问题。如果您需要文件系统的性能优势,只需在第一个请求上将其缓存即可。随后的请求可以通过直接链接直接从文件系统提供(如果是Web应用程序,则可以在刷新输出缓冲区之前重写HTML)。

这提供了两全其美:

  • 权威店是 数据库,同时保持交易和 参照完整性
  • 您可以部署通过 所有用户数据简单地部署数据库
  • 清空缓存(例如,通过添加一个 网络服务器)只会导致 临时性能下降,而自动重新填充 。

没有必要不断地捶了数据库的事物,不会改变所有的时间,但重要的是,用户数据都在那里,而不是分散在不同的地方,使得多服务器操作并部署一个混乱。 我一直主张“数据库作为用户数据存储,除非”方法,因为它在体系结构上更好,而且不一定比使用有效缓存更慢。尽管如此,使用文件系统作为权威商店的一个很好的理由是当你真的需要使用外部独立工具来访问它时,例如, SFTP和什么。