我正在使用一款将图片大量存储在数据库中的应用程序。你对此有何看法?我更倾向于将其位置存储在文件系统中,而不是直接存储在数据库中。
你认为这样做的利弊是什么?
试图使用SQL模拟文件系统通常是一个不好的计划。如果你坚持使用文件系统进行外部存储,最终你会写出更少的代码,并获得同等或更好的结果。
有一件事情你需要记住,那就是你的数据集的大小。我相信Dillie-O是唯一一个接近要点的人。
如果你有一个小型的、单用户的消费者应用程序,那么我会建议使用数据库。我有一个DVD管理应用程序,它使用文件系统(在Program Files中),备份很麻烦。我希望每次他们都能将它们存储在数据库中,并让我选择保存该文件的位置。
对于一个更大的商业应用程序,我会开始改变我的思路。我曾经为一家开发县书记信息管理应用程序的公司工作过。我们会将图像以编码格式存储在磁盘上[以处理大量文件的FS问题],基于县分配的仪器编号。这在另一个方面也很有用,因为图像可以存在于DB记录之前(由于他们的工作流程)。
和大多数事情一样:“这取决于你在做什么”
我更喜欢将图像路径存储在数据库中,而将图像存储在文件系统中(通过服务器之间的rsync保持一切相对最新)。
然而,我所做的一些内容管理系统需要将图像放在CMS中,原因有几个:可见性控制(因此资产被保留,直到新闻发布),版本控制,重新格式化(某些CMS将动态调整大小以用于缩略图)以及方便将图像链接到所见即所得页面。
因此,对我来说,经验法则是始终将应用程序内容存储在文件系统中,除非它是由CMS驱动的。
我几乎从不将它们存储在数据库中。最好的方法通常是将图像存储在由中央配置变量控制的路径中,并根据数据库表和主键(如果可能)命名图像。这样做有以下优点:
http://developer.teradata.com/applications/articles/large-objects-part-1-loading
我会采用两种解决方案,我的意思是...我将开发一个小组件(EJB),将图像存储在数据库中,并将其路径存储到服务器中。只有当我们有新的图像或原始图像更新时,才会更新此数据库。然后我还将在业务数据库中存储路径。
从应用程序的角度来看,我将始终使用文件系统(从业务数据库中检索路径),通过这种方式,我们将解决备份问题,并避免可能的性能问题。
唯一的弱点是我们将两次存储相同的图像...好处是内存很便宜,来吧!