有谁知道网站一般如何保存大量图片?我尝试研究这个问题,但似乎他们需要大量存储空间来保存所有这些图片,除非有什么诀窍?我确信他们会压缩图片,但对于一个网站来说,这仍然是一个巨大的数据量。
答案1
说到存储大的数据量,内容提供商使用存储区域网络,也称为存储区域网络和 SAN 存储硬件。
来自维基百科:
存储区域网络 (SAN) 是一种专用网络,可用于访问整合的块级数据存储。SAN 主要用于使服务器可以访问存储设备(例如磁盘阵列、磁带库和光盘点唱机),从而使这些设备看起来像是操作系统本地连接的设备。SAN 通常拥有自己的存储设备网络,其他设备通常无法通过局域网访问这些设备。2000 年代初,SAN 的成本和复杂性下降到可以在企业和中小型企业环境中更广泛采用的水平。
那么 SAN 存储设备是什么样的呢?有些看起来像下面这样:
。
每个插槽(红色方块是驱动器弹出按钮)都是一个硬盘驱动器。图中的是一个相对较小的 SAN 存储设备,其他的看起来可能大不相同,并且可以更大在尺寸方面。
我以前工作的地方有 SAN 存储,它们都是盒子,基本上是 3 个并排的冰箱大小填充硬盘。然后,我们根据需要使用这些驱动器并创建 RAID 阵列以实现冗余。当我们需要更多空间时,我们可以订购更多 SAN 存储设备并将它们连接到我们的存储区域网络。这使我们能够拥有 PB 级的冗余存储。
Flickr、Picassa、Facebook 等网站都有很大SANS 填充了大量数据中心。
答案2
从你的问题中我知道你没有计算机科学背景,所以我会避免使用听起来很怪异的术语。
热门网站处理大量数据(或流量)并不是什么新鲜事,也没有什么特别之处。通常,在大规模压缩方面没有什么花招(因为大多数以 JPEG 格式上传的图片已经高度压缩,进一步压缩通常会导致细节丢失)。真正需要的是一些巧妙的架构、大量的计算机、快速可靠的网络,当然还有几 TB(甚至 PB)的存储空间。实际上,存储通常是最不重要的问题。如今,存储和计算能力相当便宜。
实际情况是,数据通常分布在多台计算机上(多个副本),以实现冗余和更快的检索,并且数据的查找/搜索是并行进行的。将常用数据放在更靠近网络或用户的边缘,并根据使用情况更新这些数据,是其中一些技术。
一些经常使用且可能被视为巫术的怪异关键词是:
- 多级缓存
- 分布式存储
- 数据仓库
- 非SQL
- Map-Reduce
- 数据分片(主要在 SQL 世界中)
- 并行处理
- CDN(内容分发网络)
如何更好、更高效、更有效地完成这项工作是计算机科学和计算机架构领域的一个研究领域。根据数据的性质、访问的性质/频率(更多写入,而非更多读取)、所需的可靠性类型等,使用不同的技术。
編輯: 这是谷歌的服务器机架(自 1999 年起)太棒了:!请注意每个服务器“托盘”中间裸露的硬盘(其中 3-4 个)(特别是标有“g61”的硬盘)。
这篇帖子记录了整个旅程这里:
答案3
他们无法压缩照片,因为照片几乎肯定已经压缩过,无论是 JPEG 还是 PNG 压缩,而且不可能压缩已经压缩的数据。(这有点过于简单了,但除非你想得到深的进入信息论,就接受它作为一个既定事实。)
确实没有捷径可走。拥有大量数据的网站需要大量的计算机来保存这些数据。
假设一张图片的大小为 1 MB。有很多图片比它大,也有很多图片比它小,但为了简单起见,我们假设平均图片大小为 1 MB。现在不难找到价格实惠的 2 TB 硬盘,这意味着每个硬盘理论上可以容纳大约 200 万张图片。(显然会有一些空间因开销而损失,但你明白我的意思。)
服务器可以设置包含多个硬盘的 RAID 配置。部分数据会因冗余而丢失,但即便如此,每台计算机仍可以拥有数 TB 的硬盘。服务器群可以容纳数十台、数百台甚至数千台服务器。这就是 Pinterest 和 Facebook 等网站管理如此多内容的方式。
他们往往拥有庞大的服务器群,前面有计算机,负责路由来自 Web 浏览器的请求,在服务器群的适当位置查找内容并将其返回给用户。这是一个非常大的话题,需要在这里介绍,但这就是基本思想。