Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否在SQL中存储图像?_Mysql_Sql_Monetdb - Fatal编程技术网

Mysql 是否在SQL中存储图像?

Mysql 是否在SQL中存储图像?,mysql,sql,monetdb,Mysql,Sql,Monetdb,通常,我认为最好将图像存储在文件系统中,并通过数据库条目链接到文件系统。然而,我正试图优化我的数据库设计,我有几个问题 我的图片都是黑白(不是灰度,而是真正的黑白)的小拇指邮件,大小为70x70。如果我们拍摄图像(基本上是一个由1和0组成的2D数组),它可以存储为二进制数据,每个数据大约为600字节 所以我的问题是,查询数据库中存储的600字节是否比查询链接然后访问文件系统要快;假设有很多“图像”查询正在进行 有人有这方面的经验吗 如果有关系的话,我正在使用MySQL和MonetDB(分别使用,

通常,我认为最好将图像存储在文件系统中,并通过数据库条目链接到文件系统。然而,我正试图优化我的数据库设计,我有几个问题

我的图片都是黑白(不是灰度,而是真正的黑白)的小拇指邮件,大小为70x70。如果我们拍摄图像(基本上是一个由1和0组成的2D数组),它可以存储为二进制数据,每个数据大约为600字节

所以我的问题是,查询数据库中存储的600字节是否比查询链接然后访问文件系统要快;假设有很多“图像”查询正在进行

有人有这方面的经验吗

如果有关系的话,我正在使用MySQL和MonetDB(分别使用,但对两者都有相同的问题)

非常感谢,,
Brett

如果只有600字节,我就不会太担心,而是将它们作为一个blob存储在数据库中


在上有一篇关于Flickr是如何架构的有趣文章。这本书可能对您很有用。

据我所知,如果您没有无缘无故地使用
SELECT*
(坦白地说,根本没有理由使用
SELECT*
),那么在数据库中存储更大的文件是没有问题的


blob和文本与其他数据分开存储,如果不明确查询,则不会影响性能。

如果您谈论的是web应用程序,那么将图像存储在数据库中就太愚蠢了。因为您没有桌面应用程序可能获得的好处,只有困难。

这不仅仅是文件大小的问题,还与数据库工作时您希望拥有的最大记录量有关。以前,我们对任何类型的字段都进行这种计算。只需乘以600字节即可获得最大记录量,如果结果是可管理的,则不必担心速度


正如@codeholic所说,如果您不使用SELECT*,一切都会很好。

将图像存储在数据库中(并在每次请求时提供图像)会阻止您将这些图像缓存在代理服务器中(或者更确切地说,会使任务复杂化许多倍,并阻止几乎所有现成的解决方案)。关键在于,要衡量影响,你需要以不同的方式看待它——而不是“一个查询获取一个图像需要多少时间”,而是问问自己“一系列(在这里输入一个合理的数字)查询获取同一组图像需要多少时间”。也许你也会问自己“我必须支付往返DB的费用吗?”

并不是说这个想法没有价值——更新单个位置的图像可能是一个重要因素。此外,如果高可用性是一个因素,那么将DB配置为数据的中心点就容易多了(将映像放在文件系统上意味着在更新它们时在节点之间进行同步)。更改跟踪、权限、附加数据、避免“断开的链接”——这些也可能起到一定作用


除了以上所有内容,我在使用“文件系统”技术方面有过不好的经验。目前,我们正在考虑转向“数据库”技术

既然您将问题标记为sql server,那么我建议您阅读Jim Gray的一篇研究论文。这篇论文详细讨论了在文件系统(NTFS)和数据库(SQL Server)中存储blob的主题,你会惊讶地发现其中考虑了多少角度。这是一本必读的书。但结论是:

研究表明,如果 在上大于1兆字节 平均而言,NTFS具有明显的优势 通过SQL Server。如果对象是 在256KB以下,数据库具有 明显的优势。在这里面 范围,这取决于如何写 工作量很大,而且 中典型复制副本的存储时间 系统


您的案例显然属于“To BLOB”案例。

这取决于如何使用这些文件。如果你把它们作为静态内容直接发布,你是对的。但是,如果您需要在发送图像之前进行ACL检查,或者只是通过网络将图像发送给其他服务器,那么将图像存储在数据库中可能会更舒适。@codeholic noway。webserver可用于检查ACL。没有数据库involved@Col.如果你的ACL存储在数据库中,你会怎么做?@codeholic我会检查权限,然后告诉webserver提供服务。@Col.如果你的意思是将文件保存在不可读的位置,并仅通过脚本提供服务,那么我看不出有什么好处。为什么要阻止你在代理服务器上缓存图像??????我看不出这有什么意义。。。有了正确的http头,您就可以缓存资源了。没有什么可以阻止我这样做——但是有现成的基于文件系统的缓存解决方案,而我找不到现成的解决方案来缓存从SQL数据库获取的图像。你必须自己布线(正如我写的“使任务复杂化…”)。你对图像做什么?(或试图这么做?)。如果您必须将它们打包成多种格式,如果您正在搜索超过50%的黑色图像等,那么您需要更改或提取它们的频率可能比是否可以更改或提取更重要。重复: