在 iUAP D I 中 提高读文本文件的性能
当 从 文本 文件读取数据时,有一系列的操作可能 是 性能瓶颈。具体 原因 可能 很多,为了 深入 调查 原因,首先要弄清楚读取文件都做了哪些事情 。
首先 ,读取文件的转换步骤要从磁盘中读取文件所在的数据块。如果 从 一个慢速的磁盘中读取,读取的性能 肯定 不高。另外 磁盘 的寻道时间也会影响磁盘的读取性能 。 如果 要求“ CSV 输入 ” 或 “ 文本输入 ” 频繁 读取较小的数据文件 或 读取较小的数据块,那么就会 花费 一定的磁头重定向时间。
当 文件读取数据后, DI 会把读取的字节转换成字符,这些字符就构成的文本或字符串,把 字节 转换成字符 使用 的编码必须和文件原来的编码相同 , 否则会乱码。 使用 不同的编码 方式 的转换效率是不同的,例如使用双字节 UTF-16 和 四字节的 UTF-32 是 非常占用 CPU 的。
在 获得字符后,就要把这些字符分割成不同的字段 。“ CSV 文件输入 ” 和 “文本 输入 ” 选用 格式是 CSV 时 ,会根据回车换行符读取每一行文本,然后把这行文本 按照 分隔符分割成若干字段。如果 “文本 输入 ” 的格式 使用的 Fixed ,则根据字符数 分割 字段。
最后 ,抽取的字段 要转化 成对应的数据类型,如 Date , Number 等 。日期 类型和数值类型的转换比较消耗 CPU 。
以上 这些 都依赖 计算机的处理性能,尤其是读取很多字段做数据类型转换时,通常消耗大量的 CPU 时间 。除此之外 ,还有 trim 操作,使用默认值替换空值等。
通过 以上分析读取文本的过程,可以从以下的 技巧 来加快 读取文本 文件的速度。
- 读取 文本 文件 时使用延迟转换
字符编码 和数据类型的转换导致的 CPU 消耗似乎是无法避免的 。 但在 一些 场合下, 使用“ CSV 输入 ” 的“延迟 转换 ” 选项 。 如下图 :
如果 选中 了该选项,所有关于数据相关的转换,如字符编码、数据类型转换、 trim 操作等,都会尽可能的延迟。输入 步骤 只是以二进制方式读取文件, 并 分成若干 字段 。
很明显,后面 的步骤如果 需要 读取 这些 字段数据 , 数据转换 还是会 进行 , 但在以下的情况使用延迟转换可以提高性能。
如果 大多数字段是以简单 地 以同样的格式写入另外一个 文本 文件 。
“ CSV 输入 ” 后 接 “Oracle 加载 ” 。 Oracle 加载 工具直接读取文本,使用 延迟 转换会 加快 生成临时文本文件的速度。
- 配置 NIO 的大小
“ NIO 缓存 大小 ” 这个 参数对性能 也有 影响 , 可以在 “CSV 输入 ” 中 设置该参数 。如下图 :
这个 参数 决定了从文件中一次读取数据块 大小 。没有 一个 明确的规则来指导该设置多大合适。如果 设置的 比较大,每次读取的 时间 过长,会影响 转换并发 。一般 来说 ,如果磁盘的缓存较大或寻道时间较短 , 可以把缓存设置 小些 ,这样的 运行 可能会快。
- 改变 文件位置
如果文件 存放在 FTP 或 Windows 网络共享上,则 文本 文件的读取 不仅 要依赖 远程 磁盘的读取速度还依赖网络的传输速度 。如果文本 文件读取 存在性能瓶颈可以考虑改变文件的存放文件位置,把文件存放到读取性能 较高 的磁盘上可以显著提高读取 文件 性能。
总之, 文本文件的读取的性能瓶颈 在磁盘 的读取和类型的转换上, 前者 依赖磁盘 IO 速度,后者依赖 CPU 速度。合理 设置 文件位置和 缓存 大小可以提高 读取 的 速度 。减少 不必要 的类型转换可以减少 CPU 消耗,提高读取文本速度。
Attachments:
在iUAP DI中提高读文本文件的性能.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)