使用Java将AS400 .MBR文件读取到平面文件

时间:2016-07-28 01:27:32

标签: java ibm-midrange

这就是我一直在努力实现的目标。

我们正在放弃一个名为GO-Anywhere的供应商工具,该工具在触发选择查询后从DB2数据库读取数据创建文件将数据写入其中并将其拉出并将其拖到我们的ETL工具可以读取的机器上它

我已经能够在几乎同时实现GA所做的事情,在6.5GB文件上使用JSCH在5分钟内击败上述工具,并且动态地使用jaring un-jaring。这样可以缩短从早期的32分钟到现在的27分钟读取和写入文件的时间。

但是为了满足新的SLA要求,我们需要进一步缩短时间,将近一半的时间缩短到13分钟左右

为了实现上述目的,我已经能够直接读取.MBR文件,并在13分钟或更短时间内将其推送到Linux机器上,但此文件的格式不是明文。 我想知道如何使用Java或使用AS400命令将.MBR文件转换为纯文本格式而不触发SQL。

任何帮助表示感谢。

2 个答案:

答案 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)

猜测正在发生的事情是源表中有压缩的十进制字段,这些字段没有被您自己种植的读表方法解压缩。

有几种可能性。

  1. 让IBM i团队在源表上创建一个包含所有数字列的视图。另外,省略ETL不需要的列 - 它将通过不必移动这些字节来减少I / O.执行提取。注意:系统上可能已存在此类视图。
  2. 让IBM i团队构建适当的索引。通常,使用适当的索引可以缓解SQL瓶颈。
  3. 不要ZIP和UNZIP;将原始文件发送到另一个系统。即使在6GB,千兆以太网也可轻松应对。
  4. 在ETL系统上加载ODBC驱动程序,让它直接读取源表(或相应的视图),而不是将副本发送到ETL系统。
  5. SLA的时间限制来自哪里?如果SLA说'亚秒响应时间'你会怎么做?在某些时候,SLA需要反映物理定律所定义的某种现实版本。我并不是说你达到了这个限度:我说你需要找到它的基本原理。
  6. 让IBM i团队确保他们是最新补丁(PTF)。 IBM经常通过PTF解决性能问题。
  7. 让IBM i团队确保运行作业的子系统有足够的内存。