2009-06-03 57 views
5

如何將巨大的BLOB插入MySQL數據庫(InnoDB)?在MySQL中處理巨大的Blob?

根據MySQL手冊,LONGBLOB類型的字段支持最大4 GB的數據大小。但是如此巨大的數據如何進入數據庫呢?

我試圖用

INSERT INTO table (bindata) VALUES (LOAD_FILE('c:/tmp/hugefile')); 

如果hugefile的尺寸大於約500 MB更大哪些失敗。我已將max_allowed_packet設置爲適當的大小; innodb_buffer_pool_size的值似乎沒有影響。

我的服務器機器運行Windows Server 2003並具有2 GB RAM。我正在使用MySQL 5.0.74-enterprise-nt。

+0

只因爲你可以不意味着你應該。 – Kekoa 2009-06-03 15:43:59

+3

@kekoav我知道在某些環境中,將文件存儲在文件系統中比在數據庫中更好,但獨立於此討論,我必須知道它是如何工作來存儲這樣的數據以便能夠嘗試並形成意見兩種解決方案的優點和缺點(存儲在文件系統中並存儲在數據庫中)。提前感謝您的理解! – 2009-06-03 15:49:50

回答

2

BLOBs被緩存在內存中,這就是爲什麼你將有一個BLOB的副本,因爲你將它插入數據庫。

您的500 MB BLOB在RAM中佔用1,500 MB,似乎達到了您的內存限制。

+0

所以我需要一個64Bit的機器,配備12GB的RAM能夠插入4GB的BLOB? – 2009-06-03 15:54:19

1

我不知道你使用了哪個客戶端/ api,但是當試圖從自己的Java和Objective-C客戶端使用blob時,MySQL似乎並不真的支持blob的流式傳輸。您需要足夠的內存來將整個blob作爲ram(服務器和客戶端)中的字節數組保存多次!轉向64位Linux有助於解決問題,但這不是理想的解決方案。

MySQL不適用於BLOB處理(對於小BOB :-)。它佔用RAM的兩倍或三倍,以便在「BLOB」中存儲/讀取。

您必須使用PostgreSQL等其他數據庫才能獲得真正的BLOB支持,對不起。