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