https://www.zhihu.com/question/28139319

解析超过500G的xml 写入mysql,如何尽快写入?

解析超过500G的xml 写入mysql,如何尽快写入?

现在有一个超过500G的xml,xml中的节点也比较复杂,因为记录可能超过20亿条,所以进行了分表分区(100个表,每个表100个分区),分表用的哈希取模,所以只能用程序写入,
1. 用最笨的方法逐行解析写入,好几天不见完。
2. 合并insert value,没100条进行事务写入,还是很慢。

有什么好的建议能尽快将数据导入数据库?

1 条评论

分享
 
默认排序按时间排序

4 个回答

0赞同反对,不会显示你的姓名
分批把 XML 解析成特定分隔符分割的数据,再使用 LOAD DATA INFILE 导入,速度应该会比题主的方法快。
1赞同反对,不会显示你的姓名
方法(一)
1个xml解析线程,N个insert线程(建议N=32),生产者-消费者模型
每条insert语句插入多条记录

方法(二)
解析xml文件,根据取模写到100个文件中
100个load data infile

1赞同反对,不会显示你的姓名
你这个任务一个是disk时间,一个是cpu时间,一个是db时间,所以首先就是并行处理这些任务。
读取xml就用一个thread好了,反对上面说多线程读的方案,你的硬盘只有一个读入点,并行读有什么好处?
然後把xml丢到一个pool里去解析xml,每解析一个就丢到存储db的pool里。
根據我的知识,你分多个表是沒有意义的,连续写入一定比random写入快很多阿。
还有,先去掉所有的index,全写完再加回来。
0赞同反对,不会显示你的姓名
知乎用户 build mind, build world!
 
用sax 来搞吧,解析很快。
有两种方案
  1. 可以用解析生成insert batch 语句,再来执行这些语句。
  2. 解析组装成对象集合,再按阈值进行批量插入。(堆要开大)

以偶的实践来看

  1. 解析倒不是问题。(2G xml 的解析2-3min) i5 8G
  2. 性能点是数据库,一定要把索引建好。

如果你的xml 不是特别复杂。可以参照如下脚本分割成100m一个的文件来操作:
shell script:

split -C 100m [filename]

分成多个小型XML, 分开单线程读。照最上方的方案。

解析xml并且导入mysql的更多相关文章

  1. 解析csv数据导入mysql的方法

    mysql自己有个csv引擎,可以通过这个引擎来实现将csv中的数据导入到mysql数据库中,并且速度比通过php或是python写的批处理程序快的多. 具体的实现代码示例: 代码如下: load d ...

  2. Java中实现SAX解析xml文件到MySQL数据库

    大致步骤: 1.Java bean 2.DBHelper.java 3.重写DefaultHandler中的方法:MyHander.java 4.循环写数据库:SAXParserDemo.java ① ...

  3. python提取xml属性导入Mysql

    xml文档来自ganglia-gmond端telnet localhost 8649产生出来的文档,由于ganglia每隔一段时间就更新数据,为了永久保存数据到MySQL中,就用python写了最开始 ...

  4. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  5. javaEE学习笔记-利用DOM4J解析xml至数据库

    xml代码文件名:test02.xml <ACCESOS> <item> <SOCIO> <NUMERO>00045050</NUMERO> ...

  6. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

  7. 导入libxml.dylib用Google的GDataXML解析XML数据

    1.用Google的GDataXML来解析XML数据,导入libxml.dylib 2.导入libxml.dylib的操作实现,一开始自己总是找不到libxml.dylib文件. 选择其他文件,到路径 ...

  8. java使用sax解析xml

    目的:解析xml文件,并存入mysql,并且要解析的字段能一一对应.这里解析的是微博的文件,想要利用里面的article和person_id字段. 思路: 为了能得到person_id和article ...

  9. CSS控制XML与通过js解析xml然后通过html显示xml中的数据

    使用CSS控制XML的显示 book.css bookname{ display:block;color:Red} author{ display:block;font-style:italic} p ...

随机推荐

  1. 中英文维基百科语料上的Word2Vec实验

    最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vec 和 python-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了 ...

  2. vs2010项目使用vs2013编译报错 无法打开包括文件:“winapifamily.h”

    我的老项目是vs2010下的项目.最近安装vs2013后,打开sln解决方案,调试运行报错 C:\Program Files (x86)\Windows Kits\8.0\Include\um\win ...

  3. Asp.Net Razor中的Consistent Layout

    有意义的参考:http://www.asp.net/web-pages/tutorials/working-with-pages/3-creating-a-consistent-look Asp.ne ...

  4. 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...

  5. 计蒜客A

      联想公司最近要设计一个体现公司文化的 logo.联想的设计师想出了一个方案:先画了一个顶点 O,接着画出以顶点 O 为公共顶点的.夹角为 θ的两条线段 l1​​ 和 l2 其中 l1作为圆 C1的 ...

  6. spring Date JPA的主要编程接口

    Repository:最顶层的接口,是一个空接口,主要目的是为了同一所有Repository的类型,并且让组件扫描的时候自动识别. CrudRepository:是Repository的子接口,提供增 ...

  7. 查看 Apache并发请求数及其TCP连接状态

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

  8. 【原创】linux 批量清空文本内容

    清空所有PHP文件 find . -name '*.php'|xargs sed -i '1,$d' 清空所有文件 find . -type f|xargs sed -i '1,$d'

  9. Android 短信广播接收相关问题

    本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...

  10. Caffe + Ubuntu 14.04 64bit + 无CUDA(linux下安装caffe(无cuda)以及python接口)

    安装Caffe指导书 环境: Linux 64位 显卡为Intel + AMD,非英伟达显卡 无GPU 一. 安装准备工作 1. 以管理员身份登录 在左上角点击图标,搜索terminal(即终端),以 ...