2010-11-25 89 views

回答

2

當接受這麼快的回答時,您不會從更大的受衆那裏得到答案。

這取決於。你需要考慮幾件事情。

  1. 如果你有米老鼠免費的數據庫,這意味着它不妥善處理斑點(閱讀每一個選擇的斑點;不要存儲在單獨區域的斑點),保持文件之外。

  2. 如果您有企業數據庫,將blob保留在數據庫中完全沒有問題。這些不會讀取每個SELECT上的斑點。一個額外的讀取blob不是一個「性能」「問題」。

  3. 大多數數據庫都是2k頁不是8k或16k。如果你的頁面尺寸較大,那麼在最後一頁的未使用部分,每個斑點都會有一些浪費。

  4. 將數據庫保留在數據庫中的缺點是您的數據庫備份會更大。某些企業數據庫注意到該頁面未更改,並將其從增量備份中排除;其他人沒有增量。

  5. 將數據塊保留在數據庫中的優點是數據和參照完整性。您不會遇到與blob不同步的問題。

    • 去年我完成了一個分配,客戶在分貝中有130GB的數據,在分貝以外存儲了700GB的文檔。經過十年的問題,他們咬緊牙關,將文件移入數據庫。猜猜看是什麼,應該是一個簡單的工作(長而簡單),因爲參考文獻應該是絕對正確的,最終會變得非常龐大,因爲有太多重複和無效的參考文獻。由此產生的數據庫是630GB,有100GB的笨蛋。 2K pagesize。

迴應評論

  1. 斜線或反斜線
    容易。在數據庫中,僅存儲斜槓。您需要一種識別目標系統的方法,並指示IsWindoze。它應該在表層次結構中更高,而不是在您找到Filename的級別。如果指示符已設置,則每當您報告或顯示Filename列時,將斜槓更改爲反斜槓。
    您將遇到與Unix不具有的DriveLetter和冒號類似的問題。
4

避免將文件存儲在數據庫中。大多數人不善於處理他們。

+1

只是要補充,它通常是一個壞主意 - 唯一一次它變得遠程可行的時候是當你處理數據庫,你可以保證記錄將在內存中當你需要它,並從那裏服務。但幾乎在所有情況下,文件系統都是更好的選擇。 – Arantor 2010-11-25 02:58:36

0

首選的方法是將文件存儲在文件系統中,並將文件的位置存儲在數據庫中。其原因與數據庫物理分配磁盤空間的方式有關(通常是8k或16k塊)。刪除那裏的大文件會導致數據庫使用不同的機制來存儲文件(SQL Server稱爲row overflow data)。通常,這些頁面位於普通表外,因此每行的每個邏輯讀取都會在磁盤上產生兩個物理讀取。不用說,這對性能不利。

1

最後回答:這取決於你的引擎。

  • 自20世紀90年代以來,SQL Server的頁面大小還沒有被使用過。 Oracle默認爲8K,SQL Server爲8K。只有Sybase AFAIK還在上個世紀。

  • SQL Server現在提供FILESTREAM它結合了兩者的優點,因爲Oracle已經與BFILE

    做長
  • SQL Server和Oracle提供對磁盤和備份壓縮

我確保PostgresSQL至少提供類似的功能。

注意:這主要是爲PerformanceDBA的FUD提供替代方案

相關問題