将ASCII文件存储为MySQL或Oracle中的BLOB字段是否会降低存储要求?

时间:2012-09-11 22:27:04

标签: mysql storage blob

我有几千个小的ASCII文件,其中包含分子中原子的3D笛卡尔坐标(以及其他信息),我需要存储在某处。

一个简单的计算告诉我,我们将需要几个TB的空间,最多可能减少到几千兆字节,但在当前的基础设施限制下无法管理。有人告诉我,有些人在MySQL和Oracle中存储了类似数量的文件(格式相同但有时是bzipped)作为BLOB字段。我的问题是,存储像BLOB这样的文件是否提供了某种形式的存储要求降低?如果是的话,我可以期待多少减少?

这是需要存储的ASCII文件中的示例文本:

@<TRIPOS>MOLECULE
****
    5     4     1     1     0
SMALL
GAST_HUCK


@<TRIPOS>ATOM
      1 C1         -9.7504    2.6683    0.0002 C.3       1 <1>        -0.0776 
      2 H1         -8.6504    2.6685    0.0010 H         1 <1>         0.0194 
      3 H2        -10.1163    2.1494   -0.8981 H         1 <1>         0.0194 
      4 H3        -10.1173    3.7053   -0.0004 H         1 <1>         0.0194 
      5 H4        -10.1176    2.1500    0.8982 H         1 <1>         0.0194 
@<TRIPOS>BOND
     1    1    2 1    
     2    1    3 1    
     3    1    4 1    
     4    1    5 1    
@<TRIPOS>SUBSTRUCTURE
     1 ****        1 TEMP              0 ****  ****    0 ROOT 
@<TRIPOS>NORMAL
@<TRIPOS>FF_PBC
FORCE_FIELD_SETUP_FEATURE Force Field Setup information
v1.0  0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 NONE 0 0 0 0 1 0 0 0 0 0 0 0 0

1 个答案:

答案 0 :(得分:1)

BLOB列中存储数据不会降低存储要求。 BLOB类型的存储要求很简单:

  • TINYBLOB L + 1个字节,其中L <1。 2 8
  • BLOB L + 2个字节,其中L <1。 2 16
  • MEDIUMBLOB L + 3个字节,其中L <1。 2 24
  • LONGBLOB L + 4个字节,其中L <1。 2 32

L以字节为单位表示字符串数据的长度。

有关详细信息,请参阅Storage Requrements

如果不需要搜索数据库中分子文件的内容,可以通过在插入数据之前压缩数据或在插入时使用MySQL COMPRESS()函数来降低存储要求。

我认为这解决了您的主要问题,并根据这些数据以及您计划根据平均大小存储的文件数量,您可以计算BLOB类型列将消耗多少存储空间。