php - 文件/图像复制

标签 php mysql sql-server apache image

我有一个简单的问题,希望听听其他人关于哪种是跨多个主机复制图像的最佳方式的经验。

我确定将图像存储在数据库中,然后在多台主机上使用数据库复制会带来最大的可用性。

我对文件系统的担心是难以同步图像(例如,我不希望 5 个服务器都访问同一服务器以获取图像!)。

现在,我对在数据库中存储图像唯一担心的是额外的查询访问数据库,以及如果我想要“虚拟”图像链接指向数据库条目,我必须在 apache 中进行额外的处理. (例如 AddHandler)

据我了解:

  • 如果您有一个脚本服务于 图片:每张图片都需要一个 数据库调用。
  • 如果您将内联图像显示为 二进制数据:可以在 一次数据库调用。
  • 提供外部/可链接 您必须添加的图像 addHandler 为你的扩展 希望“伪造”并将其指向您的 脚本语言(例如 php、asp)。

我可能漏掉了什么,但我很好奇是否有人有更好的想法?


编辑: Tom 建议使用 mod_rewrite 来使用 AddHandler 进行保存,我已经接受了 AddHandler 问题的建议解决方案;但是我还没有找到完整的解决方案,所以请继续回答 ;)

一些人建议在 Apache 上使用 lighttpd。 lighttpd 的 ISAPI 模块有何不同?

最佳答案

如果您将图像存储在数据库中,您会额外点击数据库加上您会失去网络服务器中固有的缓存/文件服务优化。 Apache 提供静态图像的速度比 PHP 管理静态图像的速度快得多。

在我们的大型应用环境中,我们最多使用 4 个集群:

  • 应用服务器集群
  • 网络服务/数据服务集群
  • 静态资源(图片、文档、多媒体)集群
  • 数据库集群

您会惊讶于静态资源服务器可以处理多少流量。由于它不是真正的计算(没有应用程序逻辑),因此可以疯狂地优化响应。如果你使用一个单独的静态资源集群,你也可以让自己敞开心扉去改变你架构的那一部分。例如,在一些基准测试中 lighttpd在提供静态资源方面比 apache 更快。如果您有一个单独的集群,您可以在那里更改您的 http 服务器,而无需更改应用程序环境中的任何其他内容。

我将从 2 台机器的静态资源集群开始,看看它的性能如何。这是分离功能的另一个好处——您可以只在需要的地方扩展。至于同步文件,看看现有的 file synchronization工具与滚动自己的工具。您可能会发现无需编写一行代码即可满足您的需求的东西。

关于php - 文件/图像复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371721/

相关文章:

php - Guzzle/curl 无法解析主机

php - Laravel 5 添加 nusoap

mysql - 获取MySQL表中最相似的行并按相似度对它们进行排序

sql - 如何在 SQL 中返回每个组的增量组号

php - SQL 从 2 个不同的数据库检索数据

javascript - PHP mt_rand 真的是随机的还是可能有偏见?

java - 如何在接收数组的 MySQL 列中指定数据类型?

php - 仅当有多个记录时才选择记录

mysql - 从 sql server 表创建 mysql View

sql - 我想要最多多列