我正在使用一款将图片大量存储在数据库中的应用程序。你对此有何看法?我更倾向于将其位置存储在文件系统中,而不是直接存储在数据库中。
你认为这样做的利弊是什么?
文件存储中的图像是最好的选择,可以通过将元数据存储在数据库中来补充。从Web服务器的角度来看,快速提供服务的方法是直接指向它。如果它在数据库中-比如Sharepoint-您需要使用ADO.Net来提取、流式传输等操作。
虽然Documentum臃肿而复杂,但它的做法是正确的,因为文件在共享上可用,您可以确定如何存储它们-服务器上的磁盘、SAN、NAS等。Documentum策略是通过根据其主键在DB中对文件夹和文件名进行编码,将文件存储为树形结构。DB成为了知道哪些文件是什么以及强制执行安全性的资源。对于高容量系统,这种方法是一个不错的选择。
在处理元数据时也要考虑到这一点:如果您需要更新元数据语料库的属性,DB是您的朋友,因为您可以快速地使用SQL执行更新。对于其他标记系统,您没有易于操作数据的工具。
在我目前的应用程序中,我两者都做。当用户确定要附加到记录的图像时,我使用ImageMagick将其调整大小为适合屏幕显示的适当尺寸(我的应用程序大约是300x300),并将其存储在数据库中以便于访问,但也将用户的原始文件复制到网络共享中,以便需要更高分辨率的应用程序使用(例如打印)。
还有其他几个因素:Navision只能显示BMP格式的图像,所以在调整大小时,我还会转换为BMP格式进行存储,并且数据库会被复制到远程站点,在那里显示图像非常有用。打印只在总部进行,因此我不需要复制原始文件。