到底是单线程单连接入库快还是多线程 单线程多连接入库快

查看: 1849|回复: 7
多线程处理数据,有过经验的朋友来看下(金融系统)
论坛徽章:1
本帖最后由 cxytz01 于
09:53 编辑
现有一业务系统,游标fetch数据,处理,处理完毕继续fetch,继续处理。都是单线程处理,大家都知道,程序中的数据库操作必定经过网络io,既然有io,就存在着阻塞。若fetch的数据表有千万条数据,则fetch千万次,经历过千万次io,千万次阻塞。又若处理过程中又有其他数据表操作,又得再加千万次io,千万次阻塞。
请问怎么使用多进\线程改善这样一个系统?目前公司的系统就是这样的pro*c单进程程序。
招聘 : 论坛徽章:13
多线程/多进程 应该是指的以把处理过程分成多个,然后同时执行。你可以翻翻Oracle 编程艺术的DIY 并行章节。
不过执行效率会不会更快还是要看你的硬件环境的。
论坛徽章:16
为何不用存储过程?
论坛徽章:13
如果数据 直接不存在关联性,就是不需要先计算出某些结果才能算后面的值,那么 直接用 存储过程, 使用并行,可以解决你的问题。 这个是并行是 并行读取/写入。
处理数据的过程还是 单进程的。如果要实现多进程处理,要么运行多个 存储过程,要么用 其他开发代码调用。
论坛徽章:9
LZ的问题本身就不明不白,
什么叫网络IO?为什么有IO就会有阻塞?
fetch 千万次为何就一定有千万次 IO?为什么加个表又得千万次阻塞??
你们公司这是什么系统???
论坛徽章:1
本帖最后由 cxytz01 于
10:30 编辑
mdkii 发表于
LZ的问题本身就不明不白,
什么叫网络IO?为什么有IO就会有阻塞?
fetch 千万次为何就一定有千万次 IO?为 ...
且不说网络IO,就说IO,所有IO函数都是调用库函数(库函数最终会调用系统调用),或者系统调用,系统调用执行,切入内核态,由内核处理io动作。接下来,分4种情形:
1.fd为阻塞fd,且有数据
& &内核将数据拷贝入软件空间,应用程序必须等待内核将数据拷贝完成,这个就是阻塞!
2.fd为阻塞fd,无数据
& &内核一直等待有数据,所以此时无论内核,还是应用层皆阻塞。直到有数据,进入上面的1步骤
3.fd为非阻塞fd,有数据
& &内核将数据拷贝入软件空间,应用层序依然必须等待内核将数据拷贝完成,这个仍然是阻塞!
4.fd为非阻塞fd,无数据
& &内核立刻返回
论坛徽章:1
gaolu1234 发表于
如果数据 直接不存在关联性,就是不需要先计算出某些结果才能算后面的值,那么 直接用 存储过程, 使用并行 ...
你好,fetch的是一张表,逐次去该表数据进行处理,处理完毕,直接更新该表的该条记录。所以如果多线程,会锁不?
即是取一条处理,处理完毕,然后更新该条记录,可否使用多线程。
论坛徽章:1
支持3楼,想提高效率可以改用存储过程。
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号豆丁微信公众号
君,已阅读到文档的结尾了呢~~
[异步单线程多进程架构]多线程vs多进程(分析、比较和建议)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[异步单线程多进程架构]多线程vs多进程(分析、比较和建议)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口8被浏览1,313分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答911被浏览140,233分享邀请回答10620 条评论分享收藏感谢收起476 条评论分享收藏感谢收起赞助商链接
需求:每天有一个非常大的XML文件过来,我需要将它解析入库,现在是单线程,性能不行,每天的文件处理不完,堆了很多
想法:我的想法是能不能把它拆分成多个小XML文件,然后交给多个线程去解析入库肯定比一个线程处理要快,问题是如果拆分?
请banq和各位高手给以建议或者提示一下如何解决这个需求?[该贴被thinkjava于 14:29修改过][该贴被thinkjava于 14:30修改过]
因为XML是有固定格式,这个非常大XML格式应该是你们双方都能知道其Schema的,如果是这样,你就用一个线程接受,一个线程分割,然后交给多个线程并发进一步解析,提取数据,再入库。你这个需求没有最终一致性要求,所以分割异步还是很方便的。
1、XML文件有多大?你如何读取XML文件的??不要使用DOM,用SAX。2、怎样导入db的??每条insert??要批量导入。3、现在的主流db都支持从XML文件中直接导入DB,不知道你是否考虑使用该功能。
多谢二位回复1.XML文件有40G,如果把入库逻辑改为打印到控制台,性能如下:1.1 StAX解析XML:秒/1.51G
40G/8小时1.2 SAX解析XML:第一次:903.196秒/1.51G
第二次:781.695秒/1.51G
第三次:792.517秒/1.51G
1.3 自己边拆分,边解析,拆分自己开发,解析使用DOM4J:.51G
40G/8小时,是目前采用的方案1.4 拆分自己开发,把解析打印交给多线程处理:秒/1.51G
这个就是banq说的一个线程分割,多线程解析入库思路2.现网上是500条入库,边拆分边解析入库,本地测试只打印到控制台3.要使用quartz每天定时触发处理XML文件,一天一个XML,超大,不单单是入库,入库只是为了保留源始数据,
我们还要拿这些数据去更新一些状态,不过更新这块是通过MDB做的,所以更新状态就不用考虑性能问题了,
只是从解析-》入库(测试只打印到控制台) 这段逻辑性能不够 你的意思是
手动导入DB吧
所以说我考虑现在的程序有可能是拆分性能不高,想问一下如何拆分性能高,或者说换一种思路解决此性能问题[该贴被xysniper于 13:32修改过]
那就是要分布式计算,一组计算机替代原来一个线程,这样性能会更快。看看Map/reduce算法是否符合你要求,是一种切分计算的算法。[该贴被banq于 13:44修改过]
赞助商链接
赞助商链接
最佳分辨率
OpenSource
Code & 2002-20

我要回帖

更多关于 单线程和多线程 的文章

 

随机推荐