APP下载

快速构建在线课程资源平台研究

2020-12-23罗尹奇汤伟

软件 2020年10期

罗尹奇 汤伟

摘  要: 突发公共卫生事件导致高校无法正常开展线下教学活动,在线课程资源平台成为解决该问题的有效途径。为了在短时间内实现构建在线课程资源平台,本文提出采用EXCEL作为数据存储对象,并将其中的数据加载进内存,同时提供数据访问接口,从而实现平台轻量级研发与部署。本文一方面解决了高频率访问EXCEL性能低下的问题,另一方面保证了平台部署、维护和升级的灵活性。

关键词: EXCEL;哈希表;数据缓存;轻量级研发

中图分类号: TP311.5    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.10.053

本文著录格式:罗尹奇,汤伟. 快速构建在线课程资源平台研究——以电子科技大学图书馆在线课程资源为例[J]. 软件,2020,41(10):204207

【Abstract】: Public health emergencies lead to the failure of normal offline teaching activities in colleges and universities. Online course resource platform has become an effective way to solve the problem. In order to realize the construction of online course resource platform in a short time, this paper proposes to use excel as the data storage object, load the data into the memory, and provide the data access interface, so as to realize the lightweight development and deployment of the platform. On the one hand, this paper solves the problem of low performance of high frequency access to excel, on the other hand, it ensures the flexibility of platform deployment, maintenance and upgradation.

【Key words】: Excel; Hash table; Data cache; Lightweight development

0  引言

2020年年初的“新冠疫情”对各行各业应对重大突发公共卫生事件的能力和管理机制提出了前所未有的挑战[1]。高校作为人群聚集和流量密集的公共场所,在疫情的影响下无法正常开展线下教学活动。为响应教育部提出的“停课不停教、不停学”的号召[5],各地高校陆续加强了数字资源和网络资源服务的能力,特别是以在线课程、微信公众号、微博、电子图书等多种形式为载体[2],有力保证了高校的科研教学活动有序开展。

作为保障科研教学的重要手段之一,在线课程资源平台将数字资源按学院和课程的实际需要进行筛选和整合,以资源门户的形式提供给用户使用。一方面课程所用的教材教参资源是高校数字资源的一个子集,通过筛选和整合排除了大部分无关资源,实现课程相关资源的精准投放;另一方面资源访问权限可控,平台仅提供资源入口,不改变资源的实际访问权限规则,尽可能保证校外远程访问安全可靠。

为了快速构建在线课程资源平台,需解决以下三个问题:

(1)课程关联问题。传统的在线资源平台是围绕资源建设的,资源本身与学院和所开设课程没有关联性,这就导致用户必须通过搜索才能找到课程所需的教材教参。因此构建在线课程资源平台时需要考虑将学院-课程-教材教参三者进行合理关联。

(2)分类导航问题。部分高校的在线课程平台仅对教材教参资源进行了简单罗列,一次性显示所有课程的资源链接,缺少必要的分類和导航[3],用户面对上千条链接的时候仍需进行搜索。因此构建的在线课程资源平台需要按学历、学院和课程分类组织资源链接。

(3)部署升级问题。构建在线课程资源平台是一个逐步迭代和完善的过程,数据随时可能进行更新。这就要求在线课程资源平台的数据管理必须具备轻量级特性,平台的资源数据能够随时可编辑,且编辑时不会影响系统的正常访问。

1  关键技术

1.1  EXCEL与内存对象

在一般的网站平台中数据库通常处于存储的核心,数据的组织具备一定的结构特征(如红黑树、B+树[6,7]等),因此在检索时能够充分保证访问性能。然而数据库的设计、管理和开发部署过程是重量级的:

(1)在设计上,对象-关系建模过程要求充分分解出业务场景所需的各种对象实体,以及对象实体之间的关联约束,分解是否合理决定了系统研发的难易程度。

(2)在管理上,数据的增删改查必须符合一致性约束要求,简单的管理可以通过可视化界面实现,但复杂操作仍需通过SQL脚本实现,对管理员专业程度要求较高。

(3)在开发上,平台代码需构建到数据库的连接,并通过执行SQL语句或ORM映射才能实现;部署时则目标服务器必须安装数据库软件,同时还需建库建表。

为实现轻量级开发和部署在线课程资源平台,以数据库为存储核心的架构是不适宜的,因此平台采用了EXCEL作为数据存储核心。一方面EXCEL电子表格界面直观、操作简单、功能丰富,数据的增删改查极为方便;另一方面平台代码访问EXCEL的过程为一般的文件访问,无需建立连接;部署时仅需拷贝文件即可,无需安装特定软件。

与数据库相比,EXCEL的数据存储是线性的,这就导致了数据访问的性能不及数据库,所有的查询均需要从第一行数据遍历。同时EXCEL电子表格存储在磁盘上,磁盘读写性能也相比内存低下,并且在面向全校师生大规模访问时,由于磁盘读写性能限制会出现网站长时间无响应的问题。因此需要将EXCEL数据加载进内存缓存区,平台对内存对象进行访问,从而确保平台能够及时响应。

1.2  哈希表

EXCEL数据加载进内存缓存区虽然能够解决磁盘访问性能低下的问题,但EXCEL数据本身的线性组织形式也会导致内存访问性能低效。因此内存对象的数据结构不能采用线性的组织形式,而应该采用哈希表实现。

哈希表通过关键字与存储对象之间建立映射关系,经关键字能够快速定位存储对象[8]。这样在访问特定学院的特定课程时,可以在时间复杂度为O(1)的情况下及时获取数据,避免了线性循环比对,进一步实现了高性能访问。

虽然哈希表保证了基于Key/Value模式的查询效率,但在存储效率上,哈希表由于新数据加入会发生扩容,空间复杂度远高于线性存储,因此在加载EXCEL时需要保证系统具有足够的内存空间防止数据溢出。

1.3  技术框架

为实现快速构建在线课程资源平台,系统基于Java Web开发,并且实现了MVC三层架构模型,整合了多种当前较为流行的框架,从而降低了开发难度,提升了开发效率[9,10]。所用框架信息如表1。

2  体系架构与实现

2.1  整体架构设计

为了实现资源分类导航,课程信息不采用列表的形式一次性显示,而是采用树形结构分层逐步显示。平台组织架构如图1。

其中首页作为平台门户入口,提供了顶层聚合视图,包含了各个学院的分类链接;用户根据自身专业、所在学院和学历,选择对应的链接进入该学院开设的课程列表页面,该页面也包含了各个课程的分类链接;用户选择对应课程后进入课程详情页面,此时该页面包含了关于该课程的所有详细信息,包括课程名、教材列表、教参列表;最后用戶选择某一教材教参后实现访问该数字资源。整个过程采用了树状分支结构逐步展开,避免了将全部资源列表直接显示给用户,保证了用户可以聚焦自身关注的课程信息。

为实现上述组织架构,并方便后续系统持续更新,平台采用了典型的MVC三层架构,其中与基于数据库的系统不同的是,平台的数据存储采用了EXCEL,同时在Controller与Model两层之间,加入了缓存机制,从而确保大规模网站访问时的性能。平台整体架构设计如图2。

(1)EXCEL:资源链接的存储实体,用于存放教参/教材数据。其中教参/教材数据必须遵循自义定的数据协议规范,以便网站解析使用。

(3)Model:完成对EXCEL的解析,产生内存对象,该对象受Ehcache缓存池托管,根据失效时间策略定期重复加载EXCEL。

(3)Controller:提供一系列Action逻辑实体,根据客户端传递的参数返回相应的视图。

(4)View:采用JSP作为视图,执行页面逻辑,生成对应的网页,并将网页返回给客户端,产生最终浏览器可见的结果。

2.2  数据设计

(1)EXCEL字段设计

为了实现平台分类导航,EXCEL中不仅存储关键数据,同时还需对每一条数据附加标签字段,用于指示该条数据的性质。由于平台的核心功能是将教材教参资源展示给用户,因此EXCEL中的每一条数据是围绕教材教参URL构建的。EXCEL字段说明如表2。

表2中学生类型标志、开课学院ID、课程ID为分类标志,其作用是提供查询参数发送到服务器,服务器根据参数值实现逐级访问。由于EXCEL与数据库不一样,不存在多表关联约束,因此在围绕教材教参URL构建一条记录时,会存在大量的学历、学院和课程等冗余信息。资源URL组则记录了该资源的访问路径,考虑到高校多种数字资源中可能拥有相同信息的资源,因此资源同时具有多个URL使用|(竖线)进行分割。

(2)内存对象设计

EXCEL中数据会周期加载进内存,在缓存池中构建出内存对象。根据1.1、1.2节分析,内存对象会采用哈希表结构进行存放,其类图设计如图3。

其中ExcelObject为EXCEL被加载进内存后的实体对象;学院与课程均采用Map(HashMap)结构存储,使用编号作为键值;资源对象采用Set(HashSet)进行存储,用于区分不同的资源对象,而一个资源对象可能存在多个URL链接,故采用List列表存储资源的具体路径。

2.3  关键实现

(1)加载EXCEL

尽管EXCEL表在逻辑上和ExcelObject内存对象对等,但两者的结构却存在明显的不同:EXCEL表中数据是按线性顺序存放,而ExcelObject则应用到了哈希表,两者之间需要有数据转化。为了实现将EXCEL表中数据加载进内存,其关键代码如表3。

其中@Cacheable使用的是Spring缓存注解,其具体实现由Ehcache提供,并且其失效时间配置为1小时。一方面通过缓存的方式避免了频繁加载EXCEL,提高了访问性能;另一方面访问内存对象时对EXCEL文件无影响,管理员可以对文件进行编辑修改,系统无需重启即可实现自动加载。

(2)教材教参列表获取

在获取教材教参列表数据时,浏览器通过发送学历、学院和课程参数对ExcelObject进行查询,从而实现课程资源定位,其关键代码如表4。

上述过程对于查询学院和课程同样适用。其中每一次的访问均需要获取一次内存对象,由于采用了缓存,在未失效的情况下缓存池中的ExcelObject对象会被立即返回,性能远高于直接访问磁盘。而通过学历类型、学院ID和课程ID参数对ExcelObject对象中的哈希表进行Key/Value查询,能够快速定位到教材教参集合,性能也优于线性访问。

2.4  实例分析

在“新冠疫情”的影响下,为落实“停课不停教、不停学”的指示精神,电子科技大学图书馆联合教务处、研究生院、信息中心,在五日時间内紧急构建2019-2020年第二学期在线课程资源平台[4]。

该平台的初步数据来源于教务处和研究生院,主要包含了学历、学院、课程和教材教参信息,以EXCEL的形式提供给图书馆。图书馆通过本校数字资源平台,对该数据做附加资源URL处理,生成平台所需的EXCEL并提交给开发人员。该项目以Maven Web App模板构建,EXCEL文件存放于WEB-INF保护目录中,并通过路径搜索的方式读取该文件,加载进内存缓存池。Controller以Struts2的Action实现,业务逻辑集中在对缓存池中的内存对象进行读取和查询。最后项目提交到信息中心做漏洞扫描和安全处理,并最终面向公网发布。

从上述过程可知,EXCEL能友好地编辑修改,操作简洁,故成为多部门协作和数据流转的媒介。图书馆在线课程资源平台直接基于EXCEL而不是数据库,有效地避免了数据库安装、建库建表、数据导入等操作,极大简化了系统部署难度。而在开发上由于是直接读取EXCEL文件并查询哈希表,没有数据库连接配置、DAO/Service层开发、事务管理等操作,代码复杂程度降低,更容易维护和升级。

3  结束语

综上所述,采用EXCEL存储数据,有效地解决了多部门协作的问题,数据的编辑修改方便快捷。同时数据的访问过程为文件读取过程,读取对象为EXCEL的单元格,代码实现上简单直观。最后在项目部署时,仅需将项目工程连同EXCEL文件一同拷贝部署即可,无需额外安装其他软件,系统维护也相对容易。整个平台的数据存储、数据访问、系统部署维护均为轻量级的,这也确保了平台能够在短时间内构建出来并实现上线。

然而上述平台也存在一定的缺陷,一是加载EXCEL过程有大量的异常处理代码,解析过程与EXCEL字段先后顺序严格对应,缺少必要的灵活性;二是当EXCEL数据量较大时,加载进内存过程中对内存容量要求较大;三是缓存失效再次加载EXCEL数据时,若数据量较大,则有一定的延迟反映。这些问题在后续的工作中还需进一步深入分析研究。

参考文献

[1]梁益铭, 谢小燕. 高校图书馆公共卫生治理与服务体系研究——以新冠肺炎疫情防控为例[J]. 高校图书馆工作, 2020, 40(3): 29-36.

[2]惠涓澈, 杨妮, 杜桂平. 机遇与创新: 新冠肺炎疫情下的图书馆阅读推广[J]. 当代图书馆, 2020(2): 27-30.

[3]李蔚蔚. 新冠肺炎疫情期间公共图书馆的网络服务研究[J]. 科教文汇(上旬刊), 2020(6): 163-164.

[4]王惠森, 彭莉红, 周倩. 新冠肺炎疫情下的高校图书馆服务工作——以电子科技大学图书馆为例[J]. 高校图书馆工作, 2020, 40(3): 84-86.

[5]教育部.疫情就是命令——全国教育系统打响疫情防控狙击战[EB/OL].[2020-02-26]. http://www.moe.gov.cn/jyb_xwfb/ xw_zt/moe_357/jyzt_2020n/2020_zt03/yw/202002/t20200203_ 417480.html.

[6]马博韬, 孙鹏, 朱小勇. 红黑树算法研究综述[J]. 网络新媒体技术, 2018, 7(4): 56-62.

[7]时亚南. B+树算法的Java实现方法研究[J]. 计算机技术与发展, 2015, 25(1): 111-114.

[8]叶军伟. 哈希表冲突处理方法浅析[J]. 科技视界, 2014(06): 230.

[9]林跃, 杨倩, 盖志静, 张志坤. Java Web开发中的SSH框架[J]. 湖北农机化, 2020(8): 177.

[10]潘蕊. SSH框架的Web网站设计与实现研究[J]. 成才之路, 2019(36): 58-59.