相关疑难解决方法(0)

在DB中存储图像 - 是还是不?

所以我正在使用一个将图像存储在数据库中的应用程序.你对此有何看法?我更像是一种在文件系统中存储位置的类型,而不是直接将它存储在数据库中.

您认为利弊是什么?

database theory storage blob image

415
推荐指数
25
解决办法
59万
查看次数

要做或不做:将图像存储在数据库中

在Web应用程序的上下文中,我的老板总是说在数据库中引用了一个图像,而不是图像本身.我倾向于同意在数据库中存储网址与图像本身是一个好主意,但在我现在工作的地方,我们在数据库中存储了大量图像.

我能想到的唯一原因可能是它更安全吗?你不希望有人直接链接到网址吗?但如果是这种情况,您可以随时让网站/服务器处理图像,例如asp.net中的处理程序,以便用户需要进行身份验证才能查看图像.我也在考虑从数据库中提取图像会损害性能.将图像存储在数据库中可能是一个好/不太好的想法的任何其他原因?


完全重复: 用户映像:数据库还是文件系统存储?
完全重复: 在数据库中存储图像:是或不是?
完全重复: 我应该将我的图像存储在数据库还是文件夹中?
确切重复: 您是否将二进制数据存储在数据库或文件夹中?
完全重复:将 图片存储为Web应用程序的文件或数据库?
确切重复: 存储少量图像:blob还是fs?
精确复制: 将图像存储在文件系统或数据库中?

database performance blob

32
推荐指数
7
解决办法
4万
查看次数

使用BLOB VS OS文件系统的MySQL二进制存储:大文件,大批量,大问题

我正在运行的版本(基本上是最新的):
PHP:5.3.1
MySQL:5.1.41
Apache:2.2.14
OS:CentOS(最新)

情况就是这样.

我有数千个非常重要的文件,从客户合同到语音签名(合同的客户授权记录),文件类型包括但不限于jpg,gif,png,tiff,doc,docx,xl​​s,wav,mp3 ,pdf等

所有这些文档目前都存储在多个服务器上,包括Windows 32位,CentOS和Mac等.有些文件也存储在员工台式计算机和笔记本电脑上,有些文件仍然是存储在数百个盒子和文件柜中的硬拷贝.

现在因为客户或律师可以随时要求合同证明,我公司必须能够有效地搜索和找到正确的文件,因此所有这些文件都必须数字化(如果还没有)并且相关进入某种搜索和访问的顺序.

作为程序员,我创建了一个完整的客户关系管理工具,供整个公司使用.这包括客户资料管理,订单和工作跟踪工具,工作/销售创建和管理模块等,以及目前客户资料级别(驾驶执照,信用授权等)或工作中所需的任何文件/销售级别(合同,语音签名等)可以上传到服务器并位于父/子层次结构中,就像Windows资源管理器或任何其他典型的文件管理模型一样.

结构如下:

drivers_license
| - DL_123.jpg
voice_signatures
| - VS_123.wav
| - VS_4567.wav
合同

因此,文件使用PHP和Apache进行上传,并存储在操作系统的文件系统中.在上载时,关于文件的某些信息存储在MySQL数据库中.存储的一些信息是:

表:FileUploads
FileID
CustomerID(文件所属的客户ID,它们都有此.)
JobID/SaleID(相关作业/销售的ID,如果有)
.FileSize
FileType
UploadedDateTime
UploadedBy
FilePath(文件的目录路径是存储在.)
FileName(上传文件的当前文件名,CustomerID和JobID/SaleID的组合,如果适用.)
FileDescription
OriginalFileName(上载时源文件的原始名称,包括扩展名.)

如您所见,文件通过文件名链接到数据库.当我想提供客户的文件下载给用户时,我所要做的就是"SELECT*FROM FileUploads WHERE CustomerID = 123 OR JobID = 2345;" 这将输出我需要的所有文件详细信息,并且使用FilePath和FileName,我可以提供下载链接.

http ... server/FilePath/FileName

这种方法存在许多问题:

  1. 在"数据库无意识"环境中存储文件意味着不保留数据完整性.如果删除了记录,则也可能不会删除该文件,反之亦然.
  2. 文件遍布整个地方,不同的服务器,计算机等.
  3. 文件名是唯一匹配二进制文件到数据库和客户配置文件和客户记录的东西.

有很多原因,其中一些在这里描述:http://www.dreamwerx.net/site/article01.此外,这里也有一篇有趣的文章:sietch.net/ViewNewsItem.aspx?NewsItemID=124.

因此,经过大量研究后,我几乎已经决定将所有这些文件存储在数据库中,如BLOB或LONGBLOB,但在我这样做之前还有很多注意事项.

我知道将它们存储在数据库中是一个可行的选择,但是有许多方法可以存储它们.我也知道存放它们是一回事; 以可管理的方式关联和访问它们完全是另一回事.

此链接提供的文章:dreamwerx.net/site/article01描述了一种将上传的二进制文件拆分为64kb块并使用FileID存储每个块,然后使用标头将实际二进制文件流式传输到客户端的方法.这是一个非常酷的主意,因为它减轻了对服务器内存的预感; 而不是将整个100mb文件加载到RAM然后将其发送到客户端,它一次只做64kb.我已经尝试了这个(并更新了他的脚本),这在一个非常小的测试框架中是完全成功的.

因此,如果您同意这种方法是一个可行的,稳定的和强大的长期选项来存储适度大的文件(1kb到几百megs),以及大量的这些文件,请告诉我您有哪些其他注意事项或想法.

此外,我正在考虑获取当前的"文件管理"PHP脚本,该脚本提供了一个界面,用于管理存储在文件系统中的文件,并将其转换为管理存储在数据库中的文件.如果已经有任何软件可以做到这一点,请告诉我.

我想我可以提出很多问题,并且所有信息都在那里^^所以请讨论这方面的所有方面,我们可以来回传递想法并相互教授.

干杯,

Quantico773

php mysql streaming blob http-headers

20
推荐指数
1
解决办法
2万
查看次数

将字节数组从Java写入MySQL数据库作为图像或文件

我想将文件保存到我的MySQL数据库.

  1. 我可以从文件中获取字节数组并将其存储在数据库中吗?或者还有其他方法可以在MySQL数据库中直接保存文件吗?

  2. 我应该使用什么字段类型将字节数组保存到mysql,请给我一个如何插入字节数组的示例查询

java mysql byte bytearray file

1
推荐指数
1
解决办法
2万
查看次数

我应该使用PostgreSql,MySql,Oracle还是SqlServer来存储文件/二进制文件?

我应该使用PostgreSql,MySql,Oracle还是SqlServer来存储文件/二进制文件?使用其中一种是否有任何性能优势?有什么优点/缺点吗?

存储的文件主要是excel文件,图像文件,pdf和图像.

sql database binary

0
推荐指数
1
解决办法
1014
查看次数

标签 统计

blob ×3

database ×3

mysql ×2

binary ×1

byte ×1

bytearray ×1

file ×1

http-headers ×1

image ×1

java ×1

performance ×1

php ×1

sql ×1

storage ×1

streaming ×1

theory ×1