mysql - 我应该使用 MySQL blob 字段类型吗?

标签 mysql

我正在努力决定是否应该在即将进行的项目中使用 MySQL blob 字段类型。

我的基本要求是,可以查看某些数据库记录,并上传多个文件并“附加”到这些记录。根据具体情况,查看所述记录可以仅限于某些人。几乎可以不受限制地上传任何类型的文件。

所以从一个方面来看,如果我走 MySQL 路线,我不必担心病毒蔓延或随机 php 文件被上传并以某种方式执行。我还有一条更简单的途径来获得许可并将数据与记录联系在一起。

另一个明显的途径是将数据存储在 webroot 之外的特定文件夹结构中。在这种情况下,我必须为文件夹/文件提出一个特殊的命名约定,以跟踪它们在数据库中引用的内容。

使用 MySQL blob 字段类型是否会影响性能?我担心选择的解决方案会阻碍网站 future 的发展,而且选择的解决方案不容易维护。

最佳答案

Is there a performance hit with using MySQL blob field type?

不是天生的,但如果有大 BLOB 堵塞了表和内存缓存,那肯定会导致性能下降。

The other obvious route is storing the data in a specific folder structure outside of the webroot. in this case I'd have to come up with a special naming convention for folders/files to keep track of what they reference inside the database.

是的,这是一种常见的方法。你通常会做一些事情,比如用它们关联的每个表命名文件夹,包含仅基于主键的文件名(理想情况下是一个整数;当然绝不是用户提交的任何内容)。

这是一个更好的主意吗?这取决于。只有一个数据存储具有部署简单性的优势,而不必担心给予 Web 用户对任何内容的写入权限。此外,如果可能有多个应用程序副本正在运行(例如主动-主动负载平衡),那么您需要同步存储,这对于数据库来说要比使用文件系统容易得多。

如果您确实使用文件系统而不是 blob,那么问题是,您是否通过将别名指向文件夹来让 Web 服务器为其提供服务?

  • + super 快
  • + 缓存良好
  • - 额外的服务器配置:虚拟目录;需要适当的文件扩展名才能返回所需的 Content-Type
  • - 额外的服务器配置:需要添加 Content-Disposition: attachment/X-Content-Type-Options header 来阻止 IE 嗅探 HTML 作为反XSS 措施

还是像您必须从 MySQL blob 提供服务一样,通过让服务器端脚本将其输出来手动提供文件?

  • - 可能很慢
  • - 需要大量手动 If-Modified-Since 和 ETag 处理才能正确缓存
  • + 可以使用应用程序自己的访问控制方法
  • + 轻松从服务脚本中添加正确的 Content-Type 和 Content-Disposition header

这是一种权衡,没有一个全局公认的答案。

关于mysql - 我应该使用 MySQL blob 字段类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717264/

相关文章:

javascript - Node.js:如何在node-orm中选择和连接表?

mysql - 由于引擎myisam的原因,Spring boot创建表mysql Db失败

mysql - 当 Perl 错误地说 : `DBI->connect()` ? 时,如何将 "utf8mb4 is not a compiled character set"发送到 MySQL

MySQL case语句错误,部分查询数据未显示

php - MySql 行进行排序以提高性能

php - Mysql my.cnf 设置为具有 8GB RAM、2 个处理器和 1000 个并发连接的服务器

mysql - 错误代码 : 1005. 无法创建表 '...' (errno: 150)

mysql - 如何合并两个不同时间点的 MySQL 数据库?

sql - 使用一张小表的值更新一张大表的性能

javascript - 你可以推荐哪个用于 mysql 访问的 javascript 库?