Rpgle 分割键控文件,以实现多线程

Rpgle 分割键控文件,以实现多线程,rpgle,Rpgle,我之前在RRN的基础上做了多线程。 这一次,我的文件被设置了键(6个键),并定义为RPGLE程序中的Key seq。。。 因为有数百万条记录,所以需要将文件分成10个线程进行处理。。。。 不确定如何在密钥文件上实现拆分,而不是在RRN上。 请告知。 谢谢您真的必须按键处理吗 假设您无论如何都要处理整个过程,RRN对带密钥的文件和对未带密钥的文件一样有效 通过密钥访问文件 FDIVPODIT UF A E K DISK 通过RRN访问同一文件 FDIVPODIT UF A

我之前在RRN的基础上做了多线程。 这一次,我的文件被设置了键(6个键),并定义为RPGLE程序中的Key seq。。。 因为有数百万条记录,所以需要将文件分成10个线程进行处理。。。。 不确定如何在密钥文件上实现拆分,而不是在RRN上。 请告知。
谢谢

您真的必须按键处理吗

假设您无论如何都要处理整个过程,RRN对带密钥的文件和对未带密钥的文件一样有效

通过密钥访问文件

FDIVPODIT  UF A E           K DISK
通过RRN访问同一文件

FDIVPODIT  UF A E             DISK
你所需要做的就是离开K

如果您真的需要密钥访问,您必须检查密钥和子密钥的分布,并提出一些分割它们的算法

我的意思是,例如,如果第一个键是一个从1到10的数字,并且每个键都有大约相同数量的记录……那么分成10个线程是显而易见的

注意:即使文件有6个键,也不必全部使用,这两个键对同一个f-spec声明的文件同样有效

setll (ky1:ky2:k3:k4:k5) myfile;
setll (k1) myfile;
这种技术被称为“部分键”

另一个想法是,假设K3是一个从1到10的数字,同样有一组相等的记录。您可以简单地创建一个逻辑索引或SQL索引,其中K3是第一个(可能也是唯一的)键

如果没有关于子密钥分发的更多信息,我不能再多提建议了

最后请注意,SQL提供了count和distinct功能,可以帮助您分析密钥分发

select count(distinct ky1) from myfile
select ky1, count(*) from myfile
DSPFD
也可作为所示信息的一部分使用,包括:

Number of unique partial key values . . :                           
  Key field 1 . . . . . . . . . . . . . :                          1
  Key fields 1 - 2  . . . . . . . . . . :                      48876
  Key fields 1 - 3  . . . . . . . . . . :                  111861652

您真的必须按键处理它吗

假设您无论如何都要处理整个过程,RRN对带密钥的文件和对未带密钥的文件一样有效

通过密钥访问文件

FDIVPODIT  UF A E           K DISK
通过RRN访问同一文件

FDIVPODIT  UF A E             DISK
你所需要做的就是离开K

如果您真的需要密钥访问,您必须检查密钥和子密钥的分布,并提出一些分割它们的算法

我的意思是,例如,如果第一个键是一个从1到10的数字,并且每个键都有大约相同数量的记录……那么分成10个线程是显而易见的

注意:即使文件有6个键,也不必全部使用,这两个键对同一个f-spec声明的文件同样有效

setll (ky1:ky2:k3:k4:k5) myfile;
setll (k1) myfile;
这种技术被称为“部分键”

另一个想法是,假设K3是一个从1到10的数字,同样有一组相等的记录。您可以简单地创建一个逻辑索引或SQL索引,其中K3是第一个(可能也是唯一的)键

如果没有关于子密钥分发的更多信息,我不能再多提建议了

最后请注意,SQL提供了count和distinct功能,可以帮助您分析密钥分发

select count(distinct ky1) from myfile
select ky1, count(*) from myfile
DSPFD
也可作为所示信息的一部分使用,包括:

Number of unique partial key values . . :                           
  Key field 1 . . . . . . . . . . . . . :                          1
  Key fields 1 - 2  . . . . . . . . . . :                      48876
  Key fields 1 - 3  . . . . . . . . . . :                  111861652

它是定义为键控的旧程序和文件,有SETLL和READE。。。然后是陶氏。。。。。因为此文件具有运行ID,所以他们只想读取最新的运行ID数据…所以您只想处理最新的
运行ID
?您是否尝试过使用单个线程执行此操作,但最终导致性能不佳?你真的需要读多少记录?在一个
RunId
中是否有数百万?您是否有一个逻辑键由
RunID
?假设RunID是第一个键,那么第二个键中的值的分布是什么<代码>从mytable中选择count(distinct key2),其中runId='xx'您是否在更新记录中的任何类型的已处理标志?它是定义为键控的旧程序和文件,并且有SETLL和READE。。。然后是陶氏。。。。。因为此文件具有运行ID,所以他们只想读取最新的运行ID数据…所以您只想处理最新的
运行ID
?您是否尝试过使用单个线程执行此操作,但最终导致性能不佳?你真的需要读多少记录?在一个
RunId
中是否有数百万?您是否有一个逻辑键由
RunID
?假设RunID是第一个键,那么第二个键中的值的分布是什么<代码>从mytable中选择count(distinct key2),其中runId='xx'您是否正在更新记录中任何类型的已处理标志?