所有大型网站
不会将图片保存到数据库中,它们会将其存储在磁盘上。
它们会在表中保存图片位置的引用,并从那里进行链接。
为什么这样做呢?出于性能考虑。
从数据库中提取大量内容会成为性能瓶颈。而且数据库的水平扩展性并不好,所以这将带来更大的问题。所有大型网站都使用静态内容服务器来处理静态内容,比如图片。这些服务器对你的身份毫不关心。
那么,他们是如何确保图片真正私密的呢?实际上并没有。
图片的链接本身就是地址和密码。以Facebook为例,如果我在我的账户上存储了一张私密图片,你是不能打开它的。但只要你有正确的地址,就可以打开。
这张图片是私密的。 注意文件名
10400121_87110566301_7482172_n.jpg
(由于Facebook不时更改URL,所以链接可能失效)
它是非连续的。获取图片的唯一方法是知道它的地址。
根据先前用户的照片,你无法猜测下一张照片。
它具有巨大的熵,所以即使你开始随机猜测,你会遇到大量失败,并且如果你确实找到一张照片,从那里你也无法识别出所有者的身份,这本身就是匿名保护。
编辑(为什么不应在“用户名”文件夹中存储图像):
在你的编辑之后,清楚地表明你打算将文件存储在磁盘上而不是数据库中。这个编辑涵盖了新的情况。
尽管你的逻辑(为每个用户创建一个文件夹)看起来更有组织性,但当你开始拥有许多用户和许多图片时,它会产生问题。想象一下你的服务器有1T的磁盘空间。我们假设1T与服务器的负载相当准确。
现在你有11个用户,假设他们同时开始上传,并且每个人都会上传超过100GB的文件。当他们每个人达到91GB时,服务器就已经满了,你必须开始将图片存储在另一台服务器上。如果按照这种用户/文件夹结构进行操作,你将不得不选择一个用户并将他的所有数据迁移到另一台服务器上。此外,这对于不能上传超过1T文件的用户来说也是一个硬性限制。
那我应该把所有文件都存储在同一个文件夹中吗?
不,大型网站通常会将文件存储在连续的文件夹中(/000001/,/000002/等),每个文件夹中有一个预定义数量的文件。这主要是为了解决文件系统性能问题。
2023年修订版,额外的检查
如今,大多数大公司在提供资源/图片之前也会检查用户是否被允许使用。但逻辑基本保持不变。除了上述描述之外,在提供资源之前,你还需要在数据库中进行双重检查以确定用户是否被允许。
更多关于
一个目录中有太多文件怎么办?的信息。