虽然我希望有一个可以很好地扩展到高容量数据的架构,但我目前并不担心极高(facebook,google-scale)卷.
/files/{username}/
然后上传数据库,其中每个用户都有自己的表,其中包含他上传的每个文件的文件名(以及URL)(以及我可能想要存储的任何其他额外信息).
数据库结束(给每个用户自己的表)对我来说效率非常低,但是保持单个表中所有文件的记录似乎不正确,并且每次单个文件都需要搜索整个表.访问.
我考虑给每个用户自己的表后面的理由是,它是一种简洁明了的方法来对表格中的数据进行分片,并在查找给定用户的文件时减少搜索时间.
解决方法
每个用户使用一个表是糟糕的设计.上传文件的用户应该只是表中存储所有文件上传的字段/列,以及任何文件元数据.我建议为文件名生成一个GUID,它保证是唯一的,并且比自动增量字段更好,如果你试图阻止用户只是访问所有图像,这个字段很容易猜到.
您关心的是性能,但在处理数百万条记录之前,您选择图像的查询属于用户,在特定时间范围内上传(比如存储时间戳或类似记录)的成本微不足道.如果速度是一个问题,您可以在用户名上添加B树索引,这将显着加快您的用户特定图像查询.
回到安全性,访问和组织的主题.使用每个用户的文件夹存储图像(尽管根据用户数量,文件夹的数量可能会增长到难以管理的级别).如果您不希望图像公开,请将它们存储在非Web文件夹中,让应用程序读取数据并对其进行流式处理以呈现用户的图像.更复杂但你隐藏了互联网上的实际文件.此外,您还可以验证经过身份验证的用户对图像的所有请求.
原文地址:https://www.jb51.cc/mssql/76691.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。