程序员人生 网站导航

83. 从视图索引说Notes数据库(上)

栏目:互联网时间:2014-11-19 08:37:43

索引是http://www.wfuyu.com/db/系统重要的feature,不管是传统的关系型http://www.wfuyu.com/db/还是时髦的NoSQLhttp://www.wfuyu.com/db/,它攸关查询性能,因此在设计http://www.wfuyu.com/db/时需要细加考量。但是,Lotus Notes隐藏技术底层,以用户界面为导向,寻求快速开发的理念,使得“索引”鲜有开发人员提及,乃至了解。大家只论及视图,而当不同的人在不同的场合说“视图”时,所指各异。普通用户如果用视图1词,指的是显示1行行信息的列表;开发人员口里的视图,是http://www.wfuyu.com/db/里的1类设计元素。这类设计元素,依照Lotus Notes的风格,将视图层的设计与数据层的定义混合在1起,前者例如列的字体、色彩、宽度;后者包括选择文档,提取字段和计算列内容,定义排序、分类、总计等等。如果单纯斟酌Notes的http://www.wfuyu.com/db/部份,后者的数据定义才是有关主题的。

Notes利用程序常常在使用了1段时间后,也就是在http://www.wfuyu.com/db/变大,用户变多后,变得很慢。其中1个重要因素就是视图,打开利用程序、新建修改文档、履行代理都可能或明或暗地打开视图。这些时候,正是索引隐藏在视图背后影响着性能。

在主流开发所用的技术组合中,http://www.wfuyu.com/db/是独立的1块,开发人员需用与编写业务逻辑时所用的语言不同的专业知识来设计和定义数据,所以才会衍生出专精于此的http://www.wfuyu.com/db/管理员。在Lotus Notes利用程序中,http://www.wfuyu.com/db/、业务逻辑和用户界面的开发紧密耦合,在大公司里虽然也有人专职保护http://www.wfuyu.com/server/,部署和更新http://www.wfuyu.com/db/,但是他们1般不会检查http://www.wfuyu.com/db/的设计来优化性能。http://www.wfuyu.com/db/的性能是程序开发人员的份内之事,而实际上,若非经验丰富的http://www.wfuyu.com,利用程序慢到很多用户没法忍耐,性能在Noteshttp://www.wfuyu.com开发时,几近不会被斟酌。http://www.wfuyu.com/db/慢只会被归咎于文档太多、附件太大、Noteshttp://www.wfuyu.com/db/本来就如此。许多老http://www.wfuyu.com开发的利用程序里,同1类文档仅仅是为了分类顺序的不同就建了10来个视图,每一个视图10多210个列,67列为分类,其它几近全设置了排序。文档数量1旦增多,如此设计将严重影响性能,而在设计者眼里,只是为了方便用户并且是Notes便利性的证明。这样的视图设计和其功能滥用,固然责任不全在http://www.wfuyu.com身上,引导他们这样做的Notes的开发理念、帮助文档都难辞其咎。

说了这么长的开场白,现在就来讨论索引及其和利用程序性能的关系。先概括关系型http://www.wfuyu.com/db/里的索引的作用,以作为Notes视图索引的对比。简单地说,索引就是在大量数据中为了快速查询建立的从数据中某些有用的信息到这些信息所在位置的映照。字典前面的拼音和部首检字表就是索引,更形象的例子是国外很多图书的末尾都附有的索引,可以此查到重要的词语出现的页码。http://www.wfuyu.com/db/里的记录数量庞大,实际使用时又有找出符合各种各样条件的记录的需求。例如1个记录了1百万条人员信息的表,包括姓名、生日、性别、地址、电话号码等等信息。要从中找出姓赵的或电话号码是26538941的人,如果没有特别的帮助,http://www.wfuyu.com/db/系统只能逐行检查记录是不是符合条件,找到1条记录平均所需读取和检查记录的数量是N/2(N为记录的总数)。如果从记录中提取电话号码字段,排序,并且每条号码指向对应记录在表中的位置,就建成了1个索引。此时再要查询电话号码是26538941的人,只需对索引利用2分查询算法,工作量就会减少到log2(N)的级别,再加上从定位的索引行肯定和读取原始数据行的1次操作。另外,由于索引的每行数据比原始记录的每条要短很多,单次读取本身也更快。索引的负面影响则是空间和保护本钱。索引的数据本身要占据空间,这很好理解。原始记录更新(新增、修改和删除)时,索引自然也要随着更新。索引的更新可以选择与原始记录同时、定时或在用到索引也就是查询时再进行,但不管如何,与没有索引相比,都需要额外的计算。新增记录时,更新索引单纯是性能上的开消。修改和删除时,除非是对所有记录,否则都有选择条件,此时的索引正起到与查询时一样的帮助,而修改和删除后更新索引则是开消,由于前者的好处更大,所以合起来的效果1般对性能还是正面的(除非记录数量不大或索引数量过量)。

在《从视图索引说Noteshttp://www.wfuyu.com/db/(下)》里将接着详细讨论Notes视图索引。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐