Blob和存储需求

12

我需要将用户上传的文件存储到数据库中(文件系统不是一个选项)。

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

我在决定是否使用MEDIUMBLOB作为二进制数据存储这些文件类型时遇到了问题。

混淆出现的原因是这些文件的大小差异很大。有些文件只有几百KB(例如114 KB),而其他一些文件则高达1.5 MB。

所以我确实需要使用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之间的文件会浪费大量磁盘内存吗?
1个回答

6

使用SHOW TABLE STATUS命令,MySQL可以提供每个表的大小。因此,如果您上传了一些测试文件,您应该能够估计它们在数据库中实际占用的空间大小。每个表都有一些开销,因此我建议在测试时尽可能使用更多的文件。


2
我对那个命令进行了一些测试,看起来我的假设是正确的。谢谢。 - jombie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接