构建高性能的 Lotus Domino 应用(2)

构建高性能的 Lotus Domino 应用,第 2 部分:Domino 应用开发中的性能考虑与最佳实践

简介: 本系列文章围绕如何构建一个高性能的 Domino 应用为主题,分四篇文章系统地阐述 Domino 应用开发、测试、部署及监控过程中对于性能方面的各种考量,包含开发最佳实践、压力测试方法及系统调优等各个方面。

简介

IBM Lotus Domino 提供了完整的快速开发、部署和管理平台,帮助我们快速开发基于业务逻辑的 Domino 应用。Domino 提供的全面的协作支持、丰富的开发功能和强大的 Domino API 以及与 WEB 标准的紧密集成,使 Domino 应用能胜任企业信息发布、企业流程审批、业务跟踪、企业管理等各类应用。

本系列文章围绕如何构建一个高性能的 Domino 应用为主题,分四篇文章系统地阐述 Domino 应用开发、测试、部署及监控过程中对于性能方面的各种考量,包含开发最佳实践、压力测试方法及系统调优等各个方面。 本 系列文章分为四部分:

定制 Domino 工作负载 (Server.Load) 脚本测试你的 Domino 应用Domino 应用开发中的性能考虑与最佳实践通过 Domino 配置来提升你的 Domino 应用性能Domino 应用性能监控

本文是系列文章的第二部分。系列文章的第一部分讨论了如果通过定制 Domino 工作负载脚本来执行对特定 Domino 应用的性能测试,并浅析了性能瓶颈分析与性能优化方法。 本文将从 Domino 应用的开发人员角度出发,讨论在 Domino 应用开发过程中 Domino 应用开发应该遵循的一些性能考虑、常见的性能问题以及一些最佳实践。

在实际的应用开发过程中,一个 Domino 应用的设计和实现将涉及 Domino 数据库设计、表单设计、视图设计、大纲和导航器设计、页面和帧结构设计、代理设计、公式与脚本编程等各个 Domino 技术。如何在设计时从性能角度对应用进行评估,如何在实现时避免性能瓶颈,如何实现一个高性能的 Domino 应用将关系到应用的稳定性以及整体的成本。

在 Domino 应用开发过程、单元测试和功能测试过程中,通常并不能发现明显的性能瓶颈。这是因为系统环境缺少必要的大容量的测试数据以及一定的测试压力,所以我们需要性能测试工具来进行压力测试从而发现性能瓶颈。 如果开发人员能预先了解 Domino 应用中常见的性能陷阱和性能最佳实践,就能在开发阶段选择性能最优的实现,从而避免在后期的性能测试才会被暴露的性能瓶颈。这将大大降低应用的开发和维护成本。

参与4

3同行回答

表单设计的性能考虑表单是 Domino 应用的核心组件之一,表单是一种提供给用户的程序框架,允许用户创建保存应用数据的文档,表单包含显示数据、文字及图片的域,还包括操作和自启动的热点、弹出框等。 不合理的表单设计会影响到 Lotus Notes 客户端的使用性能。具体可以参见 参...显示全部

表单设计的性能考虑

表单是 Domino 应用的核心组件之一,表单是一种提供给用户的程序框架,允许用户创建保存应用数据的文档,表单包含显示数据、文字及图片的域,还包括操作和自启动的热点、弹出框等。 不合理的表单设计会影响到 Lotus Notes 客户端的使用性能。具体可以参见 参考资源中的英文资料:Performance basics for IBM Lotus Notes developers。

LotusScript 和公式的性能考虑

LotusScript 和公式是 Lotus Domino 提供的一个完整的编程接口。LotusScript 是以讹完全面向对象的程序设计语言,Domino 提供了丰富的类、方法和属性,是一种与 Basic 兼容的程序设计语言。 公式语言包含完整的语法规则,提供了丰富的命令和函数,可以进行运算与逻辑控制。对于 LotusScript 和公式的使用,具体可以参见 参考资源中的英文资料:Fomula Language  和 Fomula Laguage。

这里我们讨论在 LotusScript 和公式中中一些常见的性能考虑:

表达式中 @ 公式的调用次数对性能的影响:大部分 @ 公式函数的性能都是很好的,需要注意的是它们的调用次数。前面视图设计中的举例也提到了由于数据库的文档数逐步增加而带来的视图更新运算量的增加。同样,如果在视图选择公式和列公式中包含了重复的公式调用将增加总的运算量。所以需要优化公式表达式来尽可能的降低 @ 公式函数调用次数。需要注意的一些对性能很有影响的 @ 公式函数和参数:不要在视图的列和选择公式中使用 @Now 和 @Today: 这会导致每次访问视图的时候强制刷新该视图索引。 一个建议的替代是使用:@TextToTime(“Today”)。具体可参见 参考资源中的英文资料:Time/Date views in Notes: What are the options?使用 @AllDescendants 替换 @Responeses:两个函数提供类似的功能,但 @AllDescendants 有更好的性能表现。正确使用 cache 参数:在 @DbColumn,@DBLookup 等公式中可以设置参数 cache 为“Cache”、 “NoCache”或者“ReCache”。“Cache”是默认设置,它在第一次查询时缓存结果,并在接下来的 Domino 会话期间重用缓存结果,使用"ReCache"可以更新缓存结果。“NoCache”确保每次查询都直接来自于数据库。"ReCache"将刷新缓存结果。正确使用 cache 参数能很好的提升性能,对于稳定的数据可以使用“Cache”参数,并且不要过度使用“NoCahe”。

代理的性能考虑

代理是存储在数据库中的一种设计元素,代理可以由用户手动或者在某些事件或者某个时刻自动运行,在后台自动处理 Dominode 的许多任务。代理可以包含 Domino 简单操作、LotusScript 程序或者 @ 函数公式。在 Domino 应用设计和开发过程中,同样需要注意代理对于服务器性能的影响。

代理的触发:根据应用的需求,合理的设置各个代理的日程安排。建议使用间断性的代理执行,尽量避免由事件触发。例如如果将一个代理设置成在“收到邮件前”触发,这将大大降低邮件路由的性能。如果 Domino 应用的使用者来自于不同时区,在安排代理的日程时需要考虑不同时差用户的影响。代理的执行效率:可以参考前面提到的对于 LotusScript 和公式的性能建议来提高代理的执行效率。如果代理中需要判断一个文档是否被修改,建议使用对文档进行 HASH 值计算来进行比较。代理的 Notes.ini 参数设置:NotesDatabase.Delayupdates=True这个参数设置的作用是: 当文档在代理中被更新时,暂停视图刷新。 因为在代理中通常会出现批量修改、更新大量的文档,这个参数设置可以避免由此引起的重复视图刷新。

当发现某个代理的执行会引起性能问题时,可以使用代理剖析功能 (Agent Profiler) 对该代理进行执行过程剖析并进行优化。 首先,需要启用代理剖析功能,然后在下次执行过程中将对该代理进行剖析,最后可以用 Domino Designer 查看剖析结果并进行分析与代码优化。

启用:在代理属性设置页的选项设置中,选中 “概述此代理”。

图 3. Domino Designer 中设置概述此代理选项

执行:在下次代理执行过程中将执行代理剖析,其结果会存储在当前数据库中。分析:在 Domino Designer 中选择该代理,选择菜单 代理 - 查看剖析结果 可以显示剖析结果。

Domino 应用开发性能最佳实践

上面我们讨论了在不同的层次对于 Domino 服务器性能的考量,这里例举一些在 Domino 应用开发中的性能最佳实践:

选择合适的 Domino API对于一个功能实现,Domino API 可能提供了多个接口可供调用 , 在选择时应考虑其不同的性能影响并选择性能好的接口。在选择调用参数也要参考其对于性能的影响。视图访问还是文档访问?当需要访问数据库得到特定值时,我们可以选择打开一个视图来读取其中的列值,也可以选择直接打开 Note 文档来读去某一个域值。 从性能角度出发,视图读取的性能优于文档读取。对比与文档,视图存储了经过公式计算的批量数据并且有较少的磁盘 I/O 操作,所以在设计时应该合理的定义视图并在应用实现中尽可能使用视图操作。文档数量和归档对于实际部署的 Domino 应用,文档数量的逐步增长将影响到服务器的性能。了解数据库文档的增长速度和总数预期并实施合适的文档归档策略将能有效的确保应用的高性能。Domino 缓存机制合理的利用 Domino 提供的不同层次的缓存机制能有效的提升应用的性能,具体参见 参考资料


总结

作为系列文章的第二篇,本文从 Domino 应用设计与开发角度阐述了在不同层次上的性能考量。在设计和开发过程中对应用性能有持续的考虑与实现优化并避免明显的性能问题,将在最大程度上提升服务器性能并节省总体应用成本。


收起
2012-03-07
浏览862
视图设计的性能考虑Domino 视图设计是性能考虑中的重中之重,Domino 视图设计的不合理或者性能陷阱会对服务器性能产生很大的影响 , 其中最大的开销来自于对于视图的索引更新。首先,我们举例来了解一个视图刷新所带来的计算量:假设一个列的公式包含 10 个步骤的运算假设数据...显示全部

视图设计的性能考虑

Domino 视图设计是性能考虑中的重中之重,Domino 视图设计的不合理或者性能陷阱会对服务器性能产生很大的影响 , 其中最大的开销来自于对于视图的索引更新。首先,我们举例来了解一个视图刷新所带来的计算量:

假设一个列的公式包含 10 个步骤的运算假设数据库包含 100,100 个文档

那么,单单更新这个视图中的这个列,Domino 服务器就需要运算 100 万次才能完成。如果这个视图有 10 个列,那么整个视图更新将需要 1000 万次运算。 所以在视图设计中我们我们需要注意:

磁盘 I/O 依赖 :视图索引更新对磁盘 I/O 有很大依赖,会加剧磁盘 I/O 竞争。视图更新运算量会随着文档数而增长 :视图设计所引起的性能问题会随着数据库数据容量的增长而逐步显现,在开发和功能测试阶段很难被发现。在上面的例子,如果数据库只包含 100 个文档时很难注意到这个列更新所带来的运算量。视图中不要定义冗余的列 :多余的列在视图更新时会带来额外的运算优化列公式此处的优化可以带来很大的性能提升。在上面的例子,如果简化公式到 5 个步骤,则运算量将降到 50 万次。视图列排序 :在列属性中选择允许“排序”将增加视图索引的内容并在视图更新时带来更大的计算量。只在需要排序的列设置“排序”属性将降低视图更新的计算量。

图 2. 视图中列的排序设置属性页

控制视图的数量 :当数据库内容被更新后,视图的选择公式将被执行以确定视图索引是否需要更新。收起
2012-03-07
浏览832
Domino 应用的性能考虑接下来针对 Domino 应用设计和实现的几个关键技术来讨论其相应的性能考虑数据库设计的性能考虑存储优化:启用 Lotus Domino 附件和对象服务(Domino Attachment and Object Service,DAOS) Lotus Domino 8.5 推出的附件和对象服务(DAOS)是一种全新的附件存...显示全部

Domino 应用的性能考虑

接下来针对 Domino 应用设计和实现的几个关键技术来讨论其相应的性能考虑

数据库设计的性能考虑

存储优化:启用 Lotus Domino 附件和对象服务(Domino Attachment and Object Service,DAOS) Lotus Domino 8.5 推出的附件和对象服务(DAOS)是一种全新的附件存储方式。Lotus Domino 服务器使用 DAOS 在文件级别上节省了大量空间,它在同一个服务器上的数据库(应用程序)之间共享被标记为相等的数据。DAOS 的启用极大的减少了对磁盘 I/O 的读写操作,从而提高了 Domino 服务器的性能。同时,DAOS 的启用降低了附件的存储空间及服务器成本。 对于 DAOS 的启用和配置,可参考 InfoCenter ( 添加引用)和 dw 文章(添加引用).数据库属性优化:Domino 数据库提供了非常丰富的可定制性配置,可以在数据库选项页进行设置。很好的理解各个应用的需求并进行合理的选项设置能有效的提高数据的性能。 这里列举一些主要的性能相关的选项,具体可参见 参考资料中英文资料 Properties that improve database performance。不保留未读标记默认不选择。若选中该选项,Domino 将不维护该数据库的未读文档视图。如果应用不需要未读标记,建议选择该选项。优化文档表格映射默认不选择。若选中该选项,可优化视图索引性能。保留 LastAccessed 属性默认不选择。若选中该选项,Domino 服务器将维护额外信息而对性能产生一定影响。禁用事物记录默认不选择。事务日志记录所有数据库修改并记录到一个事物日志用于数据库恢复 , 若选中该选项则会停止事务日志而提高服务器性能。不允许简单搜索默认不选择。这是 Domino 8.0 上的新功能,若选中该选项则 DbSearch 将被禁止并返回错误信息,它阻止了由数据库建立全文索引而带来的性能下降。限制 $UpdatedBy, $Revisions 域的输入项默认设置为 0。每个数据库文档都有 $UpdatedBy 和 $Revisions 字段用户存储文档相应的用户、修改时间信息。数据库维护相应的字段列表。设置合适的值可以降低视图更新时的计算开销而提高性能。列表到达上限时,采用先进先出(FIFO)方式丢弃最先存储的数据。 一个建议的设置值是 10。

图 1. Domino 数据库属性设置

收起
2012-03-07
浏览823

提问者

擅长领域: portal中间件服务器

相关问题

相关资料

问题状态

  • 发布时间:2012-03-07
  • 关注会员:1 人
  • 问题浏览:3031
  • 最近回答:2012-03-07
  • X社区推广