重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文将从单机MySQL的场景出发,简述一下随着网站的访问量越来越大,数据库部署的演进过程,到为什么要用MySQL的必要性。
公司主营业务:成都做网站、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出泰山免费做网站回馈大家。
大数据时代的数据有3V的特点:海量Volume、多样Variety、实时Velocity。
互联网网站需求的3高的特点:高并发、高可扩、高性能。
一、单机MySql
当一个网站的访问量不大时,用单个数据库完全可以轻松应付。
在那个时候,更多的都是静态网页,动态交互类型的网站不多。
上述架构下,我们来看看数据存储的瓶颈是什么?
1.数据量的总大小 一个机器放不下时
2.数据的索引(B+ Tree)一个机器的内存放不下时
3.访问量(读写混合)一个实例不能承受
如果满足了上述1 or 3个,进化......
二、Memcached(缓存)+Mysql+垂直拆分
后来,随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。在这个时候,Memcached就自然的成为一个非常时尚的技术产品。
Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端
三、MySql主从复制读写分离
由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。
四、分库分表+水平拆分+Mysql集群
在Memcached的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。
同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。
五、Mysql的扩展性瓶颈
MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。
六、为什么用Nosql
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。下面给大家看一下,web应用数据量的增长图:
七、Nosql是什么
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,
泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
八、Nosql的优势
1.易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。
数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
2.大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。
这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。
3.多样灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
九、Nosql数据库的四大分类
键值(Key-Value)存储
列存储
文档存储
图形存储
常见的有:Redis、Memcache、MongoDB,这里就不一 一 介绍了。
NoSQL泛指非关系型数据库。随着互联网行业的兴起与发展,传统的数据库结构已经很难适应大规模数据、非结构性数据带来的挑战,也就是现在大数据行业的发展对传统的数据库发出了挑战,而为了应对大规模的非结构性数据的处理,非关系型数据库才会在计算机、软件、数据库等方面得到飞速的发展。
学籍信息管理系统摘要:随着网络技术与计算机的广泛普及,绝大部分的机构都对计算机管理系统进行了合理的运用,本设计通过Java面向对象语言完成对学生信息管理系统进行编写,基于B/S模式,所用开发工具为Eclipse以及AndroidStudio,然后基于Mysql的数据库基础上,通过Adobe Photoshop CS6的图像处理软件美化界面,在系统开发过程中用到了Postman测试工具,在系统开发完成后进行了相关模块的用例测试,所得系统有美观、友好的界面,并且人机信息比较安全可靠、灵活与方便等,这种系统可扩展性比较强。本文以学生信息管理系统为例说明JavaWeb在信息管理中的应用,主要实现了管理员模块,老师模块以及学生模块,主要实现了管理员对于系统中教师,学生以及课程数据的增删改查操作;以及教师对于学生相关信息的管理,例如学生的成绩和考勤信息等;以及学生对于个人信息的修改以及选课信息和课程成绩的查看等功能。本系统功能完善,对开发管理信息系统提供了较高的理论指导和实际意义。关键词:学生信息管理系统,Java Web,B/S模式,Mysq
毕业设计(论文)外文摘要Title : Student information ManagerAbstract:With the wide spread of network technology and computer, the vast majority of institutions have made reasonable use of the computer management system. Based on B / S mode, the development tools used are eclipse and Android studio. Then based on MySQL database, the interface is beautified by Adobe Photoshop CS6 image processing software. In the process of system development, postman test tool is used, After the completion of the system development, the use case test of related modules is carried out. The system has beautiful and friendly interface, and the man-machine information is safe, reliable, flexible and convenient. This system has strong scalability.This paper takes the student information management system as an example to illustrate the application of Java Web in information management, which provides higher theoretical guidance and practical significance for the development of management information system.keywords:Student information management system; Java Web; B/S;Mysql
目录
1 绪论………………………1
1.1 研究背景及研究意义………………………1
1.2 研究状况………………………1
2 系统相关技术分析………………………2
2.1 java………………………2
2.2 javaweb………………………3
2.3 数据库………………………4
3 可行性和需求性分析………………………4
3.1 可行性分析………………………4
3.2 总体需求分析………………………5
4 系统的设计………………………7
4.1 系统架构设计………………………7
4.2 系统功能模块设计………………………8
4.3 系统数据库设计………………………8
5 系统开发与实现………………………10
5.1 登录界面的实现………………………10
5.2 教师管理的实现………………………14
5.3 学生管理的实现………………………16
5.4 课程管理的实现………………………17
5.5 老师模块的实现………………………17
5.6 学生模块的实现………………………20
6 系统测试………………………23
6.1 用户登入功能测试………………………23
6.2 各项信息管理功能测试………………………23
6.3 Excel导出学生成绩表功能测试………………………24
总结………………………25
致谢………………………26
参考文献………………………27
1 绪论1.1 研究背景及研究意义
学生的信息,必须要实现安全,高效的管理,因此,学生信息管理系统对于一个学校来说是必不可少的组成部分。由于学生信息量比较庞大,对于那些需要记录存档的数据比较多的高校来说,系统化的管理统计更加方便。而且当查找某条记录时只需要输入该学生的有关信息便可以查询到几乎所有信息。
基于信息的学生信息管理系统可以有效解决传统的手动文件管理的缺点,充分利用信息管理的优点,提高学生状态管理的效率。学生信息管理系统对学生信息的管理更有效且方便。有效的信息管理学生的状态,不仅保证学生的状态有效率、有秩序的管理,而且使大学能够达到一定程度的快速发展。
为了提高学生个人信息的管理效率,此设计一款学生信息管理系统将在很大程度上提升高校学生信息的管理效率。开发一个功能完善的学生信息管理系统可以使得高校学生的信息档案管理效率。
1.2 研究现状
我国高校中的信息管理员一般为年龄比较大一点的阿姨,叔叔,他们之中,不乏有一些人的文化程度较低,因此,存在使用学生信息管理系统的老宿管对计算机系统的操作并不熟悉,需要他人指导,甚至对该系统的接受程度较低,仍会选择使用纸质的方式进行信息的记录,如果学生的报修信息量大,就会存在问题解决不及时的问题。
因此,我国高校的信息管理系统未来的发展路线需要进一步的简化信息管理系统的使用,使得系统的受众变得更大,使得可以更多的人可以使用,从而更好的提高学生信息管理系统的效率和便捷性,以及提供更加系统的服务.
1.3 学生信息管理系统的必要
目前,人口数量在不断飙升,学生数量更是急剧增加,这就给各大高校提供了大量学生信息统计的艰巨的挑战。学生信息管理系统可以减轻学生信息统计的负担,使得学生的信息统计和查询更加的方便和快捷。本文研究的重点是WEB框架在学生信息管理系统中的应用,对学校长期的学生信息化建设,实现学生信息数据化有非常重要的意义。
2 系统相关技术分析
本系统采用现阶段较为成熟的Java编程语言,运用了面向对象的思想。开发过程中使用了Java1.8、Eclipse集成开发环境、Tomcat7.0以及Mysql数据库。
2.1 Java
Java是一种由Sun公司推出的面向对象编程语言,广受全球开发人员的欢迎,占据着软件开发领域的主要地位。Java语言具有功能强大、变成简单、开发效率高、运行稳定、可以独立运作等优势。由于Java语言能够独立构建程序运行环境,因此不需要多强大的平台即可使用。与此同时,Java语言还支持多线程开发,可以和互联网结合运用。
Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。
2.2 JavaWeb
2.2.1 HTML
HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 技术。HTML 5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。广义论及HTML5时,实际指的是包括HTML、CSS和JavaScript在内的一套技术组合。它希望能够减少浏览器对于需要插件的丰富性网络应用服务(plug-in-based rich internet application,RIA),如Adobe Flash、Microsoft Silverlight,与Oracle JavaFX的需求,并且提供更多能有效增强网络应用的标准集。
HTML就是所谓的超文本标记语言,这种语言普遍存在与网络之中的各个网页内,是开发网页的基础工具之一。HTML主要是借助标签来控制网页中的图像、视频、文本等各种信息,从而实现预期的显示效果。HTML语言产生的互联网操作会受到http协议的制约,并且浏览器在运行HTML语言的时候同样会受到约束。HTML之所以可以很快得到大规模应用,主要是因为采用了超文本技术,这样就能够和任何连接到网络中的计算机互相传输数据。所谓的“超文本”实质上指的是不包含文本的其他内容,例如视频、音频等等。
2.2.2 Servlet
Servlet是在JSP技术基础上发展出的全新技术,主要应用于服务器中,具有接收数据请求、转发数据请求等功能。本质上来说,Servlet属于Java程序的一个类型。Servlet主要遵循如下流程进行运作:服务器在接收到Http请求之后,会立即分析接受的这些请求,并以此为基础创建Servlet,紧接着借助调用等各种手段向客户端反馈请求信息,最后服务器重启并调用destroy。
浏览器提交的请求是满足Http协议的文本,该文本是由服务器容器,例如Tomcat接受并解析封装成了HttpServletRequest类型的request,所有的HTTP头数据都是可以通过request的对应方法查询到(get),当需要输出给客户端浏览器时,Tomcat将输出流文本封装成HttpServletResponse的response对象,通过设置response的属性,来控制输出的内容。其中,Tomcat利用request和response做为参数,调用Servlet中的方法,例如doget(request,response);
2.2.3 JSP
JSP实际上属于Java Servlet的分支技术之一,是基于B/S结构研发出的网页开发技术,允许用户和网页进行交互,极大增强了网页的扩展性。JSP主要遵循如下流程进行运作:利用JSP标签把Java语言编写的代码插入到超文本标记语言开发的网页中。标准的JSP标签格式是:“%内容%”。
JSP技术主要起到了实现Java web用户界面的作用。在进行JSP编程之前,应当把HTML、XHTML、XML三者有效结合运用。JSP技术通常是利用表单来实现各项需求的,比方说数据输入、数据库访问等等需求。在得到全部信息后,便可以开始设计网页。
JSP标签能够实现数据库访问等众多功能与请求,此外,还能够转发、传输、共享各个网页发送的信息,主要有请求、转换、编译、执行以及响应五个步骤。
第一步,客户端将会发送出网页请求;第二步,JSP Container将会对网页请求进行转换,将其转换成Servlet文件;第三步,进一步对Servlet文件进行编译,将其编译成.class文件;第四步,执行网页请求并产生Servlet实例;第五步,将网页请求的Servlet实例返回至客户端进行响应。
从整体角度来看,JSP执行过程里面最核心的两个阶段应当是请求期和转译期。顾名思义,所谓的请求期指的是把.class文件返回给客户端的过程,而所谓的转译期就是一步步把网页请求转换成.class文件的过程。
JSP拥有众多性能方面的优势。在应用JSP技术之后,程序开发者在程序设计时候面临的编程工作复杂程度会显著减少,并且能够与可视化工具一同运用,进一步降低程序开发者的开发压力。除此之外,由于JSP本身包含内置对象等特点,可以在很大程度上给servlet编程提供助力,有效提高了编程速度,降低了编程难度,程序开发者无须再人工翻译网页请求和外部信息。并且JSP囊括了Java的全部技术内容,所以只要是Java支持的插件包、工具包等等都可以被JSP调用,也不需要性能多强的运作平台。
2.2.4 B/S结构
B/S(Brower/Server)体系结构的优势:
(1)程序基本建立在服务器中,便于维护更新;
(2)能够与客户端有效区分进行逻辑处理、数据处理等操作,这样的话,在维护客户端之时,就无须更改其他内容。
B/S体系结构的交互模式:
B/S结构可以把网页请求和返回响应连接起来,进而实现两者间的实时交互,并且允许浏览器直接发送request请求,依靠服务器来访问系统服务器和数据库服务器。从应用服务器角度来说,应用服务器可以从数据库中获得所需数据,随后再向浏览器发送请求,最后,由浏览器对HTML文件进行处理。
2.3 Mysql数据库
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能
数据库管理系统主要分为以下两类:关系数据库(关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。)非关系型数据库 NoSQL( 非关系型数据库是对不同于传统的关系数据库的数据库管理系统的统称。与关系数据库最大的不同点是不使用SQL作为查询语言。)。几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
Mysql 是一种广泛使用且流行的数据库服务器,长时间存储在计算机设备上的数据集合,由各种用户和应用程序根据某些规则进行组织和通信,简单地说就是数据文件存储的大型仓库。它功能强大,易于使用和管理,安全靠谱,跨平台界面,安全稳定的网络,适合大多数软件和应用程序软件数据库的后端开发。另外,Mysql 数据库允许用户以多种语言编写程序进行访问,同时,开元也是该数据路最大的特点,可以在不同平台上工作,还可以应用于 Web 的开发站点以及其他程序的数据后端。
3 可行性和需求性分析
3.1 可行性分析
3.1.1 技术可行性分析
基于Java收集和监控系统设计的电脑产品价格没有严格要求。只需熟练使用java和数据库即可,不需要太多复杂的不同类型的语中,减轻了设计实现的复杂度。高成本性能;高安全性。
3.1.2 操作条件可行性分析
操作性主要是完成了用于收集商品价格的监视管理系统的设计,完成了用户Experience的使用管理者总是通过系统方便管理相关数据信息用户信息的请求和管理者管理数据和信息系统的操作不需要专家,可以直接对应操作管理的通用模块系统的操作性完全可能。因为系统的操作也是用于登录的接口窗口的使用,所以只要操作简单,操作人员就可以完全操作。
3.2 总体需求分析
系统主要实现的是管理学生信息,管理员可以对学生、教师、课程进行直接的操作(添加,修改,删除)具体有:
(1) 对新教师的添加;
(2) 系统数据库中已经添加后、存在的教师的有关信息的修改;
(3) 学生信息管理系统中已经存在的教师数据的删除;
(4) 对系统中已经存在的所有教师数据的查看等。
还有对课程数据的相关相关操作,具体包括:
(1) 对新课程数据的添加;
(2) 系统数据库中已添加存在的课程数据的修改;
(3) 系统中已经添加后存在的课程数据的删除;
(4) 对系统中已经存在的所有课程数据的查看等。
管理员对自己的操作:点击修改个人信息按钮,管理员可以对自己的密码进行修改。
关于据库中管理员的用例如图3-1所示。
图3-1 管理员用例图
教师模块的主要功能包括对于课程数据以及学生相关数据的修改,具体操作同管理员类似,教师模块的用例图如图3-2所示。
图3-2 教师角色用例图
学生模块主要的功能包括对于个人信息的修改查看以及成绩的查看等,具体如图3-3所示。
图3-3 学生角色用例图
4 系统的设计
4.1 系统架构设计
架构设计的目的是为了反映一个结构和其他元素之间的关系,抽象,通常用于指导大型软件系统,数将模型层、视图层和控制层。并且结合工厂模式整体设计思路,分别将数据访问层,服务层每一层的最上方封装一个工厂类,控制层通过服务层的工厂类调用相关服务,服务类再调用数据访问层的工厂类来实现相关的数据访问层操作,本系统的体系结构设计的详情如图4-1。
图4-1 学生信息管理系统结构图
4.2 系统功能模块设计
本学生信息管理系统共设计了四个功能模块,其为教师管理功能模块、学生信息管理功能模块、课程管理功能模块和成绩管理功能模块等。系统的功能模块设计图如图4-2所示。
图4-2 系统功能模块设计
4.3 系统数据库设计
1.教师可以管理学生(学号、姓名、性别、出生日期)的所有信息以及课程和成绩。
2.学生通过选课来选取课程,老师工作,授予学生所选课程并给予学生成绩,学生拥有成绩。如图4-3所示。
图4-3系统数据库ER图
系统中的管理员有用户名和密码两个属性,用来登录系统,如图4-1所示。
图4-1管理员信息图
学生信息表在数据库中的表名定义为student,其共有七个字段用来存储学生的学号、姓名、班级、性别、身份证号、所在省份、电话信息。具体学生信息表字段如图4-2所示。
图4-2学生信息图
课程信息表在数据库中的表名定义为course,其共有六个字段用来存储课程的课程编号、课程名、上课班级、任课教师、课时、课程学分信息。具体课程信息表字段如图4-3所示。
图4-3课程信息图
成绩信息表在数据库中的表名定义为grade,其共有8个字段用来存储成绩的成绩编号、学生学号、学生姓名、课程班级、课程编号、课程名、成绩分数、成绩类型。具体成绩信息表字段如图4-4所示。
图4-4成绩信息图
教师信息表在数据库中的表名定义为teacher,其共有七个字段用来存储教师信息。具体教师信息表字段如图4-5所示。
图4-5教师信息图
5 系统开发与实现
5.1 登入界面的实现
登录界面如图5-1所示,在登录界面需要选择不同的登录对象,选择之后输入对应的用户名和密码以及验证码,然后点击确定按钮即可登入学籍信息管理系统。
图5-1 登录界面
(1) 点击登录选项中的管理员登录选项,输入管理员账户和密码可进行管理员登录,管理员登录部分代码:
//管理员登录
(2)点击登录选项中的学生登录选项,输入学生账户和密码可进行学生端的登录,学生端登录后可进行自己的有关信息的修改(个人信息、密码等)
学生端登录部分代码:
//学生端登录
(3)点击登录选项中的教师登录选项,输入教师账户和密码可进行教师端的登录,
教师端登录部分代码:
//教师端登录
登录之后就可以看到系统的主界面,左侧是导航菜单,不同的身份登录后导航菜单的功能也不同:
学生登录:学生可对自己的个人信息进行修改,可以选课、打卡、请假,也可以对自己的选课和成绩进行查询。
老师登录:老师可以对学生的信息进行添加、修改、删除、导出学生成绩操作。
管理员登录:管理员可以对学生和老师的信息进行添加、修改和删除操作。
如图5-2所示
图5-2 系统主界面
5.2 教师管理的实现
管理员登录成功之后可以完成系统中教师的管理,对教师数据进行修改和添加的简单操作,添加教师如图5-3所示。
图5-3 添加教师
添加教师功能主要代码如下:
教师添加成功之后可以查看已经添加的教师,并且仍能够对已经添加的教师信息进行修改和删除操作。如图5-4所示。
图5-4 教师列表查看
如果教师的相关信息需要修改,首先需要选中想要修改的教师,点击修改,将信息修改即可,如图5-5所示。
图5-5 教师信息修改
教师信息修改部分代码如下:
如果有教师的相关信息需要删除,首先需要选中想要修改的教师,点击删除按钮,即可将想要删除的教师进行删除操作,具体如图5-6所示。
图5-6教师的删除
教师删除功能主要代码如下:
5.3 学生管理的实现
管理员登录成功之后可以完成系统中学生的管理,对教师数据进行增删改查操作,对学生的管理和对教师的管理类似,学生管理界面如图5-7所示。
图5-7 学生管理界面
5.4 课程管理的实现
管理员登录成功之后可以完成系统中课程的管理,对课程数据进行增删改查操作,对课程的管理类似,不再赘述,课程管理界面如图5-8所示。
图5-8 课程管理界面
5.5 老师模块的实现
教师登录到系统之后,可以对学生的考勤信息以及成绩进行管理,学生成绩的添加,点击添加按钮即可对学生的成绩信息添加,选中一名学生,点击修改,可对学生成绩进行修改操作,如图5-9所示。
图5-9 学生成绩的修改
学生成绩修改功能部分代码如下:
教师还可以对学生的成绩进行统计,可以查看学生每门课程的所有成绩的统计图,据图如图5-10所示。
图5-10 学生成绩的统计
教师可以对学生的成绩表进行导出操作,学生成绩导出如图5-11所示。
图5-11 学生成绩单导出
学生成绩导出之后效果如图5-12所示。
图5-12 学生成绩导出
什么是NoSQL
大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。
为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。
为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。
关系型数据库简史
1969年,埃德加?6?1弗兰克?6?1科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。
科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。
通用性及高性能
虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。
突出的优势
关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点:
保持数据的一致性(事务处理)
由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
可以进行JOIN等复杂查询
存在很多实际成果和专业技术信息(成熟的技术)
这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。
关系型数据库的不足
不擅长的处理
就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理:
大量数据的写入处理
为有数据更新的表做索引或表结构(schema)变更
字段不固定时应用
对简单查询需要快速返回结果的处理
。。。。。。
NoSQL数据库
为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。
易于数据的分散
如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。
提升性能和增大规模
下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。
首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。
另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。
不对大量数据进行处理的话就没有使用的必要吗?
NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQL数据库的应用就没有意义吗?
答案是否定的。的确,它在处理大量数据方面很有优势。但实际上NoSQL数据库还有各种各样的特点,如果能够恰当地利用这些特点将会是非常有帮助。具体的例子将会在第2章和第3章进行介绍,这些用途将会让你感受到利用NoSQL的好处。
希望顺畅地对数据进行缓存(Cache)处理
希望对数组类型的数据进行高速处理
希望进行全部保存
多样的NoSQL数据库
NoSQL数据库存在着“key-value存储”、“文档型数据库”、“列存储数据库”等各种各样的种类,每种数据库又包含各自的特点。下一节让我们一起来了解一下NoSQL数据库的种类和特点。
NoSQL数据库是什么
NoSQL说起来简单,但实际上到底有多少种呢?我在提笔的时候,到NoSQL的官方网站上确认了一下,竟然已经有122种了。另外官方网站上也介绍了本书没有涉及到的图形数据库和对象数据库等各个类别。不知不觉间,原来已经出现了这么多的NoSQL数据库啊。
本节将为大家介绍具有代表性的NoSQL数据库。
key-value存储
这是最常见的NoSQL数据库,它的数据是以key-value的形式存储的。虽然它的处理速度非常快,但是基本上只能通过key的完全一致查询获取数据。根据数据的保存方式可以分为临时性、永久性和两者兼具三种。
临时性
memcached属于这种类型。所谓临时性就是 “数据有可能丢失”的意思。memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止的时候,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据(旧数据会丢失)。
在内存中保存数据
可以进行非常快速的保存和读取处理
数据有可能丢失
永久性
Tokyo Tyrant、Flare、ROMA等属于这种类型。和临时性相反,所谓永久性就是“数据不会丢失”的意思。这里的key-value存储不像memcached那样在内存中保存数据,而是把数据保存在硬盘上。与memcached在内存中处理数据比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的。但数据不会丢失是它最大的优势。
在硬盘上保存数据
可以进行非常快速的保存和读取处理(但无法与memcached相比)
数据不会丢失
两者兼具
Redis属于这种类型。Redis有些特殊,临时性和永久性兼具,且集合了临时性key-value存储和永久性key-value存储的优点。Redis首先把数据保存到内存中,在满足特定条件(默认是15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的key发生变更)的时候将数据写入到硬盘中。这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性。这种类型的数据库特别适合于处理数组类型的数据。
同时在内存和硬盘上保存数据
可以进行非常快速的保存和读取处理
保存在硬盘上的数据不会消失(可以恢复)
适合于处理数组类型的数据
面向文档的数据库
MongoDB、CouchDB属于这种类型。它们属于NoSQL数据库,但与key-value存储相异。
不定义表结构
面向文档的数据库具有以下特征:即使不定义表结构,也可以像定义了表结构一样使用。关系型数据库在变更表结构时比较费事,而且为了保持一致性还需修改程序。然而NoSQL数据库则可省去这些麻烦(通常程序都是正确的),确实是方便快捷。
可以使用复杂的查询条件
跟key-value存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据。虽然不具备事务处理和JOIN这些关系型数据库所具有的处理能力,但除此以外的其他处理基本上都能实现。这是非常容易使用的NoSQL数据库。
不需要定义表结构
可以利用复杂的查询条件
面向列的数据库
Cassandra、Hbase、HyperTable属于这种类型。由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引人注目。
面向行的数据库和面向列的数据库
普通的关系型数据库都是以行为单位来存储数据的,擅长进行以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被称为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。
高扩展性
面向列的数据库具有高扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,利用面向列的数据库的优势,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,应用起来十分困难。
高扩展性(特别是写入处理)
应用十分困难
最近,像Twitter和Facebook这样需要对大量数据进行更新和查询的网络服务不断增加,面向列的数据库的优势对其中一些服务是非常有用的,但是由于这与本书所要介绍的内容关系不大,就不进行详细介绍了。
总结:
NoSQL并不是No-SQL,而是指Not Only SQL。
NoSQL的出现是为了弥补SQL数据库因为事务等机制带来的对海量数据、高并发请求的处理的性能上的欠缺。
NoSQL不是为了替代SQL而出现的,它是一种替补方案,而不是解决方案的首选。
绝大多数的NoSQL产品都是基于大内存和高性能随机读写的(比如具有更高性能的固态硬盘阵列),一般的小型企业在选择NoSQL时一定要慎重!不要为了NoSQL而NoSQL,可能会导致花了冤枉钱又耽搁了项目进程。
NoSQL不是万能的,但在大型项目中,你往往需要它!