毕业设计(论文)-基于缓存思想的图书馆管理系统的研究与实现.doc_第1页
毕业设计(论文)-基于缓存思想的图书馆管理系统的研究与实现.doc_第2页
毕业设计(论文)-基于缓存思想的图书馆管理系统的研究与实现.doc_第3页
毕业设计(论文)-基于缓存思想的图书馆管理系统的研究与实现.doc_第4页
毕业设计(论文)-基于缓存思想的图书馆管理系统的研究与实现.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)考核评议书 毕 业 设 计(论文)题 目 基于缓存思想的图书馆管理系统 的研究与实现 电信学 院 计算机 系 班学 生 指导教师 设计所在单位 计算机系网络所 二0一二年六月V毕业设计(论文)任务书系 ( 所 ) 系 (所) 主任 批 准 日 期 毕业设计(论文)任务书 电信学 院 计算机 系 班 学生 毕业设计(论文)课题 基于缓存思想的图书馆管理系统的研究与实现 毕业设计(论文)工作自 2012 年 3 月 01 日起至 2012 年 6 月 10 日止毕业设计(论文)进行地点: 西安交通大学 课题的背景、意义及培养目标 学生采用C/S模式和缓存思想,图书馆管理应当具有图书资料管理、读者管理、借阅管理等多 种功能。通过单独完成一套模型的研究,设计和开发使学生熟悉并掌握所学的计算机知识,并得到 综合的锻炼。 设计(论文)的原始数据与资料 1软件工程 2 数据库原理 3 网络原理 4 JAVA编程语言 课题的主要任务 客户端及服务器端的开发与设计 数据缓存层的设计 JAVA语言的应用 课题的基本要求(工程设计类题应有技术经济分析要求) 完成课题要求 掌握C/S架构的设计与开发 掌握缓存思想的应用 掌握JAVA编程语言 完成任务后提交的书面材料要求(图纸规格、数量,论文字数,外文翻译字数等) 论文(15000字以上) 外文翻译(2000-3000字) 相关代码包 主要参考文献 中国计算机报 计算机世界 数字图书馆读者管理与个性化服务模型构建 缓存技术在管理信息系统中的应用研究 基于C/S结构的图书管理系统设计与实现 指导教师 接受设计(论文)任务日期 (注:由指导教师填写) 学生签名: 毕业设计(论文)考核评议书西 安 交 通 大 学毕业设计(论文)考核评议书 院 系(专业) 班级 指导教师对学生 所完成的课题为 的毕业设计(论文)进行的情况,完成的质量及评分的意见: 指导教师 年 月 日 毕业设计(论文)评审意见书 评审意见: 评阅人 职称 年 月 日 毕业设计(论文)答辩结果 院 系(专业) 毕业设计(论文)答辩组对学生 所完成的课题为 的毕业设计(论文)经过答辩,其意见为 并确定成绩为 毕业设计(论文)答辩组负责人 答辩组成员 年 月 日摘 要论文题目:基于缓存思想的图书馆管理系统的研究与实现学生姓名:指导教师:摘 要为了使图书管理工作规范化、系统化,提高信息处理的速度和准确性,就有必要建立一个高效的图书管理系统。由于目前数据库系统容量不断膨胀,网络带宽逐渐拥挤,导致系统性能降低,检索速度减慢,给用户的使用带来不便。为了适应现代化的环境,本次设计将在图书馆管理系统的基础上增加缓存,使图书管理系统能够快速、高效的实施管理功能。本系统基于易用、美观的原则为用户定制了一套统一的人机界面。该系统基于JAVA平台开发研制,采用SQLSERVER数据库作为后台数据存储设计。该系统设计了基本数据维护、新书购买、借阅管理、系统维护这四个模块,这些模块包括了图书管理的所有服务工作,可以全面实现对图书的编目、检索、借阅、维护,对读者和管理人员的维护等服务。该系统还设计了缓存,使用散列的缓存方法,并且对缓存区使用更新算法来保证数据的一致性,使用置换算法来提高命中率,全面提高图书的管理效率和速度,从而使图书管理水平和服务水平跃上一个新的台阶。 最后,针对该系统实施了详细的性能和功能的测试,发现功能完整,且系统的性能有一定的优化。关 键 词:图书馆管理系统;缓存;高效IXABSTRACTTitle: Research and implementation of the library manage system based on cache technologyName: Supervisor: ABSTRACTIn order to standardize and systemize the library management, improve the speed and accuracy of the information processing, it is necessary to establish an efficient library management system. Due to the expanding of the capacity of current database system and the congestion of network band width, system performance becomes slower as well as speed. As a result, it is quite inconvenient for user to use the system. This design will increase a cache on the basis of the library management system, so library management system would response to functions more quickly and efficiently. The system is based on the man-machine friendly interface that is ease to use and beautiful. In addition, the system is also based on the JAVA platform and SQL SERVER database as the back-end data storage. The system designs four modules including basic data maintenance, new books purchase, borrowing and lending management, system maintenance. These modules contain all the services of the library management, which achieves the full realization of the book cataloging, retrieval, borrowing and lending, maintenance of readers and administrators. Whats more, the system designs a cache which uses the hash map to index. I also use cache update algorithm to ensure data consistency and replacement algorithm to improve the hit rate. Such measures improve the management efficiency and speed, so that the performance of library management system leaps to a new level.Finally, after testing the implementation of the system performance and function, we found that the system functions fully and well, at the same time, the system performance becomes optimization.KEY WORDS: Library management system; Cache; efficient目 录绪论目 录1 绪论11.1 研究背景及意义11.2 研究现状11.3 论文主要工作21.4 论文组织结构22 相关技术介绍32.1 缓存技术32.2 B/S架构与C/S架构的对比62.3 JAVA技术62.3.1 JAVA技术简介62.3.2 JAVA语言的优点62.3.3 JAVA图书界面72.4 SQL SERVER 200092.4.1SQL简介92.4.2SQL SERVER 2000优点92.5 数据库连接技术103 需求分析113.1 功能需求分析113.2 性能需求分析123.3 用例图123.4 主要数据流程图134 系统概要设计144.1 总体功能及模块划分144.2 系统结构图144.3 数据库的设计154.3.1数据库的设计原理154.3.2 数据库物理设计154.3.3数据库逻辑设计165 系统详细设计205.1 基本数据维护模块详细设计205.1.1读者信息管理205.1.2读者类别管理205.1.3图书信息管理205.2 新书订购模块详细设计225.2.1新书订购225.2.2新书验收225.3 借阅管理模块详细设计225.3.1图书借阅225.3.2图书归还225.3.3图书搜索235.4 系统维护模块详细设计245.4.1口令更改245.4.2 用户管理245.5 核心问题245.5.1模糊查询245.5.2系统的安全性255.5.3缓存的问题256 系统测试276.1 系统开发环境276.2 测试内容276.3 测试结果287 总结与展望347.1 总结347.2 展望35参考文献36附 录37致 谢42 5 系统详细设计1 绪论1.1 研究背景及意义传统的图书管理使人工进行登记,图书没种类型和编码都要登记到很多笔记本,时间长久就会变旧和变破,甚至有丢失,管理也十分混乱。日常管理工作都是人工操作的图书管理都显得十分的落后与效率低下,历史数据很难保存和利用,尤其在查询方面效率低,找一本书编码要翻阅很多记录,管理十分麻烦。然后当前信息化时代,管理信息系统(MIS)迅速发展,人工完全可以利用计算机来实行替代,而且可以大大提高管理的效率。图书馆管理系统目前被广泛应用于学校、工业、商业、企业、事业等单位,几乎每个进行了信息化建设的单位都具有图书馆管理系统。而在使用计算机系统对图书的管理,其实就是对信息的管理。使用信息管理系统对图书馆进行管理,将会在很大程度上提高管理的效率、速度与安全。随着图书馆管理的日益完善,数据的逐渐丰富,用户的大量增加,导致目前系统后台的数据库系统容量不断膨胀,网络带宽逐渐拥挤,导致系统性能降低,检索速度减慢,给用户的使用带来极大的不便。所以可以结合缓存思想,给图书馆管理系统增加一个缓存区,这样可以不用每次操作都访问数据库,尤其是将借书记录放入缓存区后,还书时就可以直接调入缓存区的数据,可以提高系统的速度和性能。1.2 研究现状随着科学技术的进步,人类社会正逐步走向信息化。图书馆具有丰富的信息资源,在信息社会中发挥着越来越重要的作用,我国图书馆的计算机技术开始在20世纪70年代末,随着的改革步伐和对外开放的快速发展,特别是20世纪90年代后,中国图书馆信息网络建设取得了很大的发展。到2l世纪,由于充分利用计算机网络和信息技术,逐步实现真正的信息管理和多方位的网上查询。随着数据库技术和计算机网络的飞速发展,数据已成为现代信息技术的重要组成部分,数据是企业重要的资产,如何有效地使用这些数据,在企业的发展起着至关重要的作用。随着中国的市场经济的迅速发展,图书馆藏书的数量正在逐步增加,这也挑战了图书馆管理技术。许多外国大学和大多数高校长期使用计算机管理书籍,还开发了许多不同的版本的图书馆管理系统,但由于计算机的发展速度太快,图书馆管理系统已发生变化,由于每所学校的情况不同,采用的图书馆管理系统也不同。系统周围环境也在不停的发展,从最早的独立的C / S模式到现在流行的B / S模式1。1.3 论文主要工作论文的研究内容如下:构建基础的图书馆管理系统,要求该系统应具备对数据进行录入、修改、删除、查询等基本功能。包括数据录入:即图书的建库与编目管理。数据浏览:浏览在库的所有书籍。数据查询:对图书信息、期刊信息的查询,包括单条件查询和多条件查询。数据读取:对在库图书的存盘与读取。数据统计:对图书信息的统计,主要用模糊查询来实现。读者管理:借阅者的管理。用户管理:使用系统的工作人员的管理。该系统应设计缓存使系统性能提升。包括设置数据缓存,使二次访问时不需要读取数据库;数据库使用hash索引,加快数据读取速度。系统安全性 、数据安全性、一致性控制。对系统安全性的保护:设置登陆窗口,数据安全性:设置权限,一致性:写回法和写直达法1.4 论文组织结构论文各章节安排如下:第一章 绪论,叙述了课题的选题背景、选题目的与意义。第二章 相关技术介绍,介绍了开发系统所用到的相关技术和工具。第三章 需求分析,从性能需求、功能需求、数据流等方面对网络图书馆进行系统分析。第四章 系统概要设计,对系统的总体进行分析,确定系统的功能模块划分并且完成图书馆管理系统的数据库设计与分析。第五章 系统详细设计,对系统的各个功能模块进行详细设计;第六章 系统测试,对系统的各个功能模块进行测试。第七章 总结与展望。252 相关技术介绍工具的出现使人类一大进步,因此工具技术选择好能影响系统开发效率,由于在本次毕业设计中将涉及缓存技术、网络技术、数据库技术等多种技术和程序开发语言,只有首先对所要涉及和使用到的每个技术及编程语言都有所了解,充分把握其技术优势,并且能够举一反三的灵活应用的情况下才能使这些技术更好的服务于图书管理信息系统的方案制定和开发中。2.1 缓存技术使用缓存可以提高访问速度,把第一次访问的内容加载到内存里,第二次直接从内存中取数据,这样速度会大大提高,提高数据库吞吐量。如果不用缓存,浪费服务器的资源。 缓存系统常用memcached做缓存,大家都知道memcached很强了,但是吞吐量还是有限,每秒20000次get和put当遇到超大规模的应用时还是会很慢,本地HashMap每秒可执行上百万次put和get,在这上面损耗的性能几乎可以忽略不记了。能不用分布式的时候就不要用分布式,用分布式的时候再考虑用memcached。一般数据库缓存包含四种情况。第一种:单个对象的缓存(一个对象就是数据库一行记录),对于单个对象的缓存,用HashMap就可以了,稍微复杂一点用LRU算法包装一个HashMap,再复杂一点的分布式用memcached即可。第二种:列表缓存,比如论坛里帖子的列表;第三种:长度的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。第四种:复杂一点的group,sum,count查询,比如一个论坛里按点击数排名的最热门的帖子列表。第一种比较好实现,后面三种比较困难,没有通用的解决办法,暂时以列表缓存(第二种)为例分析。SQL服务器在做列表缓存时是根据查询条件缓存列表结果的,但如果表的记录有任何更改(添加/删除/修改),列表缓存都全部清除,所以只要一个表的变化频繁很大(通常会是这种情况),列表缓存的命中率就会很低。如果表的记录发生改变时,先遍历所有列表缓存,只有那些被影响到的列表缓存才会被删除,而不是直接清除所有的列表缓存,比如在一个论坛版(id=1)里增加了一个帖子,那么只要清除id=1这个版对应的列表缓存就可以了,其他id的版就不用清除。这样处理的好处是可以缓存各种查询条件(如等于、大于、小于、不等于)的列表缓存,但同时也有个潜在的性能问题,由于需要遍历列表缓存,CPU的负荷比较大,如果列表缓存最大长度设置成10000,两个4核的CPU每秒也只能遍历完300多次,这样如果每秒有超过300个insert/update/delete,系统就吃不消了。在前面两种解决办法都不完美的情况下,可以根据表的某几个字段做散列的缓存办法,这种办法无需大规模遍历,所以CPU负荷也相对较小,由于这种列表缓存按照字段做了散列,所以命中率得到提高。思路如下:每个表有3个缓存Map(key=value键值对),第一个Map是对象缓存A,在A中,key是数据库的id,Value是数据库对象(也就是一行数据);第二个Map是通用列表缓存B,B的最大长度一般1000左右,在B中,key是查询条件拼出来的String(如start=0,length=15#active=0#state=0),Value是该条件查询下的所有id组成的List;第三个Map是散列缓存C,在C中,key是散列的字段(如根据userId散列的话,其中某个key就是userId=109这样的String)组成的String,value是一个和B类似的HashMap。其中只有B这个Map是需要遍历的 这个例子应该就明白了,就用论坛的回复表作说明,假设回复表T中假设有字段id,topicId,postUserId等字段(topicId就是帖子的id,postUserId是发布者id)。 2第一种情况,也是最常用的情况,就是获取一个帖子对应的回复,sql语句应该是象select id from T where topicId=2008 order by createTime desc limit 0,5select id from T where topicId=2008 order by createTime desc limit 5,5select id from T where topicId=2008 order by createTime desc limit 10,5的样子,那么这种列表很显然用topicId做散列是最好的,把上面三个列表缓存(可以是N个)都散列到key是topicId=2008这一个Map中,当id是2008的帖子有新的回复时,系统自动把key是topicId=2008的散列Map清除即可。由于这种散列不需要遍历,因此可以设置成很大,例如100000,这样10万个帖子对应的所有回复列表都可以缓存起来,当有一个帖子有新的回复时,其余99999个帖子对应的回复列表都不会动,缓存的命中率极高。第二种情况,就是后台需要显示最新的回复,sql语句应该是象select id from T order by createTime desc limit 0,50的样子,这种情况不需要散列,因为后台不可能有太多人访问,常用列表也不会太多,所以直接放到通用列表缓存B中即可。第三种情况,获取一个用户的回复,sql语句象select id from T where userId=2046 order by createTime desc limit 0,15select id from T where userId=2046 order by createTime desc limit 15,15select id from T where userId=2046 order by createTime desc limit 30,15的样子,那么这种列表和第一种情况类似,用userId做散列即可。第四种情况,获取一个用户对某个帖子的回复,sql语句象select id from T where topicId=2008 and userId=2046 order by createTime desc limit 0,15select id from T where topicId=2008 and userId=2046 order by createTime desc limit 15,15的样子,这种情况比较少见,一般以topicId=2008为准,也放到key是topicId=2008这个散列Map里即可。那么最后的缓存结构应该是下面这个样子:缓存A是:Key键(long型)Value值(类型T)11Id=11的T对象22Id=22的T对象133Id=133的T对象列表缓存B是:Key键(String型)Value值(ArrayList型)from T order by createTime desc limit 0,50ArrayList,对应取出来的所有idfrom T order by createTime desc limit 50,50ArrayList,对应取出来的所有idfrom T order by createTime desc limit 100,50ArrayList,对应取出来的所有id散列缓存C是:Key键(String型)Value值(HashMap)userId=2046Key键(String型)Value值(ArrayList)userId=2046#0,5id组成的ListuserId=2046#5,5id组成的ListuserId=2046#15,5id组成的ListuserId=2047Key键(String型)Value值(ArrayList)userId=2047#0,5id组成的ListuserId=2047#5,5id组成的ListuserId=2047#15,5id组成的ListuserId=2048Key键(String型)Value值(ArrayList)userId=2048#topicId=2008#0,5id组成的ListuserId=2048#5,5id组成的ListuserId=2048#15,5id组成的List总结:这种缓存的思路可以存储大规模的列表,缓存命中率极高,因此可以承受超大规模的应用,但是需要技术人员根据自身业务逻辑来配置需要做散列的字段,一般用一个表的索引键做散列(注意顺序,最散的字段放前面),假设以userId为例,可以存储N个用户的M种列表,如果某个用户的相关数据发生变化,其余N-1个用户的列表缓存纹丝不动。以上说明的都是如何缓存列表,缓存长度和缓存列表思路完全一样,如缓存象select count(*) from T where topicId=2008这样的长度,也是放到topicId=2008这个散列Map中。如果再配合好使用sql的内存表和memcached,加上F5设备做分布式负载均衡,该系统对付像1000万IP/天,这种规模级别的应用都足够了,除搜索引擎外一般的应用网站到不了这种规模。2.2 B/S架构与C/S架构的对比 客户机 /服务器结构(C/S):客户机/服务器结构已近成为组网的标准模型,也是信息管理系统所采用的主流方式。这种结构是采用分布式数据库管理系统的基础,它对数据的处理分为前台和后台,客户机完成屏幕输入、输出等前台任务,而服务器则完成大量的数据处理和存储管理等后台任务,使后台处理的数据不需要在前后台间频繁的传输,从而有效地解决了文件客户机/服务器结构的“传输瓶颈”问题。 浏览器 /服务器系统结构(B/S):这种结构实质上是客户机/服务器结构在Internet技术下的延伸,将客户机/服务器结构延伸为三层或多层结构:服务器层、中间层和客户层。在这种模式下,Web Server既是浏览服务器,又是应用服务器,可以运行大量的应用程序,从而使客户端变得很简单,前台则采用网页浏览器,如工E, Netscape等作为用户的标准界面。这种方式带来了显著的优势:可重用性提高、性能改善、易于管理和易于维护等。我们希望系统有较高的安全性、较快的数据处理速度和较强的数据动态交互性,所以选择C/S架构更为合适。32.3 JAVA技术2.3.1 JAVA技术简介JAVA是1995年6月由Sun Microsystems公司引进到我们这个世界的革命性的编程语言。JAVA语言的出现是源于独立于平台的需求,即这种语言编写的程序不会因为芯片的改变而发生错误或无法运行。目前,随着网络的迅速发展,JAVA语言的优势越来越明显,JAVA已成为目前最广为使用的语言。2.3.2 JAVA语言的优点面向对象程序的编程语言程序=算法+数据;面向对象编程语言程序=对象+消息。平台无关性用Java语言编写的应用程序无需修改就可以运行在不同的硬件和软件平台。分布式分布包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指一个计算分散在不同的主机进行处理。可靠性和安全性Java源于C+,但它消除了许多C+ +不可靠的因素,可以防止许多编程错误,如要求明确的方法声明,以确保编译器可以发现方法调用错误,不支持指针,以防止非法访问内存,Java解释器运行时实施检查,可以发现在数组和字符串访问冲突及提供处理机制等。多线程线程是比进程更小的可并发执行的单位。 Java提供了Thread类,它负责启动运行,终止线程,并可以检查线程状态。简单性Java省略运算符重载,多重继承(以接口来取代)等模糊的概念,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。高性能Java解释器直接执行Java字节码解释。健壮性Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。灵活性Java的设计使其适合与不断发展的环境。在类库中可以自由地添加新的方法和实例变量而不影响用户程序的执行。2.3.3 JAVA图书界面图形界面(Graphic User Interface)简称GUI,是用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。图形用户界面与字符界面相比,操作简单,画面生动,深受广大用户的欢迎,已经成为目前几乎所有应用软件的既成标准。AWT即抽象窗口工具集(Abstract Window Tools),用于图形用户界面的开发。Sun公司在其早期发布的版本JDK1.0中就提供了AWT,在其随后的多个版本中又逐步加以改进。AWT的功能包括以下方面:(1)丰富的图形界面组件;(2)强大的事件处理模型图形和图像工具,包括形状、颜色、字体;(3)布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率;(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作;(5)打印和无鼠标操作。java.awt是java基本包中最大的一个,其中定义了所有GUI组件类,以及其他用于构造图形界面的类,如字体类Font、绘图类Graphics和图像类Image等。表2-1列出了AWT中的主要软件包。表2-1 AWT中的主要软件包java.awt基

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论