数据库 – 在Web服务器上存储用户上载的文件

前端之家收集整理的这篇文章主要介绍了数据库 – 在Web服务器上存储用户上载的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在一个允许用户上传文件(图片和其他)的网站上工作.我在这个领域没有任何先前的经验,并希望得到一些关于存储和索引这些文件的正确方法的输入.

虽然我希望有一个可以很好地扩展到高容量数据的架构,但我目前并不担心极高(facebook,google-scale)卷.

我在考虑将文件存储在文件系统中

/files/{username}/

然后上传数据库,其中每个用户都有自己的表,其中包含他上传的每个文件文件名(以及URL)(以及我可能想要存储的任何其他额外信息).
数据库结束(给每个用户自己的表)对我来说效率非常低,但是保持单个表中所有文件的记录似乎不正确,并且每次单个文件都需要搜索整个表.访问.

我考虑给每个用户自己的表后面的理由是,它是一种简洁明了的方法来对表格中的数据进行分片,并在查找给定用户文件时减少搜索时间.

解决方法

如果您尝试实现的是每个用户级别的图像访问,那么 Matt H建议的是个好主意.但是如果您在数据库存储空间中受到限制,那么将图像存储在二进制数据中效率低下就像您所说的那样.

每个用户使用一个表是糟糕的设计.上传文件用户应该只是表中存储所有文件上传的字段/列,以及任何文件元数据.我建议为文件生成一个GUID,它保证是唯一的,并且比自动增量字段更好,如果你试图阻止用户只是访问所有图像,这个字段很容易猜到.

您关心的是性能,但在处理数百万条记录之前,您选择图像的查询属于用户,在特定时间范围内上传(比如存储时间戳或类似记录)的成本微不足道.如果速度是一个问题,您可以在用户名添加B树索引,这将显着加快您的用户特定图像查询.

回到安全性,访问和组织的主题.使用每个用户文件夹存储图像(尽管根据用户数量,文件夹的数量可能会增长到难以管理的级别).如果您不希望图像公开,请将它们存储在非Web文件夹中,让应用程序读取数据并对其进行流式处理以呈现用户的图像.更复杂但你隐藏了互联网上的实际文件.此外,您还可以验证经过身份验证的用户对图像的所有请求.

猜你在找的MsSQL相关文章