我有一个很大的xml文件要加载到mysql中。这是约20 GB的未压缩,但我想我可以压缩到约25%的原始大小,然后批量上传到一个压缩表。
我知道我可以压缩数据库本身中的数据,但它可以在批量添加过程中读取压缩文件吗?
编辑:我所说的压缩并不意味着它是一个.gz.tar文件或者任何东西。我的意思是,当我用Java或C++创建文件时,我将其输出为gzip,所以文件本身是一个.csv或.xml,并且保留了正确的结构,但是其中的项(每行)都是压缩的。
如果这是不可能的,我是否可以做一些像批量上传,但以某种方式过滤它通过一个程序,解压缩的内容?我正在考虑用C打开这个文件,并在将其加载到mysql时对其进行压缩。问题是,我希望在批量插入而不是数百万个单独的插入中执行此操作。
发布于 2012-06-12 23:13:26
为此,您绝对应该使用LOAD DATA INFILE。插入可能比LOAD DATA INFILE慢一个数量级,尤其是在较大的文件上。
不幸的是,MySQL本身并不支持直接加载压缩文件(据我所知,任何类型的文件)。但是,如果您查看上面的LOAD DATA INFILE链接,就会发现有一个技巧可以将数据直接从管道加载到表中(只需在页面中搜索“管道”)。我想您可以使用该方法解压缩文件并将输出通过管道传输到MySQL,但是压缩/解压缩显然比直接加载未压缩文件要慢。
发布于 2015-03-09 22:30:48
$ mkfifo --mode=0666 /tmp/namedPipe
$ gzip --stdout -d file.gz > /tmp/namedPipe然后将未压缩的数据加载到MySQL表中,如下所示:
LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;发布于 2015-08-07 00:07:53
不要使用'--mode=-666‘,除非您希望系统上的每个其他用户都能够写入管道。使用'--mode=-600',并将管道保存在本地主目录中,以减少未经授权访问的风险。
https://stackoverflow.com/questions/10987682
复制相似问题