gpt4 book ai didi

php - 在 CMS 中处理图像的最佳实践

转载 作者:行者123 更新时间:2023-11-29 14:24:27 25 4
gpt4 key购买 nike

关于在 PHP/MySQL CMS 中处理图像的最佳实践的快速问题。每个项目都有不同数量的关联图像,这些图像将存储在项目 ID 引用的文件夹中。验证是在上传时完成的,因此所有文件都应该有效。我的问题是我是否还应该将 ID 和文件名存储在数据库表中并从数据库中提取源数据,或者简单地迭代文件夹并直接插入源文件名是否可以?

我希望这是有道理的。预先感谢您的任何建议。

最佳答案

这很大程度上取决于您想要多少个故障点以及响应时间的速度。

如果将其存储在文件系统上:

  1. 传入 HTTP 请求
  2. PHP 查询数据库
  3. 数据库找到该行
  4. PHP 破译查询响应
  5. PHP 读取文件
  6. PHP 发送文件的二进制内容作为对 HTTP 请求的响应

但是,如果将其作为二进制 blob 存储在数据库中:

  1. 传入 HTTP 请求
  2. PHP 查询数据库
  3. 数据库找到该行
  4. PHP 破译查询响应
  5. PHP 发送二进制内容作为对 HTTP 请求的响应

在这两种情况下,只要设置了正确的索引/键,步骤 3(数据库查找行)就可以与不使用 blob 列一样快。 MySQL 会在内部将指针移动到精确的索引位置 - 它实际上不会遍历每个字节,直到找到正确的字节(这就是索引的全部意义)。这与 PHP 手动读取文件一样耗时。但是,我目前没有支持性能数据来支持这一点。

现在让我谈谈失败点:

  • 假设您正在迁移数据。如果您的二进制图像数据存储在数据库中,则只需移动数据库即可。但是,如果您的二进制图像数据存储在文件系统上,则必须记住移动两者。另请注意,迁移的大小将是相同的(或至少略有不同)。
  • 考虑重命名 Assets - 您不仅要在数据库中重命名它,还要在文件系统上重命名它。总共需要 2 个步骤,而在数据库中重命名它只需 1 个步骤。
  • 考虑删除该 Assets - 您必须在两个位置都将其删除。

出于可移植性、灵 active 以及最大限度地减少故障或损坏的目的,我始终将二进制数据作为 blob 存储在数据库中。

如果您选择将文件作为 blob 存储在数据库中,请考虑不同的 blob 存储要求:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html#id656744

  • TINYBLOB - 256 字节
  • MEDIUMBLOB - 64 KB
  • LONGBLOB - 4 GB

最后,值得深思的是:我有使用 Adob​​e Day CQ 的经验,这是一个新兴的企业级内容管理系统。它主要是用 Java 编写的,但值得注意的是数据架构。它使用 JCR(Java 内容存储库),其行为或多或少类似于多维 MySQL 数据库(有点酷?)。其 DAM(数字 Assets 管理器)中的所有图像数据都存储为 JCR 内的节点。

关于php - 在 CMS 中处理图像的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com