2012-01-19 72 views
9

我有一個要求將用戶上傳的文件存儲到數據庫(文件系統不是一個選項)。Blob和存儲要求

上傳的文件是不同的類型(例如PDF,EXCEL等)。

我在決定是否使用MEDIUMBLOB作爲類型來將這些文件存儲爲二進制數據時遇到問題。

由於這些文件的大小隨着巨大差異的變化而出現混淆。就像其中一些文件有幾百千字節(例如114 KB),但其他一些則高達1.5兆字節。

所以我真的需要使用MEDIUMBLOB作爲列類型。但是我沒什麼困惑,因爲實際佔用的內存取決於上傳文件本身的大小文件大小本身被忽略,內存只是基於數據類型分配。這非常重要,因爲大部分每天上傳的文件(其中很多文件)的大小非常小,磁盤中的可用內存(空間)有限。

正如我讀MySQL的文檔的以下部分:

10.5. Data Type Storage Requirements

L表示在給定的字符串值的字節實際長度。

Data type     Storage Required 
======================================================== 
TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8 
BLOB, TEXT   L + 2 bytes, where L < 2^16 
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 

我想使用的內存取決於影片上傳的實際文件的大小。即如果我的列類型爲MEDIUMBLOB,並且如果我上傳大小爲114 KB的文件,則將使用唯一的114 KBytes + 3 Bytes磁盤存儲器,而不是(2^24) Bytes + 3 Bytes

我想對嗎?或者我會通過在MEDIUMBLOB字段中存儲大量文件(大小爲100到300 KB)來浪費大量的磁盤內存。

回答

2

MySQL會給你每個表的大小使用SHOW TABLE STATUS。所以如果你上傳一些測試文件,你應該能夠估計它們在數據庫中佔用的實際大小。每個表都有一些開銷,所以我會盡可能多地使用合理的文件進行測試。

+0

我用這個命令做了一些測試,看起來像我的假設是正確的。謝謝。 – jombie