如何提高应用程序的响应时间? 利用“缓存”(Cache)机制是众多主流软件采用的有效办法之一。Domino/Notes 作为业界知名的办公协作软件,同样提供了一套行之有效的缓存机制,本文旨在对 Domino/Notes 的缓存机制进行总括性的介绍,并指导开发人员在程序的开发设计阶段利用 Domino/Notes 的缓存机制更好的进行应用程序的结构设计和代码开发,提高应用程序的性能。
Notes/Domino 缓存机制概述
将常用的应用程序/数据存储在 Server 前端,用户工作机磁盘或者内存里,使用户得到更快的程序响应时间,我们称这一类程序/数据为缓存(Caching)。Domino 服务器(Server)端和 Notes 客户(Client)端均提供了强大的缓存机制。
合理的使用缓存机制是十分重要的。开发人员需要有效的控制“缓存哪些应用程序/数据”,“何时进行缓存”以及“何时更新缓存”。
本文主要介绍在 C/S 模式下 Notes/Domino 相应的缓存模式。在 B/S 下的缓存机制,笔者将在后续的文章中给予介绍。
Notes 客户端的缓存机制
我们经常会遇见这种情况,如果用 Notes 客户端首次访问某个 Notes 应用程序,并查看其中的一些文档。查看过第一个文档后,再查看其他同类型的文档,Notes 客户端打开文档的速度要明显加快。究其原因,Notes 客户端在打开第一个文档之后,已经将相应的表单缓存在了本地工作机磁盘,所以打开后续文档时客户端只需装载本地的缓存表单,这必然大幅度的提高应用程序的响应时间。
通常情况下,Notes客户端只能缓存某些设计元素,参见表 1。
能够被缓存的设计元素 | 表单,子表单,页面,祯结构,图象资源,视图,共享操作,脚本库等 |
不能够被缓存的设计元素 | 代理等 |
Notes 客户端将需要缓存的设计元素存储于 Notes 数据目录下的 Cache.ndk 里面。我们通过查看 Workspace 的属性可以看到其相关的设计,参见图 1。
默认情况下,Cache.ndk 存放于 Notes 的数据目录并且占有不大于 30Mb 的磁盘空间。同时,我们也可以通过 Notes.ini 里面的相关参数控制 Cache.ndk 的位置和大小。例如:
|
事实上,Cache.ndk 是一个标准的 Notes 数据库,可以用 Notes 客户端打开。所有被缓存的设计元素以文档的形式存储在 Cache.ndk 里面, 参见图 2。
缓存数据以队列顺序存储于 Cache.ndk 中,如果文件大小超过限额,前期最早的数据将被自动删除。
我们在设计应用程序的时候,为了有效利用 Notes 客户端的缓存机制,应遵循以下基本原则,特别是在网络带宽有限的情况下:
有效使用子表单(Subform)
在应用程序包括很多表单的情况下,将其共有的设计存储于子表单,可以有效的提高程序的性能。例如 Form A 和 Form B 都含有 Subform A, 如果 Notes 客户端在缓存了 Form A 之后,再缓存 Form B, 就可以忽略已经缓存的 Subform A。参见图 3。
这里要特别提到的是,在数据库只含有少数表单,数据罕有共用的情况下,我们是不提倡使用子表单的。基于 Domino 的顺序处理机制,对于一个含有子表单的表单来说,Notes 客户端先装载表单,再装载子表单,顺序访问同一层次的设计元素,相对于只使用一个表单的情况,这必然增加程序运行的时间。
有效使用脚本库(Script Library)
通常,我们将一些可能被重复用于视图操作、代理和表单等的公用代码写成脚本库。Notes 客户端能够对脚本库进行缓存。这样,Notes 客户端在缓存了一次脚本库后,相关的设计元素均可以对其在本地进行调用,进而有效的提高应用程序的性能。
我们采用 Use “Script Library Name”调用需要的脚本库, 例如,下图显示了如何在表单中使用脚本库. (该表单调用名称为 CSEventNotes 的脚本库)。 同样的脚本库可能在许多设计元素中被重复使用。参见图 4。
特别需要指出的是,相对于脚本库, 代理是不能被缓存到本地的。一般情况下,我们将那些不被经常使用的(用于验证或修改文档的)代码写进代理,程序可通过如下方式对代理进行调用:
|
通过上述公式,Notes 客户端实时的呼叫代理并在服务器端/客户端执行它。我们也同样可以用 Use 的方法在代理中调用 Script Libray。
Domino 服务器端的缓存机制
Domino 服务器能对数据库的设计元素、Profile 文档以及 Lookup 结果进行缓存。另外,Domino 服务器本身也可作为 Web 服务器,对 Web 页面和 Java Servlet 进行缓存。对服务器缓存的一些配置可以通过 Notes.ini 的相关参数。
|
此参数用于指定服务器端数据缓存池的大小,默认情况下,其大小为服务器物理内存的 1/8 到 3/8, 我们也可以根据内存的使用情况自己指定其大小(按字节),Domino 限制其不能超过 2GB. 建议对单服务器采用默认设置。对于分区服务器,可根据内存情况自行设置。
|
此参数用于指定服务器缓存池能并发处理的数据库数量。默认情况下,其最小值为 25。结合服务器内存大小,管理员可适当增加其数量,推荐至少 300k 缓存大小用于处理一个数据库。
缓存数据库设计元素
Domino 服务器将用户经常使用的数据库的设计元素缓存到内存里,便于用户的 Notes 客户端快速装载相关的设计元素。Domino 服务器与 Notes 客户端可缓存的设计元素类型基本相同。
需要说明的是,为了使应用程序在缓存区迅速定位数据库,Domino 服务器也将数据库的属性,视图信息等存储在缓存区。
缓存 Lookup 结果
Domino 有两个重要的 Lookup 公式:@dbcolumn和@dblookup.。一般情况下,我们推荐使用 Cache 将结果进行缓存,这样可以大大提高下次进行同样搜索的速度。我们来看一个例子:
|
对于 cache 参数,我们有以下三种选择
用户可以根据应用程序的需要对上述三种参数进行选择。当数据库被关闭时相应的 Lookup 结果缓存将被清空。
缓存 Profile 文档
Profile 文档用来存储一些用户特定信息或数据库特定信息,其功用与定义于 Notes.ini 里面的环境变量类似,但使用环境变量有如下缺点:
所以,相对于环境变量,由于 Profile 文档被保存于数据库中,没有上述限制,使用起来更加灵活有效。在性能上,访问 Profile 文档相当于访问普通的 Notes 文档。
对于一个数据库来说,可能包括多个 Profile 文档,例如,对每个用户使用一个 Profile 文档存储该用户特定信息(注:多用户不能共用一个 Profile 文档),或用单独一个 Profile 文档存储数据库相关信息。
通常,在打开数据库时,我们通过 PostOpen 事件调用 Profile 文档里的值,将 Profile 文挡缓存在服务器内存里,进而在后续应用中更好的使用 Profile 文档。当数据库被关闭或用户与服务器的会话终止后相应缓存将被清除。
关于 Profile 文档的基本介绍和设计开发方法,请读者查阅 Notes/Designer 的帮组文件,本文不再赘述。
了解了 Domino 服务器端的缓存机制后,在应用程序的设计开发阶段,我们应该有如下考虑:
结束语
如上所述,本文对 Notes 客户端和 Domino 服务器端的缓存机制给予了详细的介绍,读者在了解掌握的基础上,可以在应用程序的设计、开发甚至是使用阶段对缓存机制给予更好的利用,以优化程序的性能。特别是对大型的企业级应用,性能的优化是大有裨益的。
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |