第五十章 开发Productions - ObjectScript Productions - 高效处理批量记录
高效处理批量记录
RecordMap
功能一次导入一条记录,但如果正在导入或导出大量记录,则可以通过使用 RecordMap Batch
获得显着的效率提升。 RecordMap Batch
功能处理同类记录并一次处理一批中的所有记录。可以选择在批次之前加上一个标题记录,然后跟一个尾部记录。
要创建 RecordMap
批处理,需要实现一个继承自中的 %Persistent
和 EnsLib.RecordMap.Batch
的类。 Batch
类包含处理解析和写出与特定批次关联的任何标头和尾部的方法。必须提供解析和编写标头的代码。对于简单的表头和表尾,可以使用类中的 EnsLib.RecordMap.SimpleBatch
,它继承自 Batch
类,并提供处理简单表头和表尾的代码。如果需要处理更复杂的标头和尾数据,可以扩展这两个批处理实现中的任何一个。
批处理遵循用于其他production
消息格式(如 X12
)的方法。这与处理 RecordMap
批处理对象的内置业务操作特别相关:这些业务操作接受 Batch
对象或扩展 EnsLib.RecordMap.Base
的 RecordMap
对象,或 BatchRolloverRequest
类型的请求。当接收到特定批次中的记录时,将打开批次并将批次标头写入临时文件,然后是该操作接收到的该批次中的对象。如果请求是同步的,类名、Id
和先前为该批次写入的记录数将在 EnsLib.RecordMap.BatchResponse
中返回。批处理对象(可能是默认批处理)的接收将触发将批处理尾部写入临时文件,然后此文件将由适配器发送到所需的目的地以进行业务操作。如果一个 Batch
对象被自己接收,那么整个 Batch
将被写出到一个临时文件中,然后该文件将被传输到所需的位置。
重要提示:如果在此过程中启用了 ArchiveIO
,则入站流的副本将保存在命名空间的临时流位置(默认位置为 <install-dir>/mgr/GLOBAL_DB_DIRECTORY/stream/
)这些流将自动清除,不应手动删除。
批处理操作还支持默认批处理选项,借此将不属于某个批处理的记录添加到默认批处理中。可以通过将批处理对象发送到操作或将 BatchRolloverRequest
发送到操作来触发此批处理的输出。还可以将业务操作配置为对默认批次使用基于计划或基于计数的滚动更新。这些选项是在业务操作上配置的,可以同时使用。
服务选项主要涉及 Visual Trace
在批处理中显示消息的方式。
RecordMap Batch
操作在生成最终输出文件的过程中创建临时文件。可以通过指定 RecordMap Batch
操作的 IntermediateFilePath
设置来控制这些临时文件的位置。如果正在镜像命名空间的数据库,重要的是所有镜像成员都可以访问临时文件,以便在 RecordMap Batch
操作期间成功进行故障转移。
重要提示:RecordMap Batch
消息使用一对多关系来保存记录,这使得遍历所有记录并执行所需的转换变得非常容易。但是,该进程可能会消耗足够的内存,可能会收到 <STORE>
错误。可能需要增加进程的内存,或者拆分输入文件,或者实现使用 SQL 而不是一对多关系的自定义转换。
网友评论