Database 将图像存储在数据库中而不是文件系统中

Database 将图像存储在数据库中而不是文件系统中,database,Database,我们都知道,在讨论使用数据库存储文件(特别是图像)时,有多少争论和生命已经消失。在决定如何继续我的项目时,我有点左右为难 我有一个允许管理员上传员工照片的网站。现在,这些图片存储在我的MySQL数据库中的BLOB中。此外,我还有一个windows应用程序,与网站一起运行。此应用程序使员工能够在成功打卡后打卡并显示其照片。通过应用程序内的mysql查询(从非本地远程位置)检索图片,该查询将图像内容转换为可读图像,并在图片框中输出,从而确认员工的身份 在我看来,将图像存储在数据库中并通过简单的查询检

我们都知道,在讨论使用数据库存储文件(特别是图像)时,有多少争论和生命已经消失。在决定如何继续我的项目时,我有点左右为难

我有一个允许管理员上传员工照片的网站。现在,这些图片存储在我的MySQL数据库中的BLOB中。此外,我还有一个windows应用程序,与网站一起运行。此应用程序使员工能够在成功打卡后打卡并显示其照片。通过应用程序内的mysql查询(从非本地远程位置)检索图片,该查询将图像内容转换为可读图像,并在图片框中输出,从而确认员工的身份

在我看来,将图像存储在数据库中并通过简单的查询检索它们要容易得多。我发现这比在数据库中存储图像路径和处理应用程序下载图像要容易得多。我也不必处理冲突、文件夹组织和安全性以及由于x、y等原因重新编写的路径

数据库中存储的图像在裁剪到一定大小后仅为20KB。我的问题是,是否仍然值得在数据库中嵌入图像路径,还是应该像现在这样存储它们?如果在这种情况下在数据库中存储图像仍然是不明智的,那么是否有一种正式的方法来存储图像路径


在此方面的任何帮助都将不胜感激。如果这个问题不属于这里,我很乐意把它移走。

我认为在数据库中存储图像是个坏主意的原因有几个:

1) 服务器将具有与数据库无法跟踪的文件关联的时间戳信息。如果您出于取证原因需要这样做,DB解决方案可能会在这方面受到限制。尽管如此,您也可以在DB中自由保存有关上传图像的信息,如IP信息、时间戳等

2) 如果您希望这些文件被(比如)另一个系统/服务使用,那么您必须不断地引用数据库并与之交互,而此时您可以更轻松地只针对一个特定的文件夹

3) 每当需要检索图像时,必须打开与数据库的连接才能生成图像。这可能会添加额外的代码和步骤,通过指向文件夹可以更容易地实现

为了避免命名冲突,如果我在Linux机器上,我会在保存文件名时使用Unix时间戳之类的东西作为文件名的前缀,或者干脆使用它(+可能是一个简短的随机数#)作为图像ID。因此,它不是“jane image.jpg”,而是“1407369600_img3547.jpg”。然后,只要在DB和viola中引用它,这是一个足够随机的ID,永远不会发生冲突,除非时间开始倒流。显然,无论Windows时间戳等价物是什么,都会被使用


注意:您现在所做的还不错,从听起来它可能对您最有用……但一般来说,我尽量不将所有内容都放在数据库中,因为我可以。但这就是我:)

如果图像是用户数据,而不是应用程序代码或主题的一部分,那么将图像存储在数据库中是一个好主意,因为

  • 如果您只需要备份数据库,则备份更易于管理。另一方面,如果在数据库中存储一些应用程序数据,在文件系统中存储一些应用程序数据,则必须协调数据库和文件系统的备份计划,以确保两者一致

    如果你有一个数据库管理员任你支配,那就太好了!您的备份应该已经处理好了。如果没有,那么数据库备份的设置可能会有点困难,但一旦有了备份系统,它可能会比文件系统备份更好。例如,许多数据库系统都支持流式复制

  • 如果您的应用程序是负载平衡的,并且由多个Web服务器池提供服务,那么您要么必须将数据复制到所有计算机,要么使用网络文件系统在服务器之间共享数据
当然,将映像放在文件系统上也有其优点,即性能和简单性,因为大多数Web服务器都是为静态文件而构建的。混合方法可以让您两全其美:

  • 存储在数据库中的图像将是权威数据
  • 您的应用程序可以使用一种功能将它们提取为本地文件系统中的文件,作为一种缓存。该缓存可以在任何时候重建,因为它不是权威的
  • 然后,Web服务器可以直接从文件系统为文件提供服务

您预计的最大用户数量是多少?我非常怀疑该项目是否能满足任何拥有100-500名员工的公司的需求。这些图像是员工档案。我曾经有一位CTO,他坚持认为有可能在图像中嵌入恶意代码,而恶意代码可能会在数据库处理和流式传输图像字节时执行。我不知道这是不是真的。听起来不太可能,但他发誓说,由于一个bug,Oracle曾经有过一个特定的问题。这是真的-你可以在JPGs之类的东西中放置各种各样的东西,但你必须确保上传的东西的文件夹/文件权限是正确的。另外,如果你真的担心坏文件会打到你的服务器上,你可能应该使用转换工具或其他东西来丢弃原始文件,只使用你想要的安全的、转换过的文件。不管你如何分割,处理用户上传的文件都不是一件有趣的事。那么,这也是为什么我们更喜欢文件系统而不是数据库的原因吗?这是一种偏好。我是一名网页设计师/开发人员,所以对于像我这样的人来说,我喜欢能够将FTP传输到服务器swa中