我有一个应用程序在表中创建记录(火箭科学,我知道).用户希望将文件(.doc,.xls,.pdf等)与表中的单个记录相关联.
我应该将文件的内容存储在数据库中吗?这会膨胀数据库吗?
我应该将文件存储在文件服务器上,并将路径存储在数据库中吗?
做这个的最好方式是什么?
我认为你已经准确地捕捉到了解决这个问题的两种最流行的方法.各有利弊:
大多数rbms都支持在db中存储blob(或二进制文件数据,.doc,.xls等).所以你不是在这里开辟新天地.
简化数据备份:您备份拥有所有文件的数据库.
元数据(关于文件的其他列)与文件本身之间的联系是可靠的,并且内置于数据库中; 所以它是一站式商店,以获取有关您的文件的数据.
当您将所有二进制数据存储到数据库中时,备份可能会迅速变成巨大的噩梦.您可以通过将文件保存在单独的数据库中来缓解一些令人头疼的问题.
如果没有DB或DB的接口,就没有简单的方法来获取文件内容来修改或更新它.
通常,编写和协调数据上传和存储到数据库与文件系统的难度更大.
这种方法非常简单,您可以将文件本身存储在文件系统中.您的数据库存储对文件位置的引用(以及有关该文件的所有元数据).这里有一个有用的提示是标准化磁盘上文件的命名方案(不要使用用户提供给你的文件,自己创建一个文件并将它们存储在数据库中).
保持文件数据与数据库完全分离.
易于维护文件本身(如果您需要更改文件或更新文件),您可以在文件系统中自行维护.您也可以通过新上传从应用程序轻松完成.
如果您不小心,您的数据库文件可能会与文件本身不同步.
安全性可能是一个问题(如果您不小心的话),具体取决于您存储文件的位置以及该文件系统是否可供公众使用(通过网络我假设在这里).
在一天结束时,我们选择了文件系统路由.一旦我们锁定任何漏洞并将文件流出(而不是直接从文件系统直接提供),它更容易实现快速,易于备份,非常安全.在两种不同的政府应用中,它在大约6年的时间里以相同的格式运行.
Ĵ