xbo*_*nez 7 database filesystems webserver file-upload
我正在一个允许用户上传文件(图片和其他)的网站上工作.我没有这个领域的任何经验,并希望得到一些输入正确的方式来存储和索引这些文件.
虽然我希望有一个可以很好地扩展到高容量数据的架构,但我目前并不担心极高(facebook,google-scale)卷.
我在考虑将文件存储在文件系统中
/files/{username}/
Run Code Online (Sandbox Code Playgroud)
然后有一个数据库uploads,其中每个用户都有自己的表,其中包含他上传的每个文件的文件名(以及URL)(以及我可能想要存储的任何其他额外信息).数据库结束(给每个用户自己的表)对我来说效率非常低,但是保持单个表中所有文件的记录似乎不正确,并且每次单个文件时都需要搜索整个表.访问.
我考虑给每个用户自己的表后面的理由是,它是一种简洁而独特的方法来对表格中的数据进行分片,并在查找给定用户的文件时减少搜索时间.
如果您想要实现的是每个用户级别的图像访问,那么Matt H的建议是一个好主意。但考虑到数据库存储空间有限,将图像存储在二进制数据中效率很低,正如您所说。
每个用户使用一个表是糟糕的设计。上传文件的用户应该只是存储所有文件上传以及任何文件元数据的表中的字段/列。我建议为文件名生成一个 GUID,保证唯一,并且比自动增量字段更好,如果您试图阻止用户简单地访问所有图像,自动增量字段很容易被猜到。
您关心性能,但在处理数百万条记录之前,选择属于用户的、在特定时间范围内上传的图像(假设您正在存储时间戳或类似内容)的查询的成本微乎其微。如果速度是一个问题,您可以在用户名上添加 B 树索引,这将显着加快用户特定的图像查询速度。
回到安全、访问和组织的主题。将图像存储在每个用户的文件夹中(尽管根据用户数量,文件夹数量可能会增长到难以管理的水平)。如果您不希望图像公开可用,请将它们存储在非 Web 文件夹中,让您的应用程序读取数据并传输数据以向用户呈现图像。更复杂,但您从互联网上隐藏了实际文件。此外,您还可以验证经过身份验证的用户对图像的所有请求。
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |