2009-06-16 77 views
7

我们在lonnng之前买了一个“现成的”应用程序,它能够将文件存储为SQL Server中的blob。我们注意到,由于一个部门更频繁地使用此blob字段,因此在过去六个月内数据库的规模增加了一倍多。结果,应用程序变得非常缓慢。如何从blob/filestream识别文件类型?

我的任务是从数据库中删除blob字段并将文件保存到实际的文件系统中。不幸的是,应用程序不存储数据库中的文件类型。虽然我可以读取数据库中存在的文件,但我不知道将文件保存为什么扩展名。该应用程序的支持台不再支持该版本的软件,并且不会与我们讨论提取数据。不幸的是,我们无法访问他们的源代码。

任何建议将不胜感激!提前致谢!

+0

我不确定它是否相关,但可能有70%的这些文件是Office文档,与Office 2003 - Office 2007的格式不同。 – proudgeekdad 2009-06-16 22:12:08

回答

2

不要将其保存为任何类型。将其另存为一个没有扩展名的文件。如果你不知道它是什么,不要伪造它。如果保存它的应用程序请求它,则以与从数据库返回相同的方式将它从文件系统中返回;作为二进制数据。数据库不关心二进制对象是什么类型的数据;你也不应该。

2

您可以尝试使用TRID http://mark0.net/soft-trid-e.html

它会扫描文件,并尝试找出扩展。

+0

或者使用linx文件的窗口端口commnad http://downloads.sourceforge达网络/的GnuWin32 /文件-5.03-SETUP.EXE – jitter 2009-06-16 22:17:57

0

你怎么知道这些信息是人类可读的?

文件扩展名的目的是关联一个特定的软件来打开该文件,以便双击.txt文件时,notepad.exe将处理它。

如果您只是为了卸载数据库而将它们写入文件系统,那么就不需要任何特定的扩展。如果要将软件与其关联,请使用相应的扩展名

0

另一种选择是物理分区数据库。您可以将包含blob字段的表存储在可存储在不同硬盘/主轴上的不同数据库文件中。包含blob表的磁盘可以通过将其设置为RAID 0或RAID 10进一步优化。

这可以加快速度。而且,这种方法消除了更改应用程序逻辑的需要。

0

用你的话来说......“我的任务是......” - 你确定这不是一个可以通过对数据库进行一些优化来解决的问题吗?沿着侵入一个你没有源代码并且没有支持的遗留应用程序的路径是你想尽可能避免的东西。

所以,看看这里的问题 - 应用程序的缓慢。那为什么它慢?数据库索引无法解决的事情?

如果您必须将BLOB提取到文件系统,那么为什么文件的格式是相关的?无疑,该应用程序设计为对数据库执行查询以获取该文件 - 如何将BLOB提取到文件系统可以帮助您?

作为旁白 - 我通常使用Unix file命令通过幻数来识别文件。