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. oracle 参考

    create or replace function fun_try(v_name varchar,v_outname out varchar)return varchar2 is Result va ...

  2. zx一篇让Java程序猿随时可以翻看的Oracle总结

    一篇让Java程序猿随时可以翻看的Oracle总结 前言:Oracle学习也有十几天了,但是呢,接下来还要学习许多其他的东西,并不能提步不前,所以在此总结了以下Oracle中常用的命令和语句,没有语法 ...

  3. Java 对象销毁

    Java语言拥有一套完整的垃圾回收机制. 何种对象会被java虚拟机视为垃圾.主要包括以下两种情况: (1)对象引用超过其作用范围,则这个对象将被视为垃圾 (2)将对象赋值为null 参考资料:Jav ...

  4. SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法

    一般备份文件选择的目录为磁盘根目录或备份所选分区未授予sqlserver用户读写权限时会出现此错误. 解决办法就是给sqlserver用户授予权限: 选择要备份的文件夹 ,右键-->属性--&g ...

  5. java 之return

    return关键词有两个用法,一方面制定一个方法返回什么值,另一方面导致当前方法退出.

  6. Spring操作指南-针对JDBC配置声明式事务管理(基于注解)

  7. Python之路-python(堡垒机)

    运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的 ...

  8. 更改android AVD模拟器创建路径位置的方法

    打开:计算机-->系统属性-->环境变量—>在“系统变量”那选择“新建”-->变量名为 "ANDROID_SDK_HOME” (注意,必须为这个名字!),然后把变量值 ...

  9. weblogic10异常:org.hibernate.hql.ast.HqlToken

    转自:http://www.programgo.com/article/68682994452/ 在做查询的时候,报出  org.hibernate.QueryException: ClassNotF ...

  10. SQL中exists和in比较

    in 和exists in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询. 一直以来认为exists 比in 效率高的说法是不准确的.如果 ...