我应该将图像作为二进制信息还是作为FS上的路径保存到数据库本身?

时间:2010-11-03 12:45:41

标签: c# .net image sqlite path

  

背景资料:

     

此应用程序是.NET 4 / C#Windows   使用SQLite作为后端的表单。   只有一个用户使用   数据库,绝不是这样   通过网络进行互动。

我的软件需要保存与项目记录关联的图像。我应该将图像保存为数据库本身的二进制信息;或者我应该保存文件系统上图片的路径并使用它来检索它。

我担心保存为路径时,有人可能会更改图片的文件名,这实际上会破坏我的应用程序使用。

任何人都可以提出一些建议吗?通过网络进行互动。

3 个答案:

答案 0 :(得分:3)

“这取决于”。如果有批次的图像,则所有BLOB权重可能会使备份变得越来越痛苦(实际上,可能会排除某些仅支持有限大小的数据库实现)。但它运作良好,效果很好。文件系统很好,只要你只存储路径相对于某个未知的根,即存储“foo / blah / blip.png”,它与配置数据结合得到完整路径 - 然后你可以轻松地重新定位路径。在某些情况下,文件系统具有更简单的备份选项,但您需要将文件系统和数据库备份结合起来。

答案 1 :(得分:2)

通常,最好将它们存储在文件系统中,并在DB中存储路径。

然而,微软不久前发表了一份白皮书,研究显示,高达150K的文件可以从放入数据库中受益(当然,这只适用于SQL Server)。

之前已经多次问过这个问题:

完全重复: User Images: Database or filesystem storage?
完全重复: Storing images in database: Yea or nay?
完全重复: Should I store my images in the database or folders?
完全重复: Would you store binary data in database or folders?
完全重复: Store pictures as files or or the database for a web app?
完全重复: Storing a small number of images: blob or fs?
完全重复: store image in filesystem or database?

答案 2 :(得分:0)

首先,您检查了SQLite limits吗?如果这对您的应用程序无关紧要,我仍然会选择FS来满足存储需求,这仅仅是因为从DB获取大型BLOBS与从FS读取文件所产生的开销。您可以将文件标记为只读和隐藏,以减少重命名的可能性...您还可以将文件的文件哈希值(如MD5)存储在数据库中,以便在有人重命名时可以使用辅助查找选项该文件(当然,他们也可以移动它,在这种情况下这没有多大帮助)......