商用多媒体信息发布系统持久层设计与优化

2015-06-27 08:26吉亚云叶德建
计算机工程 2015年1期
关键词:节目单组件对象

吉亚云,刘 新,叶德建

(复旦大学a.软件学院;b.网络信息安全审计与监控教育部工程研究中心,上海201203)

商用多媒体信息发布系统持久层设计与优化

吉亚云a,刘 新b,叶德建b

(复旦大学a.软件学院;b.网络信息安全审计与监控教育部工程研究中心,上海201203)

大规模的商业多媒体信息发布系统因资源及终端数量庞大,会导致系统性能低下。为此,提出一种能优化系统数据存取操作的数据持久层设计方案。研究并分析多媒体信息发布系统的特征,选择Hibernate框架设计系统持久层,总结Hibernate框架在该类系统中合理并高效使用的方法,针对基于Web的多媒体信息发布系统,给出可以使用Servlet过滤器来管理Hibernate的Session缓存,以延长Session对象的生命周期,减少系统对Session对象的查找,并能较为充分地利用Session对象中的缓存数据。实验结果表明,综合上述多种优化方法,可大幅减少多媒体信息发布系统的资源消耗,有效提高系统的整体性能。

多媒体信息发布系统;数据持久性;Session缓存;过滤器

1 概述

多媒体信息发布系统融合网络技术、信息技术和多媒体技术[1],实现对音视频、图片、文本等多种素材的编辑制作和控制播放,同时支持在显示器、电视机、LED、拼接墙、触摸屏、安卓广告机等多种显示终端上自由组合发布信息,支持在显示屏上任意划分显示区域、定点定时播放以及远程集中式管理[2]。目前,国内多媒体信息发布系统(Multimedia Information Publishing System,MPS)已广泛应用于酒店、医院、银行、商场、交通、传媒、社区等场所,为现代化城市提供了便捷、多样、实时的信息传播。

大型商业多媒体信息发布系统具有资源数量多、终端数量庞大、发布内容丰富多样等特点,因此,系统性能尤为重要。较好的数据持久层设计,能够优化数据存取操作,提高数据库访问效率,从而有效提高系统的性能表现。

数据持久化领域存在着多种成熟的持久化框架,本文结合大规模商用多媒体信息发布系统数据量大、数据之间关系复杂的特点,选择合适的持久化框架,并在系统中进行应用,提出一种优化系统数据存取操作的数据持久层设计方案。

2 多媒体信息发布系统

2.1 系统介绍

多媒体信息发布系统通常由机顶盒终端、发布系统服务器、资源服务器、播放管理工作站等部分组成。依据不同的应用场景,系统组成可能略有不同。在实际应用中,发布系统服务器和资源服务器可以合并为同一台服务器。多媒体信息发布系统网络拓扑结构如图1所示。

图1 多媒体信息发布系统网络拓扑

播放管理中心是对多媒体信息进行编辑处理和控制发布的专业系统平台,它的主要功能包括播放资源管理、节目单制作、终端管理、终端播放管理、数据统计查询、用户管理、权限管理以及系统参数配置等模块。

在一般情况下,用户通过多媒体信息系统,发布信息的操作过程可以分为以下步骤:(1)准备播放资源。用户将音视频、图片、文本、文档、天气等资源上传至系统,进行编辑、预览、分类等操作管理。(2)绘制布局。布局是一个平面的显示模式,定义屏幕上不同区域显示不同类型资源。资源显示区域称为组件。(3)制作节目。用户选择一个布局,为布局中每一个组件设置一系列与组件相同类型的资源进行播放,每个组件的所有资源播放属性集合称为资源播放任务集。(4)编辑节目单。用户选择多个节目编辑为节目单,设置节目播放顺序与播放属性(常规、定时、插播)。(5)发布节目单。用户选择多个终端或终端组播放选定的节目单。终端收到播放命令将即时更新播放内容。

节目单制作与发布相关的概念分析如图 2所示。

图2 节目单制作与发布相关的概念分析

2.2 系统特征分析

本文通过对新华社智能信息发布系统一个星期内的用户操作日志进行统计分析,节目单制作与发布操作所占比例最高,其次是资源上传与用户登录操作。然而节目单制作与发布却是系统性能问题最为突出的地方。存在如下问题:

(1)数据之间关联多且关系复杂

一个节目单可发布到多个终端或终端组进行播放,节目单可包含多个节目,节目对应特定的布局,而一个布局可以被多个节目使用,节目布局中的组件可包含多个资源播放任务,而一个资源又可以被多个节目所使用。

综上所述,系统中各种数据之间密切的关联,且关系复杂。对一个节目单进行编辑时,节目单初始化过程如图3所示,系统将对节目单、节目、布局、组件、任务集、任务、资源等数据进行联合查询,然后将节目单所有相关信息封装并返回到编辑页面。

图3 节目单制作初始化流程

(2)产生大量数据库SQL且以查询为主

因为系统上述特征,在对节目进行编辑时,系统将查询所有使用该节目的节目单,然后更新所有使用这些节目单的终端的播放内容,这将导致大量的数据库操作。

连续添加播放资源后数据库的状态如图4所示,在节目资源播放属性进行修改并应用时,数据库SQL执行语句突增,并且大部分SQL语句为数据库查询语句,增删改语句相对较少。

图4 连续添加播放资源后数据库的状态

(3)用户操作独立性高

在一般情况下,用户对节目单的制作与发布控制独立性比较高。虽然节目或节目单制作操作时间长,但用户的操作数据都是临时存放在浏览器客户端,只有在保存修改时才会对数据库进行修改,并向终端发送发布命令。

2.3 系统持久层设计

在软件的分层体系结构中,持久层是与数据库打交道的逻辑层,在数据库中对数据的增加、删除、查找和修改操作由持久层进行处理[3]。目前,在Java EE应用开发领域存在着JDBC、JDO、EJB实体Bean、对象/关系映射(Object/Relation Mapping, ORM)工具这几种常用的持久层的解决方案[4]。文献[5]对以上解决方案进行了详细的对比。

Hibernate是当前流行的开源ORM工具,它对JDBC进行了轻量级的封装[6],使开发人员可以用面向对象编程的方式操控数据库[7]。Hibernate不仅提供了Java类到数据库表的映射,还提供了数据查询和获取方法。相对于使用JDBC和SQL来手工操作数据库,可大幅度减少操作数据库工作量[8]。文献[5]指出,对于大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率会高的惊人,JDBC次之,而EJB架构很可能会失败。

商业多媒体信息发布系统可定义为大的项目,且具有持久层关系映射复杂的特征。采用Hibernate框架对业务层数据的操作进行持久化是最好的选择。

3 Hibernate在系统中的优化使用

本文采用新华社多媒体信息发布系统作为分析对象,该系统应用于新华社新闻、传媒、娱乐、广告等信息的发布,应用于全国多个城市,拥有上万个显示终端。

3.1 抓取策略的调整

本文2.2节分析指出,多媒体信息发布系统数据之间关系多且相对复杂,所以,在查询获取数据时需对查询对象及其关联对象的获取方式进行权衡。

Hibernate提供4种抓取策略来获取关联对象,即连接抓取、查询抓取、子查询抓取和批量抓取[9]。连接抓取为立即抓取;Hibernate默认为延迟抓取除非你显式的指定lazy=false禁止延迟抓取,否则只有真正访问关联关系时,才会执行对关联的对象的查询语句。

在新华社多媒体信息发布系统的Hibernate配置文件中,所有的关联对象的lazy属性都被设置为false,即立即抓取。这使得用户在对一个简单对象进行查询时,如节目单信息,系统将会自动加载与其相关联对象,节目单相关联的节目列表、节目相关联的布局等信息,造成极大的浪费。因此,对于持久层关系映射复杂的多媒体信息发布系统应尽量使用Hibernate的延迟加载特性,以避免大量不需要的查询。

另外,在对关联对象进行抓取时可以使用批量抓取方式,通过对配置文件显示地设定合理的批处理参数(batch_size)在类级别或集合级别批量抓取关联对象。

3.2 Hibernate缓存的使用

Hibernate缓存包括一级缓存和二级缓存,一级缓存是通过将数据存放在Session对象中来实现的,也称为 Session缓 存;Hibernate二级缓存由SessionFactory对象进行管理,是应用级别的缓存,二级缓存主要由可卸载的第三方缓存组件构成,如EHCache、0SCache、JBossCache等[10]。

使用Hibernate二级缓存当系统对数据进行过一次查询后,在Session对象已经关闭再次对相同的数据进行查询时,就会先从二级缓存查找是否已经有了该条数据,当二级缓存中没有找到该数据才会到数据库中查询[11]。

新华社多媒体信息发布系统中未配置Hibernate二级缓存,而多媒体信息发布系统用户的操作数据在一段时间内具有重复性,使用二级缓存可减少对数据库的查询。

3.3 Session管理机制

Hibernate Session缓存保着持Session内部的数据状态同步[12]。在同一个Session中不会对同一个对象进行2次加载,因为第2次加载时Session会从缓存中读取,所以不会向数据库发出2条SQL语句。但Session缓存是不会共享的,在Session关闭之后数据将全部消失,所以合理的Session管理机制显得尤为重要。

新华社多媒体信息发布系统很好地实现了业务逻辑层和数据持久层的分离,但在系统的每个数据访问对象(Data Access Object,DAO)中,每一个方法都是先开辟一个Session对象,在获取数据后立即将Session关闭。多媒体信息发布系统的关系映射复杂,在一个操作内可能对同一个对象多次加载或使用。另外,系统用户操作相对独立,单个用户操作并不会长期占用资源。若在一个用户操作内只开辟一个Session对象进行重复利用,将减少系统数据库查询。

在Hibernate中 SessionFactory是线程安全的, SessionFactory负责创建Session对象;而Session不是线程安全的,也就是说如果多个线程同时访问一个Session进行数据操作将会导致Session数据逻辑混乱。ThreadLocal是一种Java线程绑定机制,JVM为每一个运行的线程绑定了私有的本地实例存取空间,从而为多线程环境提供了常出现的并发访问问题提供了一种隔离机制[13]。

对于一个基于Web的应用,首先Servlet是多线程的。Servlet2.3规范中引入了过滤器(Filter)[14], Filter的生命周期是贯穿其所覆盖的Servlet及其底层对象的,Filter在 Servlet被调用之前执行,在Servlet调用结束之后结束。

基于上面的分析,可以通过添加一个Hibernate Session对象管理Filter,设置一个静态的ThreadLocal对象为其成员变量用以存取Session,在Filter的doFilter()方法中,链接其他Filter之前创建一个新的session实例到ThreadLocal中,在链接其他Filter之后设置ThreadLocal中的Session为空,并关闭Session。示例代码如下:

以上代码实现了通过Filter获取和关闭Session,使得周期内所有对象都对此Session实例进行重用,保证了一个 HTTP请求处理过程中只占用一个Session,充分利用了Session对象的缓存,系统数据库查询次数将大大降低。

4 优化实施与结果

4.1 系统优化实施

本文对新华社智能多媒体信息发布系统持久层进行的优化工作,主要包括以下部分:

(1)使用Hibernate的延迟加载机制。

(2)集合的加载采用批量抓取策略,并且对批处理参数(batch_size)的设定进行优化。

(3)使用EHCache缓存组件作为Hibernate二级缓存。

(4)使用Servlet Filter进行Hibernate Session对象管理,并使用ThreadLocal机制实现Session的线程安全存取。

(5)此外,注重业务逻辑与持久层的分离,注重Hibernate查询方法的选用。

4.2 Hibernate统计机制

没有监测和性能参数而进行优化是毫无意义的。Hibernate为其内部操作提供了一系列的示意图,因此,可以从每个Session Factory抓取其统计数据,如Session数、数据库连接数、事务数、实体集合个数、二级缓存使用情况等。

可以通过在hibernate.cfg.xml配置文件中将统计属性hibernate.generate_statistics设置为true,或者在运行期间调用 SessionFactory的 getStatistics(). setStatisticsEnabled(true)方法来使用Hibernate统计机制。

4.3 系统优化结果

系统具体优化实施环境为:硬件环境:CPU2.27 GHz,内存2.0 GB;操作系统:CentOS 5 Linux操作系统;Web容器:Tomcat 7.0服务器;数据库: MySQL5.5版本。

测试用例1节目单编辑初始化。每个节目单包含10个节目信息,每个节目布局包含3个~4个组件,每个组件中包含10个~12个播放资源。节目单发布于4个播放终端。

测试用例2节目编辑删除资源播放任务。节目包含5个资源组件,每个组件包含10个~12个资源,节目被5个节目单所使用,每个节目单发布给3个~4个终端组。

IIPS资源管理平台优化前后性能对比如表1所示,表中页面响应时间为同一个用例多次操作系统的平均响应时间。二级缓存second_level_cache指标表示放置数/命中数/错过数(put/hit/miss)。

表1 IIPS资源管理平台优化前后性能对比

通过表1可知,经过优化后的多媒体信息发布系统节目单初始化以及节目编辑操作,向数据库发送的SQL数目大大减少,开辟的Session对象数和数据库连接数也明显降低,系统的页面响应时间缩短,系统性能明显提高。

5 结束语

本文通过对商用多媒体信息发布系统的特征进行分析,采用Hibernate作为系统持久层框架,并对Hibernate在该类系统中的使用进行了优化,实验结果证明系统性能得到了提高。目前,本文分析的多媒体信息发布系统都是基于关系型数据库,随着商用多媒体信息发布系统的规模不断扩大,后期将会对非关系型数据库在该类系统中的应用进行调研与测试。

[1] 赵艳伟.浅析多媒体信息发布系统[J].科技与企业, 2012,21(5):85-85.

[2] 远红亮.多媒体信息发布系统及图书馆应用[J].现代情报,2011,31(7):85-89.

[3] 吴卫平,王丽芳,蒋泽军,等.基于ORM的数据持久层框架研究[J].微电子学与计算机,2008,25(7):188-190,193.

[4] 徐世友,袁兆山,李 峻,等.Java EE数据持久层解决方案的设计与实现[J].合肥工业大学学报:自然科学版,2009,32(1):47-50.

[5] 方 巍,孙 涌,崔志明,等.J2EE数据持久层的应用研究[J].计算机技术与发展,2007,17(2):68-71.

[6] Wu Peng,Yin Ke.Application Research on a Persistent Technique Based on Hibernate[C]//Proceedingsof InternationalConference on Computer Design and Applications.[S.l.]:IEEE Press,2010:629-631.

[7] 董洪杉,窦延平.利用Hibernate的J2EE数据持久层的解决方案[J].计算机工程,2004,30(z1):17-18,86.

[8] 刘艳霞.J2EE项目中的数据持久层设计[J].工程地质计算机应用,2005,10(1):10-13.

[9] 陈正举.基于HIBERNATE的数据库访问优化[J].计算机应用与软件,2012,29(7):144-149.

[10] 程光磊.关于Hibernate缓存机制的研究[J].软件导刊,2011,10(4):30-31.

[11] Wu Qinglin,Hu Yanzhong,Wang Yan.Research on Data Persistence Layer Based on Hibernate Framework[C]// Proceedings of the 2nd IEEE International Workshop on Intelligent Systems and Applications.[S.l.]:IEEE Press, 2010:1-4.

[12] 敖小玲,黄 晋.Hibernate缓存机制研究与应用[J].计算机与现代化,2010,26(9):68-72.

[13] 唐拥政,衡冬梅.基于Hibernate的数据持久层关键技术的研究[J].盐城工学院学报:自然科学版,2006,19(2): 18-21.

[14] Coward D,Yoshida Y.Java Servlet Specification Version 2.3[EB/OL].(2010-11-21).http://download.csdn.net/ detail/bjdream1987/2706663.

编辑 刘 冰

Design and Optimization of Persistence Layer for Commercial Multimedia Information Publishing System

JI Yayuna,LIU Xinb,YE Dejianb
(a.School of Software;b.Engineering Research Center of Cyber Security Auditing and Monitoring,Ministry of Education,Fudan University,Shanghai 201203,China)

For large-scale commercial Multimedia Information Publishing System(MPS)contains huge number of resources and terminals,that can lead to low performance of the system,this paper puts forward a design plan of data persistence layer to optimize the system data access operation.Based on the research and analysis of the characteristics of MPS,it chooses the Hibernate framework as the system data persistence design,summarizes and analyzes the general methods of how to use Hibernate properly in MPS,and puts forward that web-based MPS can use the servlet filters to manage the Hibernate session,which can prolong the life cycle of the session object and reduces the system consumption of the session object,and makes full use of the cached data in the session object.Experimental results show that the integrated optimization method mentioned above,can greatly reduce the resource consumption of MPS system and improves the overall performance of the system effectively.

Multimedia Information Publishing System(MPS);data persistence;Session cache;filter

1000-3428(2015)01-0261-05

A

TP37

10.3969/j.issn.1000-3428.2015.01.049

上海市科技成果转化和产业化基金资助项目“基于云计算构建的电信网络交互式电视业务系统研发”(12511503000)。

吉亚云(1989-),女,硕士研究生,主研方向:网络多媒体;刘 新,讲师;叶德建,副教授。

2014-01-22

2014-04-04 E-mail:11212010013@fudan.edu.cn

中文引用格式:吉亚云,刘 新,叶德建.商用多媒体信息发布系统持久层设计与优化[J].计算机工程, 2015,41(1):261-265.

英文引用格式:Ji Yayun,Liu Xin,Ye Dejian.Design and Optimization of Persistence Layer for Commercial Multimedia Information Publishing System[J].Computer Engineering,2015,41(1):261-265.

猜你喜欢
节目单组件对象
无人机智能巡检在光伏电站组件诊断中的应用
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
攻略对象的心思好难猜
幽你一默
到底谁先唱
基于熵的快速扫描法的FNEA初始对象的生成方法
区间对象族的可镇定性分析
坐在节目单上