又见csdn!- - !大家帮忙出出主意!谢谢
又跟数据干上啦!
现在手里(mssql2000下)的5000W数据要导入mysql,编程实现的。
因为5000W数据的来源不同,所以存在用户名和Email重复的问题,
进而每插入一条数据的前,都要和已插入的所有数据进行判断,并作出相应的操作。
随着插入的数据的增多,导入开始变得慢下来了,最终导到20W的时候,终于
内存溢出啦。
不知道大家有没有什么好多建议,或者谁做过大数据的移植,还是这样有条件的移植 - - !
大家指教一下,小雨十分感激。
附加:每次我都是手动执行这次导多少(5000)条,能不能让它自动导,点下开始就开始导,每次导入固定条数,然后继续导下多少条?并且可以随时
暂停下来,点继续就接着导入,因为数据大,所以一次次操作太累了,谢谢大家。
Java code
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
root cause
java.lang.OutOfMemoryError: Java heap space
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16
------解决方案--------------------小雨,我不会,只能顶了
------解决方案--------------------帮顶!每次插入固定条数的数据后,清空一下试试
------解决方案--------------------嘿嘿,纯粹不懂,精神支持啊,嘿嘿·····
------解决方案--------------------帮顶,这么大的数据量啊
------解决方案--------------------写个线程,导一部分,就暂停释放一下空间,不知道行不行,也没试过
------解决方案--------------------对数据库不太熟悉:
能否建立个文件数据库先既根据英文a---z分,然后a之中又根据name的长度进行划分(长度1--10、11--15、16-20、20--XXX),,先把名字和Email进行分类(不知道名字是否包含中文,还有名字和Email是对应的还是每个都是独立项)写到文件中,这样的话就会减少很多比较次数,有点像中英文字典的模式,最后在将文件导入到数据库中(不知道能否导入,呵呵,否则这么大的数据量,任何机器都处理不了的)。
------解决方案--------------------我专门做数据入库的,每次都是千万级数据,不过我用的是Oracle,最后总结一句话:
对于文件类型\XML型的原数据一定要论块解析入库.
------解决方案--------------------不过你要验证就有点麻烦了,看能不能建张临时表做,我以前遇到这个问题就是这么做的
------解决方案--------------------我也帮你顶下吧!哈哈。。
------解决方案--------------------俺也没做海量数据的入库处理,只能帮楼主顶一下喽,顺便也学习一下哈。
------解决方案--------------------不来灌水,新手一个!纯属支持!
我要跟大家多多学习一下啊!
------解决方案--------------------提个想法:分解为可以处理的多个部分,比如10W一组,分组比较确定重复的项,这样就可以避免内存溢出。
------解决方案--------------------厉害,努力学习中,帮顶!
------解决方案--------------------你能不能在导入数据库之前就把数据区分好了,然后再导入,否则这么大的数据量,有点悬。
------解决方案--------------------很强大,帮顶
------解决方案--------------------
------解决方案--------------------麻烦哦!5000w 不是个小数目哦,特别是还有重复的检测问题
1 用户名和Email 这2个必须做索引,否则在检测重复时会有问题,谁让你的数据源不同呢!这属于合并数据哦
2 使用批量insert 操作
3 使用生产者消费者模式,用多线程
4 不要用web方式,这东西肯定是客户端的应用程序
只能说到这里了。再细的就得你自己考虑了。总之,批量insert和多线程肯定能加快速度。
------解决方案--------------------写一个存储过程里再写游标,存储过程里写个数量判断的语句,一次设定插多少,在游标里写个Where语句做重复检测。
------解决方案--------------------一批批地传