• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

散分兼请问:多线程数据库编程,运行时间不理想,请,多谢

mysql 搞代码 7年前 (2018-06-01) 239次浏览 已收录 0个评论

散分兼请教:多线程数据库编程,运行时间不理想,请高手指点,谢谢
由于需要向数据库中导入数据,使用了mysql数据库,不使用trigger的时间只需要3秒钟就可以导入2,3条记录,但是由于需要做些统计信息,所以需要大约70多秒,这个时间也是可以接受的。
但是现在存在的问题是:数据库里面有20个table,每个table分别从各自对应的一个文件(也就是说有20个文件)中导入,而且trigger的操作都是相同的,在这些操作中只与该表格自身有关,与其他表格没有关系。所以采用了20个线程,每个线程使用自己的一个数据库链接,分别导入数据。但是实际运行效果发现大约需要3分钟。这个时间难以接受,因为要争取实时处理。
其中有些table是很小的,不到1万条数据的大约有14个,2万到3万的有3个,1万到2万的有3个.
另外,每个table没有指定type,不知道是否与这个有关?
数据库连接应该没有问题,都是成功的。
我查看了一下系统管理(linux下top),发现程序运行时,CPU占用了大约20%,然后比较耗费内存的进程是:migration/x,   其中x从0到3,不知道是否是这个有关?
或许是数据库不能同时和20个线程交互?但是插入记录的时间各个表格是互不相关的。
不知道问题出现在哪里?还请高手指点一下,谢谢。

——解决方案——————–
如果没有指定表的type,默认应该是myisam表。这种表的导入可以使用load data infile 语法,导入数据是相当的快啊。但前提是文件中的内容格式要与load data infile语法相兼容。楼主可以试一试
——解决方案——————–
如果触发器中的语句很耗时的话,20个线程一起执行耗时的语句,能快得了嘛?建议你修改应用层的策略
——解决方案——————–
trigger有问题,我觉得你先把数据到进取,看看花多长时间,导完之后,然后使用sql语句处理trigger的业务逻辑,因为trigger是插入一条记录就会执行业务逻辑,如果记录数很多,这样的业务逻辑要执行很多次,还不如全部load完之后,统一处理一下trigger的业务逻辑。当然,这样降低了数据的时时性。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:散分兼请问:多线程数据库编程,运行时间不理想,请,多谢
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址