【问题标题】:Store uploaded user images存储上传的用户图像
【发布时间】:2012-08-14 17:47:41
【问题描述】:

这是理论上的问题。

Twitter 保留用户个人资料图片如下:

https://twimg0-a.akamaihd.net/profile_images/2044921128/finals_normal.png

无法想象他们有一个包含 2044921128 个目录的服务器(例如)。也许这个 URL 是使用mod_rewrite 创建的?

那么如何存储海量的用户图片呢? 如何完成此方案:

  1. 用户选择,PHP 脚本上传一张应该是他的个人资料图片的图片。
  2. PHP 脚本对其进行重命名、设置 PATH 以存储此图像、移动它并最终将此路径添加到数据库以供进一步使用。

那么 PATH 应该是什么样子的呢?

【问题讨论】:

    标签: php mysql webserver


    【解决方案1】:

    没有什么说 Akamai(它根据您的 URL 为 Twitter 存储图片)实际上将文件存储在目录结构中。它们完全有可能存储在内存中(由目录结构支持)、数据库(SQL / NoSQL)或 Akamai 认为有效的任何其他存储机制。

    您可以路由以

    开头的 URL 的所有请求
    https://yourService.com/profile_images/
    

    到您选择的 PHP 脚本,然后解析 URL 的其余部分以确定正在请求哪个图像,并根据解析的 URL 从您想要的任何存储机制(可能是数据库)中存储/检索。

    这是一篇简短的博客文章,展示了使用 mod_rewrite 的一种方法

    http://www.phpaddiction.com/tags/axial/url-routing-with-php-part-one/

    【讨论】:

      【解决方案2】:

      大多数操作系统不鼓励在单个目录中包含超过 1024 个目录/文件,因为上述任何数字会使扫描和定位其中的特定资源变慢,因此我认为 akamai 不会拥有 2044921128 是安全的profile_images 中的目录!

      它可以是 profile_images 中生成的特殊唯一标识符号,也可以是 url 路由中的众多方法之一,可用于定位资源。无论如何,我认为它不会对应于目录的数量..

      【讨论】:

      • Unix 有 ext4 文件系统,可以处理 64000 个目录,不是吗?
      • 即使是这样,它也比 2044921128 个目录少得多,不是吗? :-) 另外,请注意它支持的最大值。换句话说,在创建和使用许多目录之前,最佳读写性能开始下降。
      猜你喜欢
      • 2016-11-18
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2017-11-25
      • 2018-07-04
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多