什么是保存和检索与Oracle 10g的二进制文件的最好方法?

问题描述 投票:1回答:6

我即将实现我们的应用程序中的功能,允许用户“上传”一个PDF或Microsoft PowerPoint文件,该应用程序将提供给其他用户在浏览器(所以他们没有得到“下载”它在“另存为...”意义上的)。

我已经知道如何保存和检索数据库列中任意的二进制信息,但因为这将是我们的应用程序的一种常用的功能,我担心的解决方案将导致巨大的大型数据库表(因为我们知道我们的一个客户想要把在PowerPoint文件的视频)。

我知道有一种方法可以在Oracle中创建一个“目录”对象,但有使用这个功能来存储和检索的数据库服务器上的其他地方保存的二进制文件的方法吗?

还是我过于偏执数据库的大小?

(出于完整性我们的应用程序是使用CoreLab / DevArt OraDirect.Net drivers到Oracle 10g的.Net的WinForms)

.net oracle binaryfiles
6个回答
5
投票

选项夫妇:你可以把BLOB列在其自己的表空间,有自己的存储特性;您可以将存储的BLOB在它们自己的表,通过一个ID列连接到其他表。在这两种情况下,如你所说,你可以将该列定义一个BFILE这意味着实际的文件从一个目录中的数据库存储在外部。什么可能是担心有是BFILE的LOB不参与交易,并不能恢复与数据库的其余部分。

这是在Oracle 10gR2中SQL引用的所有讨论,第2章,从第23页。


1
投票

我想这取决于你认为极大地大。

这确实取决于使用情况。如果只被很少访问的文件,然后把它在数据库就可以了(与得到“自由”的备份,例如,与数据库的优势)。

如果这些是要被打一遍又一遍的文件,你可能会更好地把他们直接在磁盘上只存储位置,甚至(如果它真的高带宽)考虑像MogileFS

没有人将能够给你一个是或否的回答这一点。


1
投票

你可以使用正常的LOB列类型和设置存储参数,该字段,以便它是在一个单独的表空间。创建表空间的地方,可以处理具有它抛出大量的数据,你会影响降到最低。

要认真超级偏执磁盘使用情况,您可以通过附加标记为这样的压缩表空间。沿着线的东西:

CREATE TABLESPACE binary_data1 DATAFILE some_san_location DEFAULT COMPRESS存储(...)


1
投票

在我的经验中,包含附件的文件名一个简单的VARCHAR2字段是一个更好,更容易的解决方案。文件系统的大小是一个容易得多比数据库的大小来管理。


1
投票

该数据有地方住,无论是内部的数据库,还是你只是存储链接到一个(服务器)访问的文件路径,你还在咀嚼空间。

我只是用过去简单的LOB字段,它似乎很好地工作。如果您保留数据库中的数据,至少你把你备份的麻烦低 - 你可能有大量的数据需要备份,但是当你恢复它,一切都会有。拆分双星明意味着你可能会破坏数据库或者如果你不小心你的备份什么丢失数据。


1
投票

只是储存链接或可用于建立链接的ID的一个原因是,你通常使用Oracle数据库的存储是相当昂贵的。如果你有很多的大文件,它通常是更具成本效益的把它们放在盘更便宜的阵列上。

© www.soinside.com 2019 - 2024. All rights reserved.