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. WordPress忘记登录密码

    后台的登录密码使用的是md5加密的,有时候会忘记登录密码,那么可以修改数据库,把密码改为你知道的字符串的md5加密值 如 hello对应的md5加密值为:5d41402abc4b2a76b9719d9 ...

  2. selenium RC+JAVA 笔记 一

    selenium 常用操作有:open,type,click,select,selectFrame. package com.example.tests; import com.thoughtwork ...

  3. couldn't find setter for xxxxx

    springmvc hibernate框架,在执行普通的插入操作时报错,仔细检查实体类文件,确认该属性的getter setter方法都是有的,哭哭(´;︵;`)jpa策略生成的当然有.可是老是报这个 ...

  4. 动态调频DVFS_转

    转自: Linux Core Power Management User's Guide (v3.14) http://processors.wiki.ti.com/index.php/Linux_C ...

  5. bindOrg函数

    @param params {userId 用户ID, orgcode 机构代码, defaultOrgcode 默认机构代码, defaultOcid 默认银行代码, flag 1=取所有中心(默认 ...

  6. RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)

    最新版本请转到:RDIFramework.NET平台代码生成器V3.1版本全新发布-更新于2016-10-08(提供下载) RDIFramework.NET代码生成器V3.0版本修改了针对3.0版本的 ...

  7. [Core] .NET Core & VS Code 之路(2) Web API

    开发Core项目的条件 Visual Studio 2015 Update 3 .NET Core 1.0.0 - VS 2015 Tooling Preview 2 看到VS包的体积,以及不想往下走 ...

  8. noi 04:求整数的和与均值

    04:求整数的和与均值 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 读入n(1 <= n <= 10000)个整数,求它们的和与均值. 输入 ...

  9. 详解JS跨域问题

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域.             JavaScript   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  10. 9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现

    // reverselink.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" struct Node{ int num; struct No ...