Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Php 在mysql中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?_Php_Mysql_Sql_Sql Server - Fatal编程技术网

Php 在mysql中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?

Php 在mysql中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?,php,mysql,sql,sql-server,Php,Mysql,Sql,Sql Server,在mysql中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?我想知道的是,作为开发人员,您是如何做到这一点的,为什么?还有大网站怎么办呢 提前谢谢;-) 可以使用MySQL Blob存储二进制数据: 虽然如果没有必要,我也不会将二进制数据存储在数据库中,因为在MySQL中存储数据的主要原因(如Join、Index等)很难与这种数据类型一起使用。Blob还会降低数据库的整体性能 也许您可以为文件构建一个单独的表,在其中存储几个方面和文件系统路径…在Oracle中,我将使用

在mysql中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?我想知道的是,作为开发人员,您是如何做到这一点的,为什么?还有大网站怎么办呢


提前谢谢;-)

可以使用MySQL Blob存储二进制数据:

虽然如果没有必要,我也不会将二进制数据存储在数据库中,因为在MySQL中存储数据的主要原因(如Join、Index等)很难与这种数据类型一起使用。Blob还会降低数据库的整体性能


也许您可以为文件构建一个单独的表,在其中存储几个方面和文件系统路径…

在Oracle中,我将使用BLOB列来存储此类对象。这样,数据的完整性和安全性就可以像所有其他数据一样得到保证。另一种方法是使用BFILE,它是指向外部文件系统上的文件的指针—当您下次尝试访问该文件时,该文件可能已被移动、删除、修改甚至丢失。

我从未使用过PBMS storage engine,但这似乎是一种方法:


嗯,我把图像保存在磁盘上,我有很多很多图像,我不想想象这会是一场维护噩梦。到目前为止,我的数据库(mysql)小于5GB,我可以处理~50GB的jpeg文件(每个图像都保存了几个大小)。
如果操作得当,将图像存储在单独的数据库中(可能使用单独的raid控制器)可能是一件好事,但我相信系统在磁盘上存储图像的速度更快。

我只会将数据库用于存储文件元数据(大小、MIME类型、标记等)。为了数据的完整性和安全性,我最好将处理二进制数据的工作转移到专门的服务上,例如


关于数据完整性:我会通过执行涉及大blob的事务来避免数据库服务器过载。相反,我建议先存储文件,然后定期执行异步“垃圾收集”。

为什么要为Oracle添加标签?我认为这是一个rdbms问题,但您的问题是“在mysql中”而不是“在数据库中”!实际上,不同的DBMS往往会做不同的事情。+1在构建网站时,必须同时处理BLOB存储和文件系统指针,因此我更喜欢在服务之前使用文件系统缓存的BLOB存储。我不知道,我看到了存储在Oracle数据库中的TB级二进制数据,然后从中流出。这不一定是个坏主意。我并没有写到这通常是个坏主意——有支持和反对blob的例子和用例。然而,在我看来,当有人想要使用这种技术时,应该有充分的理由和正确的调整(例如,分离表空间,…)。存储路径有一些明确的问题。如果文件被移动,则指针已损坏。备份数据库变得相对毫无意义。对数据的可用操作并不能决定存储数据的特性。