编程准则
IMS 请求程序问题的数量,类型和顺序会影响程序的效率。 如果对程序进行了正确编码,那么设计不正确的程序仍可运行。 IMS 将找不到您的设计错误。 以下建议将帮助您为应用程序开发最高效的设计。
当您具有为程序映射的一般调用序列时,请查看有关序列的准则以了解是否可以对其进行改进。 高效的请求序列会导致高效的内部 IMS 处理。 在编写程序时,请记住本 主题中说明的准则。 以下列表提供了编程准则,可帮助您编写高效且无错误的程序。
- 使用最简单的调用。 限定请求以缩小 IMS的搜索范围。
- 使用将为 IMS 提供所需段的最短路径的请求或请求序列。
- 使用尽可能少的请求。 每个 DL/I 调用程序问题都会使用系统时间和资源。 您可以通过以下方法消除不必要的调用:
- 在同一路径中替换,检索或插入多个段时使用路径请求。 如果使用多个请求来执行此操作,那么将发出不必要的请求。
- 更改序列,以便程序将该段保存在单独的 I/O 区域中,然后在随后需要该段的时候从该 I/O 区域获取该段。 如果程序在程序执行期间多次检索同一段,那么您将发出不必要的请求。
- 预测并消除不必要且非生产性的请求,例如生成 GB , GE 和 II 状态码的请求。 例如,如果要针对特定段类型发出
GN调用,并且您知道该段类型的出现次数,请不要发出导致 GE 状态码的GN。 跟踪程序检索的出现次数,然后在您知道已检索该段类型的所有出现次数时继续执行其他处理。 - 针对每个父代发出具有资格的插入请求,而不是向父代发出 Get 请求以确保它们存在。 如果 IMS 返回 GE 状态码,那么至少有一个父代不存在。 在插入段时,除非父段存在,否则无法插入从属段。
- 定期落实更新。 为确保最佳性能和系统稳定性,建议定期更新全功能数据库。
IMS 删除了以前将未提交更新的数据库数量限制为每次 300 个的限制。 不过,为了最大限度地降低竞争风险或潜在的资源问题,建议尽可能将未提交更新的数据库数量保持在 300 个数据库阈值以内。
- 将程序逻辑的主要部分放在一起。 例如,分支到条件例程 (例如程序的其他部分中的错误和打印例程) ,而不是围绕它们进行分支以继续正常处理。
- 使用能很好地利用数据的物理位置的调用序列。 尽可能频繁地访问层次结构序列中的分段,并避免在层次结构中向后移动。
- 按根段的关键字段的顺序处理数据库记录。 (对于 HDAM 和 PHDAM 数据库,此顺序取决于所使用的随机化例程。 请与 DBA 联系以获取此信息。)
- 避免以严重依赖数据库结构的方式构造程序的逻辑和命令或调用的结构。 根据层次结构的当前结构,会降低程序的灵活性。
- 最小化程序锁定的段数。 您可能需要使用检查点来释放更新段上的锁定以及程序使用的每个 PCB 的当前数据库记录上的锁定。 程序使用的每个 PCB 都将当前数据库记录锁定在共享或更新级别。 如果不再需要此锁定,请发出
GU调用 (在根级别使用 X'FF ' 键 (高值) 的大于运算符限定) ,以释放当前锁定而不获取新锁定。如果使用将高值放在数据库末尾并使用辅助索引的随机化器,请不要使用最小化技术。 如果在假定的高值键之外还有另一个根,那么 IMS 将返回 GE 以允许应用程序确定下一步。 辅助索引可能不起作用,因为分层结构已反转,虽然键已超过索引中的最后一个根,但它可能未超过数据库中的最后一个根。
使用带有获取 (G) 处理选项的 PCB 会导致在共享级别锁定 PCB。 这允许使用 get 处理选项的其他程序同时访问同一数据库记录。 将 PCB 与允许更新 (I , R 或 D) 的处理选项配合使用会导致在更新级别锁定 PCB。 这不允许任何其他程序同时访问同一数据库记录。