吉亞云,劉 新,葉德建
(復旦大學a.軟件學院;b.網(wǎng)絡信息安全審計與監(jiān)控教育部工程研究中心,上海201203)
商用多媒體信息發(fā)布系統(tǒng)持久層設計與優(yōu)化
吉亞云a,劉 新b,葉德建b
(復旦大學a.軟件學院;b.網(wǎng)絡信息安全審計與監(jiān)控教育部工程研究中心,上海201203)
大規(guī)模的商業(yè)多媒體信息發(fā)布系統(tǒng)因資源及終端數(shù)量龐大,會導致系統(tǒng)性能低下。為此,提出一種能優(yōu)化系統(tǒng)數(shù)據(jù)存取操作的數(shù)據(jù)持久層設計方案。研究并分析多媒體信息發(fā)布系統(tǒng)的特征,選擇Hibernate框架設計系統(tǒng)持久層,總結Hibernate框架在該類系統(tǒng)中合理并高效使用的方法,針對基于Web的多媒體信息發(fā)布系統(tǒng),給出可以使用Servlet過濾器來管理Hibernate的Session緩存,以延長Session對象的生命周期,減少系統(tǒng)對Session對象的查找,并能較為充分地利用Session對象中的緩存數(shù)據(jù)。實驗結果表明,綜合上述多種優(yōu)化方法,可大幅減少多媒體信息發(fā)布系統(tǒng)的資源消耗,有效提高系統(tǒng)的整體性能。
多媒體信息發(fā)布系統(tǒng);數(shù)據(jù)持久性;Session緩存;過濾器
多媒體信息發(fā)布系統(tǒng)融合網(wǎng)絡技術、信息技術和多媒體技術[1],實現(xiàn)對音視頻、圖片、文本等多種素材的編輯制作和控制播放,同時支持在顯示器、電視機、LED、拼接墻、觸摸屏、安卓廣告機等多種顯示終端上自由組合發(fā)布信息,支持在顯示屏上任意劃分顯示區(qū)域、定點定時播放以及遠程集中式管理[2]。目前,國內(nèi)多媒體信息發(fā)布系統(tǒng)(Multimedia Information Publishing System,MPS)已廣泛應用于酒店、醫(yī)院、銀行、商場、交通、傳媒、社區(qū)等場所,為現(xiàn)代化城市提供了便捷、多樣、實時的信息傳播。
大型商業(yè)多媒體信息發(fā)布系統(tǒng)具有資源數(shù)量多、終端數(shù)量龐大、發(fā)布內(nèi)容豐富多樣等特點,因此,系統(tǒng)性能尤為重要。較好的數(shù)據(jù)持久層設計,能夠優(yōu)化數(shù)據(jù)存取操作,提高數(shù)據(jù)庫訪問效率,從而有效提高系統(tǒng)的性能表現(xiàn)。
數(shù)據(jù)持久化領域存在著多種成熟的持久化框架,本文結合大規(guī)模商用多媒體信息發(fā)布系統(tǒng)數(shù)據(jù)量大、數(shù)據(jù)之間關系復雜的特點,選擇合適的持久化框架,并在系統(tǒng)中進行應用,提出一種優(yōu)化系統(tǒng)數(shù)據(jù)存取操作的數(shù)據(jù)持久層設計方案。
2.1 系統(tǒng)介紹
多媒體信息發(fā)布系統(tǒng)通常由機頂盒終端、發(fā)布系統(tǒng)服務器、資源服務器、播放管理工作站等部分組成。依據(jù)不同的應用場景,系統(tǒng)組成可能略有不同。在實際應用中,發(fā)布系統(tǒng)服務器和資源服務器可以合并為同一臺服務器。多媒體信息發(fā)布系統(tǒng)網(wǎng)絡拓撲結構如圖1所示。

圖1 多媒體信息發(fā)布系統(tǒng)網(wǎng)絡拓撲
播放管理中心是對多媒體信息進行編輯處理和控制發(fā)布的專業(yè)系統(tǒng)平臺,它的主要功能包括播放資源管理、節(jié)目單制作、終端管理、終端播放管理、數(shù)據(jù)統(tǒng)計查詢、用戶管理、權限管理以及系統(tǒng)參數(shù)配置等模塊。
在一般情況下,用戶通過多媒體信息系統(tǒng),發(fā)布信息的操作過程可以分為以下步驟:(1)準備播放資源。用戶將音視頻、圖片、文本、文檔、天氣等資源上傳至系統(tǒng),進行編輯、預覽、分類等操作管理。(2)繪制布局。布局是一個平面的顯示模式,定義屏幕上不同區(qū)域顯示不同類型資源。資源顯示區(qū)域稱為組件。(3)制作節(jié)目。用戶選擇一個布局,為布局中每一個組件設置一系列與組件相同類型的資源進行播放,每個組件的所有資源播放屬性集合稱為資源播放任務集。(4)編輯節(jié)目單。用戶選擇多個節(jié)目編輯為節(jié)目單,設置節(jié)目播放順序與播放屬性(常規(guī)、定時、插播)。(5)發(fā)布節(jié)目單。用戶選擇多個終端或終端組播放選定的節(jié)目單。終端收到播放命令將即時更新播放內(nèi)容。
節(jié)目單制作與發(fā)布相關的概念分析如圖 2所示。

圖2 節(jié)目單制作與發(fā)布相關的概念分析
2.2 系統(tǒng)特征分析
本文通過對新華社智能信息發(fā)布系統(tǒng)一個星期內(nèi)的用戶操作日志進行統(tǒng)計分析,節(jié)目單制作與發(fā)布操作所占比例最高,其次是資源上傳與用戶登錄操作。然而節(jié)目單制作與發(fā)布卻是系統(tǒng)性能問題最為突出的地方。存在如下問題:
(1)數(shù)據(jù)之間關聯(lián)多且關系復雜
一個節(jié)目單可發(fā)布到多個終端或終端組進行播放,節(jié)目單可包含多個節(jié)目,節(jié)目對應特定的布局,而一個布局可以被多個節(jié)目使用,節(jié)目布局中的組件可包含多個資源播放任務,而一個資源又可以被多個節(jié)目所使用。
綜上所述,系統(tǒng)中各種數(shù)據(jù)之間密切的關聯(lián),且關系復雜。對一個節(jié)目單進行編輯時,節(jié)目單初始化過程如圖3所示,系統(tǒng)將對節(jié)目單、節(jié)目、布局、組件、任務集、任務、資源等數(shù)據(jù)進行聯(lián)合查詢,然后將節(jié)目單所有相關信息封裝并返回到編輯頁面。

圖3 節(jié)目單制作初始化流程
(2)產(chǎn)生大量數(shù)據(jù)庫SQL且以查詢?yōu)橹?/p>
因為系統(tǒng)上述特征,在對節(jié)目進行編輯時,系統(tǒng)將查詢所有使用該節(jié)目的節(jié)目單,然后更新所有使用這些節(jié)目單的終端的播放內(nèi)容,這將導致大量的數(shù)據(jù)庫操作。
連續(xù)添加播放資源后數(shù)據(jù)庫的狀態(tài)如圖4所示,在節(jié)目資源播放屬性進行修改并應用時,數(shù)據(jù)庫SQL執(zhí)行語句突增,并且大部分SQL語句為數(shù)據(jù)庫查詢語句,增刪改語句相對較少。

圖4 連續(xù)添加播放資源后數(shù)據(jù)庫的狀態(tài)
(3)用戶操作獨立性高
在一般情況下,用戶對節(jié)目單的制作與發(fā)布控制獨立性比較高。雖然節(jié)目或節(jié)目單制作操作時間長,但用戶的操作數(shù)據(jù)都是臨時存放在瀏覽器客戶端,只有在保存修改時才會對數(shù)據(jù)庫進行修改,并向終端發(fā)送發(fā)布命令。
2.3 系統(tǒng)持久層設計
在軟件的分層體系結構中,持久層是與數(shù)據(jù)庫打交道的邏輯層,在數(shù)據(jù)庫中對數(shù)據(jù)的增加、刪除、查找和修改操作由持久層進行處理[3]。目前,在Java EE應用開發(fā)領域存在著JDBC、JDO、EJB實體Bean、對象/關系映射(Object/Relation Mapping, ORM)工具這幾種常用的持久層的解決方案[4]。文獻[5]對以上解決方案進行了詳細的對比。
Hibernate是當前流行的開源ORM工具,它對JDBC進行了輕量級的封裝[6],使開發(fā)人員可以用面向對象編程的方式操控數(shù)據(jù)庫[7]。Hibernate不僅提供了Java類到數(shù)據(jù)庫表的映射,還提供了數(shù)據(jù)查詢和獲取方法。相對于使用JDBC和SQL來手工操作數(shù)據(jù)庫,可大幅度減少操作數(shù)據(jù)庫工作量[8]。文獻[5]指出,對于大的項目,特別是持久層關系映射很復雜的情況下,Hibernate效率會高的驚人,JDBC次之,而EJB架構很可能會失敗。
商業(yè)多媒體信息發(fā)布系統(tǒng)可定義為大的項目,且具有持久層關系映射復雜的特征。采用Hibernate框架對業(yè)務層數(shù)據(jù)的操作進行持久化是最好的選擇。
本文采用新華社多媒體信息發(fā)布系統(tǒng)作為分析對象,該系統(tǒng)應用于新華社新聞、傳媒、娛樂、廣告等信息的發(fā)布,應用于全國多個城市,擁有上萬個顯示終端。
3.1 抓取策略的調整
本文2.2節(jié)分析指出,多媒體信息發(fā)布系統(tǒng)數(shù)據(jù)之間關系多且相對復雜,所以,在查詢獲取數(shù)據(jù)時需對查詢對象及其關聯(lián)對象的獲取方式進行權衡。
Hibernate提供4種抓取策略來獲取關聯(lián)對象,即連接抓取、查詢抓取、子查詢抓取和批量抓取[9]。連接抓取為立即抓取;Hibernate默認為延遲抓取除非你顯式的指定lazy=false禁止延遲抓取,否則只有真正訪問關聯(lián)關系時,才會執(zhí)行對關聯(lián)的對象的查詢語句。
在新華社多媒體信息發(fā)布系統(tǒng)的Hibernate配置文件中,所有的關聯(lián)對象的lazy屬性都被設置為false,即立即抓取。這使得用戶在對一個簡單對象進行查詢時,如節(jié)目單信息,系統(tǒng)將會自動加載與其相關聯(lián)對象,節(jié)目單相關聯(lián)的節(jié)目列表、節(jié)目相關聯(lián)的布局等信息,造成極大的浪費。因此,對于持久層關系映射復雜的多媒體信息發(fā)布系統(tǒng)應盡量使用Hibernate的延遲加載特性,以避免大量不需要的查詢。
另外,在對關聯(lián)對象進行抓取時可以使用批量抓取方式,通過對配置文件顯示地設定合理的批處理參數(shù)(batch_size)在類級別或集合級別批量抓取關聯(lián)對象。
3.2 Hibernate緩存的使用
Hibernate緩存包括一級緩存和二級緩存,一級緩存是通過將數(shù)據(jù)存放在Session對象中來實現(xiàn)的,也稱為 Session緩 存;Hibernate二級緩存由SessionFactory對象進行管理,是應用級別的緩存,二級緩存主要由可卸載的第三方緩存組件構成,如EHCache、0SCache、JBossCache等[10]。
使用Hibernate二級緩存當系統(tǒng)對數(shù)據(jù)進行過一次查詢后,在Session對象已經(jīng)關閉再次對相同的數(shù)據(jù)進行查詢時,就會先從二級緩存查找是否已經(jīng)有了該條數(shù)據(jù),當二級緩存中沒有找到該數(shù)據(jù)才會到數(shù)據(jù)庫中查詢[11]。
新華社多媒體信息發(fā)布系統(tǒng)中未配置Hibernate二級緩存,而多媒體信息發(fā)布系統(tǒng)用戶的操作數(shù)據(jù)在一段時間內(nèi)具有重復性,使用二級緩存可減少對數(shù)據(jù)庫的查詢。
3.3 Session管理機制
Hibernate Session緩存保著持Session內(nèi)部的數(shù)據(jù)狀態(tài)同步[12]。在同一個Session中不會對同一個對象進行2次加載,因為第2次加載時Session會從緩存中讀取,所以不會向數(shù)據(jù)庫發(fā)出2條SQL語句。但Session緩存是不會共享的,在Session關閉之后數(shù)據(jù)將全部消失,所以合理的Session管理機制顯得尤為重要。
新華社多媒體信息發(fā)布系統(tǒng)很好地實現(xiàn)了業(yè)務邏輯層和數(shù)據(jù)持久層的分離,但在系統(tǒng)的每個數(shù)據(jù)訪問對象(Data Access Object,DAO)中,每一個方法都是先開辟一個Session對象,在獲取數(shù)據(jù)后立即將Session關閉。多媒體信息發(fā)布系統(tǒng)的關系映射復雜,在一個操作內(nèi)可能對同一個對象多次加載或使用。另外,系統(tǒng)用戶操作相對獨立,單個用戶操作并不會長期占用資源。若在一個用戶操作內(nèi)只開辟一個Session對象進行重復利用,將減少系統(tǒng)數(shù)據(jù)庫查詢。
在Hibernate中 SessionFactory是線程安全的, SessionFactory負責創(chuàng)建Session對象;而Session不是線程安全的,也就是說如果多個線程同時訪問一個Session進行數(shù)據(jù)操作將會導致Session數(shù)據(jù)邏輯混亂。ThreadLocal是一種Java線程綁定機制,JVM為每一個運行的線程綁定了私有的本地實例存取空間,從而為多線程環(huán)境提供了常出現(xiàn)的并發(fā)訪問問題提供了一種隔離機制[13]。
對于一個基于Web的應用,首先Servlet是多線程的。Servlet2.3規(guī)范中引入了過濾器(Filter)[14], Filter的生命周期是貫穿其所覆蓋的Servlet及其底層對象的,Filter在 Servlet被調用之前執(zhí)行,在Servlet調用結束之后結束。
基于上面的分析,可以通過添加一個Hibernate Session對象管理Filter,設置一個靜態(tài)的ThreadLocal對象為其成員變量用以存取Session,在Filter的doFilter()方法中,鏈接其他Filter之前創(chuàng)建一個新的session實例到ThreadLocal中,在鏈接其他Filter之后設置ThreadLocal中的Session為空,并關閉Session。示例代碼如下:


以上代碼實現(xiàn)了通過Filter獲取和關閉Session,使得周期內(nèi)所有對象都對此Session實例進行重用,保證了一個 HTTP請求處理過程中只占用一個Session,充分利用了Session對象的緩存,系統(tǒng)數(shù)據(jù)庫查詢次數(shù)將大大降低。
4.1 系統(tǒng)優(yōu)化實施
本文對新華社智能多媒體信息發(fā)布系統(tǒng)持久層進行的優(yōu)化工作,主要包括以下部分:
(1)使用Hibernate的延遲加載機制。
(2)集合的加載采用批量抓取策略,并且對批處理參數(shù)(batch_size)的設定進行優(yōu)化。
(3)使用EHCache緩存組件作為Hibernate二級緩存。
(4)使用Servlet Filter進行Hibernate Session對象管理,并使用ThreadLocal機制實現(xiàn)Session的線程安全存取。
(5)此外,注重業(yè)務邏輯與持久層的分離,注重Hibernate查詢方法的選用。
4.2 Hibernate統(tǒng)計機制
沒有監(jiān)測和性能參數(shù)而進行優(yōu)化是毫無意義的。Hibernate為其內(nèi)部操作提供了一系列的示意圖,因此,可以從每個Session Factory抓取其統(tǒng)計數(shù)據(jù),如Session數(shù)、數(shù)據(jù)庫連接數(shù)、事務數(shù)、實體集合個數(shù)、二級緩存使用情況等。
可以通過在hibernate.cfg.xml配置文件中將統(tǒng)計屬性hibernate.generate_statistics設置為true,或者在運行期間調用 SessionFactory的 getStatistics(). setStatisticsEnabled(true)方法來使用Hibernate統(tǒng)計機制。
4.3 系統(tǒng)優(yōu)化結果
系統(tǒng)具體優(yōu)化實施環(huán)境為:硬件環(huán)境:CPU2.27 GHz,內(nèi)存2.0 GB;操作系統(tǒng):CentOS 5 Linux操作系統(tǒng);Web容器:Tomcat 7.0服務器;數(shù)據(jù)庫: MySQL5.5版本。
測試用例1節(jié)目單編輯初始化。每個節(jié)目單包含10個節(jié)目信息,每個節(jié)目布局包含3個~4個組件,每個組件中包含10個~12個播放資源。節(jié)目單發(fā)布于4個播放終端。
測試用例2節(jié)目編輯刪除資源播放任務。節(jié)目包含5個資源組件,每個組件包含10個~12個資源,節(jié)目被5個節(jié)目單所使用,每個節(jié)目單發(fā)布給3個~4個終端組。
IIPS資源管理平臺優(yōu)化前后性能對比如表1所示,表中頁面響應時間為同一個用例多次操作系統(tǒng)的平均響應時間。二級緩存second_level_cache指標表示放置數(shù)/命中數(shù)/錯過數(shù)(put/hit/miss)。

表1 IIPS資源管理平臺優(yōu)化前后性能對比
通過表1可知,經(jīng)過優(yōu)化后的多媒體信息發(fā)布系統(tǒng)節(jié)目單初始化以及節(jié)目編輯操作,向數(shù)據(jù)庫發(fā)送的SQL數(shù)目大大減少,開辟的Session對象數(shù)和數(shù)據(jù)庫連接數(shù)也明顯降低,系統(tǒng)的頁面響應時間縮短,系統(tǒng)性能明顯提高。
本文通過對商用多媒體信息發(fā)布系統(tǒng)的特征進行分析,采用Hibernate作為系統(tǒng)持久層框架,并對Hibernate在該類系統(tǒng)中的使用進行了優(yōu)化,實驗結果證明系統(tǒng)性能得到了提高。目前,本文分析的多媒體信息發(fā)布系統(tǒng)都是基于關系型數(shù)據(jù)庫,隨著商用多媒體信息發(fā)布系統(tǒng)的規(guī)模不斷擴大,后期將會對非關系型數(shù)據(jù)庫在該類系統(tǒng)中的應用進行調研與測試。
[1] 趙艷偉.淺析多媒體信息發(fā)布系統(tǒng)[J].科技與企業(yè), 2012,21(5):85-85.
[2] 遠紅亮.多媒體信息發(fā)布系統(tǒng)及圖書館應用[J].現(xiàn)代情報,2011,31(7):85-89.
[3] 吳衛(wèi)平,王麗芳,蔣澤軍,等.基于ORM的數(shù)據(jù)持久層框架研究[J].微電子學與計算機,2008,25(7):188-190,193.
[4] 徐世友,袁兆山,李 峻,等.Java EE數(shù)據(jù)持久層解決方案的設計與實現(xiàn)[J].合肥工業(yè)大學學報:自然科學版,2009,32(1):47-50.
[5] 方 巍,孫 涌,崔志明,等.J2EE數(shù)據(jù)持久層的應用研究[J].計算機技術與發(fā)展,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數(shù)據(jù)持久層的解決方案[J].計算機工程,2004,30(z1):17-18,86.
[8] 劉艷霞.J2EE項目中的數(shù)據(jù)持久層設計[J].工程地質計算機應用,2005,10(1):10-13.
[9] 陳正舉.基于HIBERNATE的數(shù)據(jù)庫訪問優(yōu)化[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].計算機與現(xiàn)代化,2010,26(9):68-72.
[13] 唐擁政,衡冬梅.基于Hibernate的數(shù)據(jù)持久層關鍵技術的研究[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
上海市科技成果轉化和產(chǎn)業(yè)化基金資助項目“基于云計算構建的電信網(wǎng)絡交互式電視業(yè)務系統(tǒng)研發(fā)”(12511503000)。
吉亞云(1989-),女,碩士研究生,主研方向:網(wǎng)絡多媒體;劉 新,講師;葉德建,副教授。
2014-01-22
2014-04-04 E-mail:11212010013@fudan.edu.cn
中文引用格式:吉亞云,劉 新,葉德建.商用多媒體信息發(fā)布系統(tǒng)持久層設計與優(yōu)化[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.