免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5463 | 回复: 21

并发处理解决方案,程式实现 [复制链接]

论坛徽章:
0
发表于 2008-10-23 14:13 |显示全部楼层
最近我碰到一个问题,在对表进行处理。由于记录比较多。写了一个RPGLE来跑。结果发现要1个小时左右(几百万笔资料)。太耗费时间。我希望可以把对一个表的处理分成几段同时进行。意思是:当一个表被提交要处理时候,调用的RPGLE可以实现把资料表分成几个段,让程式同时对这几段进行处理。这样一来,耗费时间就少了。在400方面好像是有一个叫并发处理的功能。只是我没有接触过,不知道如何写。请各位朋友提供点资料或者在这里指点下。谢谢!

论坛徽章:
0
发表于 2008-10-23 17:21 |显示全部楼层

回复 #1 tianya0229 的帖子

只要能做到并行处理就好。按顺序来处理一个表。资料量多时就很麻烦。

论坛徽章:
0
发表于 2008-10-23 21:43 |显示全部楼层
个人建议如下:

1。如果没使用到RRN号,建议定期对PF文件做RGZPFM;

2。在RPG程序中使用BLOCK关键词提高读写文件速度;

RPG编程通常要与物理文件、逻辑文件等各类文件打交道。在RPG的F定义行里有一BLOCK关键词,善加使用这一关键词可以大幅度提高文件的读写速度。这在对具有大量数据的文件进行批处理时,效果特别明显。使用方法如下:

文件描述规范里有一BLOCK(*YES|*NO)关键词。它控制着文件的块读写方式。该关键词只对DISK或SEQ类型的文件有效。我们常见的物理文件(PF)或逻辑文件(LF)就是DISK文件。

在缺省情况下,即F行关键词位置没有定义BLOCK时,在编译RPG程序时,对于输入记录,BLOCK缺省值为*NO,即文件不会以块的方式读入;对于输出记录,BLOCK缺省直为*YES。但上面编译缺省值需要先符合下面条件:

(1) 文件是程序描述文件(program-described)。
(2) 文件如果是外部描述文件(externally-described),则文件应只有一个记录格式(Record Format)。
(3) 在文件规范描述里(F行),不能使用RECNO关键词。

如果要使文件输入记录以块方式(BLOCK)读入,则F行必须指定BLOCK关键词,并赋值为*YES, 比如,下面定义了一外部描述的DISK类型的文件,其读入方式采用BLOCK方式:

FMYPF    IF   E         DISK   BLOCK(*YES)

论坛徽章:
0
发表于 2008-10-23 22:09 |显示全部楼层

回复 #3 qingzhou 的帖子

我现在要做的是把一个表的数据备份到另一个表中。原表记录备份过去后就删除。备份1笔删除1笔。不过这样,程式走的很慢。资料几百W笔。
你说的是以块方式来处理记录。那具体在程式上只要定义FMYPF    IF   E         DISK   BLOCK(*YES)。在C-REF中不用其它操作码来执行或配合吗?还不大明白具体的作法。能说个例子吗?
我这情况不适合做RGZPFM。因为资料每天都在利用。并且每天都要大笔资料进来表里。

论坛徽章:
0
发表于 2008-10-24 00:03 |显示全部楼层
备1笔删1笔?不明白这样处理的用意。如果想做历史数据归档,为啥不直接使用:

===> CPYF FROMFILE(LIB/PF) TOFILE(NEWLIB/NEWPF) MBROPT(*REPLACE) CRTFILE(*NO) FMTOPT(*MAP *DROP)                                                               

开始还以为利用RPG复杂计算处理一个庞大的PF文件。

论坛徽章:
0
发表于 2008-10-24 08:40 |显示全部楼层

回复 #5 qingzhou 的帖子

因为其中涉及到很多判断条件。不是整个表备份。是把需要的,如时间方面的限制,其他业务上的类型限制等多方面条件下,才能备份。所以才写了一个RPG。
你以上说的以块方式来处理记录。感觉效率明显吗?对于几百W笔资料都需要READ的时候。符合条件的才进行写,删操作。你有这方面的例子吗?

论坛徽章:
0
发表于 2008-10-24 08:45 |显示全部楼层
找个空闲的字段做个标记,然后定期一次删除.

论坛徽章:
0
发表于 2008-10-24 09:09 |显示全部楼层
先用CPYF过去,再最新的PF进行数据删除和维护,这样不可以吗?

论坛徽章:
0
发表于 2008-10-24 09:47 |显示全部楼层
不能1次性删除。每天都有资料进来。每天都要做清理及备份。其中涉及到资料的筛选。所以LS两位朋友的方面在我这不大适合。谢谢!

论坛徽章:
0
发表于 2008-10-24 10:10 |显示全部楼层
选择性的 CPYF也不行么?

把符合条件的用CPYF出来。把指令写进CL里边就行啦。然后再做个计划调用,不就是每次都能找到么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP