可以加载文件中的数据(mysql批量上载)读取压缩文件吗?

可以加载文件中的数据(mysql批量上载)读取压缩文件吗?,mysql,Mysql,我有一个很大的xml文件要加载到mysql中。它的未压缩速度约为20Gbs,但我认为我可以将其压缩到原始大小的25%左右,然后将其批量上传到压缩表中 我知道我可以压缩数据库中的数据,但它可以在批量添加过程中读取压缩文件吗 编辑:我所说的压缩文件不是指.gz.tar文件或任何东西。当我在java或C++中创建文件时,我将它作为gZip输出,所以文件本身是.cv或.xml,并保留正确的结构,但是它(每个行)中的项目都被压缩了。 如果这是不可能的,我可以做一些像批量上传,但以某种方式过滤它通过一个程序

我有一个很大的xml文件要加载到mysql中。它的未压缩速度约为20Gbs,但我认为我可以将其压缩到原始大小的25%左右,然后将其批量上传到压缩表中

我知道我可以压缩数据库中的数据,但它可以在批量添加过程中读取压缩文件吗

编辑:我所说的压缩文件不是指.gz.tar文件或任何东西。当我在java或C++中创建文件时,我将它作为gZip输出,所以文件本身是.cv或.xml,并保留正确的结构,但是它(每个行)中的项目都被压缩了。
如果这是不可能的,我可以做一些像批量上传,但以某种方式过滤它通过一个程序,解压缩的内容?我正在考虑用C打开文件,并在将其加载到mysql时对其进行压缩。问题是我想在批量插入中执行此操作,而不是在数百万个单独插入中执行此操作。

您肯定应该使用此操作。插入可以比加载数据填充慢一个数量级,尤其是在较大的文件上

不幸的是,MySQL不支持直接加载压缩文件(据我所知,任何类型的压缩文件)。但是,如果查看上面的“加载数据填充”链接,有一个技巧可以将数据直接从管道加载到表中(只需在页面中搜索“管道”)。我想您可以使用该方法解压缩文件并将输出传输到MySQL,但是压缩/解压缩显然比直接加载未压缩文件要慢

$ mkfifo --mode=0666 /tmp/namedPipe
$ gzip --stdout -d file.gz > /tmp/namedPipe
然后将未压缩的数据加载到MySQL表中,如下所示:

LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;

不要使用'--mode=-666',除非您希望系统上的所有其他用户都能够写入管道。使用'--mode=-600',并将管道保存在本地主目录中,以减少未经授权访问的风险。

谢谢,我会测试它,但我认为这个想法是正确的。从磁盘读取将更为瓶颈,解压缩将不会。我可以打开文件,解压缩并打印结果,然后通过管道传输到mysql。