首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载文件中的数据(mysql批量上传)可以读取压缩文件吗?

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

Stack Overflow用户
提问于 2012-06-12 05:19:36
回答 3查看 9.3K关注 0票数 4

我有一个很大的xml文件要加载到mysql中。这是约20 GB的未压缩,但我想我可以压缩到约25%的原始大小,然后批量上传到一个压缩表。

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

编辑:我所说的压缩并不意味着它是一个.gz.tar文件或者任何东西。我的意思是,当我用Java或C++创建文件时,我将其输出为gzip,所以文件本身是一个.csv或.xml,并且保留了正确的结构,但是其中的项(每行)都是压缩的。

如果这是不可能的,我是否可以做一些像批量上传,但以某种方式过滤它通过一个程序,解压缩的内容?我正在考虑用C打开这个文件,并在将其加载到mysql时对其进行压缩。问题是,我希望在批量插入而不是数百万个单独的插入中执行此操作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-12 23:13:26

为此,您绝对应该使用LOAD DATA INFILE。插入可能比LOAD DATA INFILE慢一个数量级,尤其是在较大的文件上。

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

票数 10
EN

Stack Overflow用户

发布于 2015-03-09 22:30:48

代码语言:javascript
复制
$ mkfifo --mode=0666 /tmp/namedPipe
$ gzip --stdout -d file.gz > /tmp/namedPipe

然后将未压缩的数据加载到MySQL表中,如下所示:

代码语言:javascript
复制
LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;
票数 7
EN

Stack Overflow用户

发布于 2015-08-07 00:07:53

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10987682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档