数据库 – 在Web服务器上存储用户上载的文件
我正在一个允许用户上传文件(图片和其他)的网站上工作.我在这个领域没有任何先前的经验,并希望得到一些关于存储和索引这些文件的正确方法的输入.
虽然我希望有一个可以很好地扩展到高容量数据的架构,但我目前并不担心极高(facebook,google-scale)卷. 我在考虑将文件存储在文件系统中 /files/{username}/ 然后上传数据库,其中每个用户都有自己的表,其中包含他上传的每个文件的文件名(以及URL)(以及我可能想要存储的任何其他额外信息). 我考虑给每个用户自己的表后面的理由是,它是一种简洁明了的方法来对表格中的数据进行分片,并在查找给定用户的文件时减少搜索时间. 解决方法如果您尝试实现的是每个用户级别的图像访问,那么 Matt H建议的是个好主意.但是如果您在数据库存储空间中受到限制,那么将图像存储在二进制数据中效率低下就像您所说的那样.每个用户使用一个表是糟糕的设计.上传文件的用户应该只是表中存储所有文件上传的字段/列,以及任何文件元数据.我建议为文件名生成一个GUID,它保证是唯一的,并且比自动增量字段更好,如果你试图阻止用户只是访问所有图像,这个字段很容易猜到. 您关心的是性能,但在处理数百万条记录之前,您选择图像的查询属于用户,在特定时间范围内上传(比如存储时间戳或类似记录)的成本微不足道.如果速度是一个问题,您可以在用户名上添加B树索引,这将显着加快您的用户特定图像查询. 回到安全性,访问和组织的主题.使用每个用户的文件夹存储图像(尽管根据用户数量,文件夹的数量可能会增长到难以管理的级别).如果您不希望图像公开,请将它们存储在非Web文件夹中,让应用程序读取数据并对其进行流式处理以呈现用户的图像.更复杂但你隐藏了互联网上的实际文件.此外,您还可以验证经过身份验证的用户对图像的所有请求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Sqlserver 批量提交的方案改进!
- 索引的创建及使用(sqlserver 2000)
- sqlserver查询结果,拷贝到Excel后转为科学计数法的解决办法
- SQL Server sql Set IDENTITY_INSERT的用法
- sql-server-2005 – 基于另一个计算列的计算列?
- sql-server – SQL Server Management Studio:增加结果集中
- sqlserver 建立索引视图各问题!
- Powershell Invoke-Sqlcmd的错误检测并不总是有效?
- sql – 从数据库中删除最旧的记录
- SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)