我必须为以下任务找到设计决策:
我有一个 SQL Server 数据库,它包含一个订单表。PDF 文档将由用户通过从网页上传的简单文件上传并分配给订单。每个订单不超过一份文件(也许没有文件,永远不会超过一份)。为此,用户打开网页,输入订单号,显示订单并点击上传按钮。所以我知道上传的文档属于哪个顺序。
现在我正在考虑两种将文档存储在 Web 服务器上的选项:
1) 通过 varbinary(MAX) 列扩展我的订单表,并将 PDF 文档直接存储到该二进制字段中。
2) 将 PDF 文件保存在磁盘上的特定文件夹中,并为其指定与订单相关的唯一名称(例如,我的订单号,它是数据库中的主键,或者我可以存储在附加列中的 GUID订单表)。也许我必须将文件存储在子文件夹中,每月一个,并将子文件夹名称存储到数据库中的订单行中,以避免在一个文件夹中获得太多数千个文件。
PDF 文件存储后,可在输入相关订单号后通过浏览器下载和查看。
我倾向于选项 (1),因为在一个数据库中拥有所有相关数据对我来说数据管理似乎更容易。但是我有点担心随着时间的推移我会遇到性能问题,因为我的数据库大小会比解决方案 (2) 增长得快得多。大约 90% 甚至 95% 的总数据库大小将仅由那些存储的 PDF 文件构成。
以下是一些附加信息:
- PDF 文件的大小约为 100 KB
- 每月大约 1500 个订单/PDF 文件
- 视窗服务器 2008 R2 / IIS 7.5
- SQL Server 2008 SP1 速成版
- 不太确定硬件,我相信一个 QuadCore Proc。和 4 GB 内存
- 应用程序是用 ASP.NET Webforms 3.5 SP1 编写的
(我知道使用上述数字大约 2 年后我将达到 SQL Server Express 版本的 4GB 限制。但我们可以在这里忽略这一点,从数据库中删除旧数据或升级到完整许可证将是一个可能的选择。)
我的问题是:选项的优点和缺点是什么,你会推荐什么?也许有人有类似的任务,可以报告他的经历。
提前感谢您的回复!
有关的: