这就是我一直在努力实现的目标。
我们正在放弃一个名为GO-Anywhere的供应商工具,该工具在触发选择查询后从DB2数据库读取数据创建文件将数据写入其中并将其拉出并将其拖到我们的ETL工具可以读取的机器上它
我已经能够在几乎同时实现GA所做的事情,在6.5GB文件上使用JSCH在5分钟内击败上述工具,并且动态地使用jaring un-jaring。这样可以缩短从早期的32分钟到现在的27分钟读取和写入文件的时间。
但是为了满足新的SLA要求,我们需要进一步缩短时间,将近一半的时间缩短到13分钟左右
为了实现上述目的,我已经能够直接读取.MBR文件,并在13分钟或更短时间内将其推送到Linux机器上,但此文件的格式不是明文。 我想知道如何使用Java或使用AS400命令将.MBR文件转换为纯文本格式而不触发SQL。
任何帮助表示感谢。
答案 0 :(得分:2)
您错误地认为IBM i上的“FILE”就像是Windows / Unix / Linux上的文件。
不是。
与IBM i中的每个其他对象类型一样,它是一个定义良好的接口的对象。
在* FILE对象的特定情况下,它是一个数据库表。 DB2 for i不是安装在操作系统顶部的附加DBMS; DB2 for i只是它们为集成到OS中的DBMS提供的名称。用户程序不能像在Windows / Unix / Linux上那样直接打开存储空间。您必须通过操作系统提供的接口。
有两个可用接口,记录级访问(RLA)或 SQL 。两者都可以在Java应用程序中使用。 RLA由com.ibm.as400.access.AS400File
类提供。 SQL访问由JDBC类提供。
SQL可能提供最佳性能,因为您使用RLA一次处理一组记录而不是一个。
查看与可用的JDBC properties相关的各种表现。
从性能角度来看,您的单个流程不太可能完全利用系统,即。 CPU使用率不会达到100%,磁盘活动也不会超过60-80%。
在这种情况下,最好的办法是将流程分解为多个流程。您需要某种方法将每个进程限制为一组选定的记录。可能是主键隔离。除非记录是主键顺序,否则这将增加一些开销。如果表没有删除记录,则使用RRN()按物理顺序隔离可能有效。但请注意,在较旧版本的操作系统上,使用RRN()需要进行全表扫描。
答案 1 :(得分:0)
猜测正在发生的事情是源表中有压缩的十进制字段,这些字段没有被您自己种植的读表方法解压缩。
有几种可能性。