需求描述:现在有一张mysql数据表,数据量在1000万左右,需要增加一个字段,字段的值通过一个程序去生成.
存在问题:如果直接去遍历数据表,再通过程序一条记录、一条记录去生成该字段的值,估计得1、2天时间,如果采用多进程的话,我的想法是一个进程1处理0-100万这一个期间段的数据,进程2处理100-200万期间段数据,进程10处理900-1000万期间段数据,这样是否能显著地提高数据生成速度,数据库本身是否会堵塞,亦或采用多线程去处理?采用多线程处理有何优势?麻烦热心的朋友帮我解答一下。
存在问题:如果直接去遍历数据表,再通过程序一条记录、一条记录去生成该字段的值,估计得1、2天时间,如果采用多进程的话,我的想法是一个进程1处理0-100万这一个期间段的数据,进程2处理100-200万期间段数据,进程10处理900-1000万期间段数据,这样是否能显著地提高数据生成速度,数据库本身是否会堵塞,亦或采用多线程去处理?采用多线程处理有何优势?麻烦热心的朋友帮我解答一下。
解决方案 »
- 微博【转发有奖】的原理,求真相
- 使用Apache DbUtils的一个问题,没有找到该方法。
- 如何设计新闻分篇显示?
- JS里的一个函数里执行ACTION和取得ACTION执行后的值
- [求助]在Bean中输出html问题(我找到方法了,不过出了点问题)
- 请教如何将网页右键的“查看源代码”的查看器设为ultraedit
- 高手请进:用ant编译struts应用时的错误.如果问题太简单,请莫笑
- 求救,jsp中html页面转化的传值问题
- 关于servlet传一个对象到jsp的问题(在线等待)
- 急,请帮助,是关于outlook和foxmail的中文问题
- 验证用户名是否存在的问题
- 再加20分!!!------
mysql更新正常每分钟20万左右.我说正常是指被更新的字段是常规的,不能说是blob这样的大对象.
1000万记录一小时基本搞定.前提是记录本身应该有可以做为条件的索引.update tb set xx = xx where colname = xx;
这个colname应该有索引,否则光在1000万条中定位记录本身就慢死了.最好不要用多线程,因为你现在并不是阻塞在运算上,而是阻塞在程序和数据数据库之间通讯的IO上.
多线程也还是那点通讯能力.就是要用批操作,200到500次一个提交.
嗯,update的条件是索引字段,我也觉得瓶颈是在程序怀数据库之间的通讯上,
做批量处理的,200~500一个提交,这里的确良200~500是根据什么算出的经验值,如果我设置为1000、10000呢?
帮我解答一下,马上揭贴了 :)