oracle 大欄位的使用

來源:互聯網
上載者:User

標籤:

資料庫大欄位(Clob, Blob)不適合儲存超過1MB的資料 

通常資料庫都提供Clob,Blob,Text,Long等大欄位類型來存放超過4K的資料,然而這絕不意味著應該使用大欄位來儲存超過1MB以上的資料檔案。之所以有大欄位,往往是因為varchar類型有一定的長度限制,例如4K。超過此長度的文本和位元據必須使用大欄位儲存。不過通常情況下,大欄位不意味著儲存很大的檔案,通常只是幾十到幾百KB的資料,例如很長的文章,表徵圖,小圖片等等。超過1MB以上的資料儲存在資料庫有諸多的效能問題: 

速度慢 
Web Server可以直接讀取硬碟檔案,然後返迴文件給用戶端,或者應用伺服器讀硬碟檔案返回用戶端,其效率要遠遠超過應用伺服器訪問資料庫讀取資料返回用戶端。 

操作不方便 
必須把資料庫開啟一個流,構造一個Buffer,然後再輸出一個ServletOutputStream。佔用資料庫連接,加重資料庫訪問負載不說,如果使用者突然中斷下載,還需要處理資料庫關閉動作,容易造成效能問題。如果把整個資料讀入記憶體再輸出,則記憶體佔用非常客觀。如果是硬碟檔案,只要返回一個URL就可以了。即使你不希望使用者直接存取到檔案,你也可以構造一個IOStream來輸出檔案,既不會佔用資料庫資源,傳輸速度也快。 

效能有問題 
特別的情況是,如果並發很多使用者來下載大檔案的時候,應用伺服器要佔用非常多的記憶體來快取檔案內容,假設並發10個使用者,下載10MB的檔案,JVM的峰值就至少需要100MB記憶體來支撐,很容易造成JVM崩潰。

Oracle其實還有一種File的Blob類型,雖然也是Blob,但是實際上File是儲存在硬碟上的,這種方式的你可以試試看,只不過我覺得這種方式還不如直接操作檔案方便,既然原理是一樣的。 

另外補充一點,常規的Database Backup都是無法備份Blob資料的,所以如果你把檔案都儲存到Blob裡面去的話,資料庫的備份是一個很頭疼的大問題,你必須單獨寫程式把blob資料讀出來,再寫到硬碟檔案去,再備份檔案。而你如何把檔案放在硬碟某個目錄下面,而不是做為blob放在資料庫裡面,那備份簡直易如反掌。 

當然儲存檔案的方式的缺點就是檔案不能重名,否則會覆蓋,這個問題也不難解決,一般的fileupload API碰到重名都會有很多改名儲存的策略;另外一點就是作業系統一個目錄下面可以放的檔案數量有限制,這個限制通常和檔案系統的inode數量有關係,例如一個目錄下面只能放1024個檔案之類,然而這個問題同樣可以通過file upload的一些儲存策略解決掉,例如再增加一個子目錄存放什麼的。Oracle其實還有一種File的Blob類型,雖然也是Blob,但是實際上File是儲存在硬碟上的,這種方式的你可以試試看,只不過我覺得這種方式還不如直接操作檔案方便,既然原理是一樣的。

oracle 大欄位的使用(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.