2009-06-16 80 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命令通過幻數來識別文件。