蔡 婷 蔡 宇 歐陽凱 周敬利
一種面向SaaS應用的差異數(shù)據(jù)存儲方法
蔡 婷1蔡 宇1歐陽凱2周敬利2
1(重慶郵電大學移通學院 重慶 401520)
2(華中科技大學計算機學院 湖北 武漢 430074)
為解決SaaS(Software as a Service)應用中多租戶重復定制造成的數(shù)據(jù)冗余存儲問題,提出一種基于元數(shù)據(jù)的差異數(shù)據(jù)存儲方法。該方案研究傳統(tǒng)元數(shù)據(jù)驅動的存儲模式,通過對元數(shù)據(jù)的分類定義,給出差異存儲方案的形式化語義和數(shù)據(jù)存儲策略。最后分別對增刪改查操作提出該方案的數(shù)據(jù)訪問算法。計算表明,差異存儲方法在冗余減少的概率分析下顯示出較高的存儲空間利用效率,有效地減少了租戶的冗余存儲。同時性能測試結果還反映出該方案具有較好的數(shù)據(jù)訪問性能。
SaaS 多租戶 元數(shù)據(jù) 差異存儲 方法
在以互聯(lián)、開放、共享和協(xié)作為主旋律的互聯(lián)網(wǎng)計算環(huán)境下,軟件呈現(xiàn)出網(wǎng)絡化、服務化、虛擬化和集成化的發(fā)展趨勢。SaaS作為云計算環(huán)境下一種新興的服務供給模式誕生了[1]。SaaS是指可共享的Web應用的部署、運營和使用模式,它強調將應用軟件統(tǒng)一部署在運營端,用戶則通過網(wǎng)絡以按需付費等商業(yè)模式來使用應用軟件,并且由運營端統(tǒng)一對應用軟件需要的計算、存儲、帶寬資源進行分配管理和優(yōu)化[2]。
多租戶是SaaS模式的核心概念之一。SaaS最大的特征之一就是單實例多租賃,即一個應用可以被多個租戶租賃,并且支持租戶的按需定制[3]。然而,隨著SaaS應用中租戶的數(shù)目及定制數(shù)據(jù)量呈海量增長,給SaaS系統(tǒng)的數(shù)據(jù)存儲帶來了巨大的挑戰(zhàn)。一般來說,SaaS系統(tǒng)中多租戶數(shù)據(jù)存儲服務應該同時滿足以下兩個技術指標:
1) 高效的存儲空間利用率;
2) 良好的數(shù)據(jù)訪問性能。
然而,以上兩點可能會相互制約。例如空間利用率高的數(shù)據(jù)存儲模式,存儲空間固然小,但系統(tǒng)性能可能會因此受到影響。圍繞SaaS應用中多租戶的數(shù)據(jù)存儲問題,國內外學者開展了大量研究。例如:定制追加字段法[4]、預先分配字段法[5]、擴展關聯(lián)表[5]、數(shù)據(jù)透視表[6]、Chunk Folding[4,6]、XML字段拓展技術[7]、純元數(shù)據(jù)技術[8-10]等??偨Y當前學術界的研究成果,主流的數(shù)據(jù)存儲方式可以劃分為兩類:(1) 基于鍵值對方式的數(shù)據(jù)存儲方式;(2) 基于元數(shù)據(jù)驅動的數(shù)據(jù)存儲模式。其中,元數(shù)據(jù)技術是互聯(lián)網(wǎng)分布式系統(tǒng)實現(xiàn)SaaS模式下多租戶定制的關鍵,定制過程中通過字段元數(shù)據(jù)表明確租戶和定義字段間的映射關系。本文在基于元數(shù)據(jù)存儲模式的基礎上展開研究,分析了SaaS應用中在進行多租戶的定制行為時出現(xiàn)的不同租戶對于相同數(shù)據(jù)對象重復定制從而導致的存儲空間浪費問題,提出一種面向SaaS應用的差異數(shù)據(jù)存儲方法。最后通過數(shù)學計算和實驗測試驗證了該策略的存儲效率和訪問性能。
元數(shù)據(jù)驅動的支持SaaS模式的多租戶定制系統(tǒng)能夠給用戶提供良好的數(shù)據(jù)定制服務[11]?;谠獢?shù)據(jù)的數(shù)據(jù)存儲設計不同于傳統(tǒng)的靜態(tài)數(shù)據(jù)庫存放方式,它采用運行時動態(tài)生成租戶數(shù)據(jù)完整視圖的方式,很好地支持了大量租戶靈活多變的數(shù)據(jù)結構,從而極大地方便了用戶的定制服務。然而,在租戶的定制過程中,相同的數(shù)據(jù)對象,可以被不同的租戶定制。Saas應用模式的這種多租戶的特性極易導致定制對象大量的重復存儲,造成存儲空間的過度浪費。表1為借鑒Force.com[6]的元數(shù)據(jù)設計方式描述的一個多租戶數(shù)據(jù)定制實例。其中,TID表示租戶標識,ObjID表示租戶的定制對象,F(xiàn)ieldID用來唯一標識定制對象的屬性字段,Val則代表租戶對應于某個屬性的具體值。
表1 多租戶數(shù)據(jù)定制實例
表1描述了用來存儲租戶定制對象的元數(shù)據(jù)表。從存儲結果可以看到T1、T2、T3等多個租戶同時定制了相同的對象OBJECT,并且每個租戶對于OBJECT對象的三個屬性信息(a,b,c)都進行了完全存儲??梢灶A測,隨著SaaS應用中租戶數(shù)量的激烈增長,這種傳統(tǒng)的基于元數(shù)據(jù)的存儲模式必將導致定制對象的大量重復存儲,加大了存儲成本開銷。為解決該問題,本文分析并提出了基于元數(shù)據(jù)的差異數(shù)據(jù)存儲模式,同時給出了存儲方案的數(shù)學定義與算法設計。
2.1 元數(shù)據(jù)分類與定義
為描述和定義差異數(shù)據(jù)存儲模式,本文對元數(shù)據(jù)進行了進一步分類,其語義描述如下:
定義1 基本元數(shù)據(jù) 基本元數(shù)據(jù)是指由軟件提供商所提供的元數(shù)據(jù),其還包括在該元數(shù)據(jù)基礎上共享生成的其他定義和配置數(shù)據(jù)對象。設mi為SaaS應用中某個對象對應的基本元數(shù)據(jù),集合Basic_Metadata為系統(tǒng)中所有對象的基本元數(shù)據(jù)集合,則:Basic_Metadata={m1,m2,…,mi,…,mn}(1≤i≤n)。
定義2 擴展元數(shù)據(jù) 擴展元數(shù)據(jù)主要是指SaaS運營商和租戶所設置的可共享元數(shù)據(jù)對象。設ej為第三方或租戶所配置的元數(shù)據(jù)對象,則擴展元數(shù)據(jù)對象集合Ex_Metadata可以表示為:Ex_Metadata={e1,e2,…,ej,…,en}(1≤j≤n)。
定義3 租戶元數(shù)據(jù) 租戶元數(shù)據(jù)是指租戶自己的個性化配置對應的元數(shù)據(jù)對象,它的基礎是基本元數(shù)據(jù)和擴展元數(shù)據(jù)。設tk是SaaS中某定制租戶自己的個性化配置對象,那么所有租戶的元數(shù)據(jù)對象集合Te_Metadata可表示成:Te_Metadata={t1,t2,…,tk,…,tn}(1≤k≤n)。
在對元數(shù)據(jù)進行分類的基礎上,通過分析不同的元數(shù)據(jù)類型及其屬性,本文提出基本元數(shù)據(jù)、擴展元數(shù)據(jù)以及租戶元數(shù)據(jù)之間存在著繼承關系。如圖1描述了SaaS應用中的租戶定制與元數(shù)據(jù)之間的關系。
圖1 滿足繼承關系的租戶定制
定義4 元數(shù)據(jù)關系 三類元數(shù)據(jù)間存在如下繼承關系:Ex_Metadata可以繼承Basic_Metadata集合中的對象mi,Te_Metadata則可以同時繼承Ex_Metadata的集合對象ej以及Basic_Metadata的集合對象mi。因此,在這種對元數(shù)據(jù)進行分類的存儲模式下,租戶的定制相當靈活,可以根據(jù)Ex_Metadata、Ex_Metadata、Te_Metadata三者中任一個集合數(shù)據(jù)完成相應的定制配置。
多租戶數(shù)據(jù)模式的個性化定制,允許租戶在應用中根據(jù)業(yè)務需求修改數(shù)據(jù)庫建模專家預設定的數(shù)據(jù)模式。即由開發(fā)商提供基礎公共數(shù)據(jù)模式模版,租戶在模版上定制個性化需求的數(shù)據(jù)模式實例[1]。結合前面的定義和分析,本文提出將SaaS模式下的應用程序配置抽象成基本定制模板。
定義5 基本元數(shù)據(jù)模板
Basic_Template= {mi,ej|mi∈Basic_Metadata,ej∈
Ex_Metadata,1≤i≤n,1≤j≤n}
基本元數(shù)據(jù)模板中的對象組成主要由兩方面構成,基本元數(shù)據(jù)對象mi以及擴展元數(shù)據(jù)對象ej。并且在SaaS應用中,mi、ej、tk共同決定了每個租戶對應的定制元數(shù)據(jù),則SaaS系統(tǒng)的租戶定制差異數(shù)據(jù)就可以表示成由基本元數(shù)據(jù)模板差異和租戶自己定義的元數(shù)據(jù)差異所組成的集合,定義如下:
定義6 差異數(shù)據(jù)
diff_Metadata={diff_M,diff_E,tk}
其中,diff_M表示租戶間關于基本元數(shù)據(jù)的定制差異數(shù)據(jù),diff_E表示租戶關于擴展元數(shù)據(jù)的定制差異數(shù)據(jù),tk表示租戶自己定義的元數(shù)據(jù)。本文不考慮租戶自定義的個性化定制差異,后面將主要針對基本模板的定制差異數(shù)據(jù)研究相關的存儲策略。
2.2 差異數(shù)據(jù)存儲策略
在傳統(tǒng)的基于元數(shù)據(jù)驅動的數(shù)據(jù)存儲方式[8]中,SaaS模式下的定制租戶必須存儲定制對象的所有屬性。這種存儲設計造成重復對象、相同屬性的大量冗余存儲,浪費了大量寶貴的存儲空間。為此,結合前面的差異元數(shù)據(jù)理論,本文提出一種面向SaaS應用的差異數(shù)據(jù)存儲策略。該方案相比傳統(tǒng)的元數(shù)據(jù)存儲模式減少了租戶在定制過程中的存儲數(shù)據(jù)量,新方案中定制租戶只需要存儲定制對象的部分差異屬性,從而提高了存儲空間利用效率。
在差異數(shù)據(jù)存儲方法中,第一個租戶要求完整存儲定制對象的全部屬性。根據(jù)差異存儲設計,如果要插入一條定制字段數(shù)據(jù)到元數(shù)據(jù)表中,要先比較該記錄是否為差異數(shù)據(jù),即比較兩個相鄰租戶對于相同的定制對象的字段屬性值是否相等。算法1給出了差異數(shù)據(jù)存儲方法的過程描述。
算法1 差異數(shù)據(jù)存儲過程
輸入:租戶標識TID,所屬對象ObjID,字段標識FieldID,字段對應的屬性值Val
輸出:差異數(shù)據(jù)存儲表(diff_metadata table)
S1:定制差異表初始狀態(tài)為空;
S2:輸入待增加的租戶Ti的定制信息:
Ti的TID、ObjID、FieldID和Val;
S3:在差異存儲表中檢索相鄰租戶Ti-1的定制信息:
Ti-1的TID、ObjID、FieldID和Val;
S4:比較S2和S3步驟中的對應字段的屬性值ValTi-1與ValTi是否相等;
S5:如果相等,則表示該字段為差異值,將該信息存入差異表;
如果不相等,則表示該字段不是差異值,不寫入。
示例1 如表1所示,假設參與定制的租戶是T1、T2、T3,定制對象有3個屬性,分別為0、1、2 ,ai表示租戶Ti對應于屬性0的值(1≤i≤3),bi表示租戶Ti對應于屬性1的值(1≤i≤3),ci表示租戶Ti對應于屬性2的值(1≤i≤3)。利用差異數(shù)據(jù)存儲方法進行租戶的定制存儲。
表2為按照算法1存儲的多租戶數(shù)據(jù)定制實例表。對比表1可以看出,差異存儲方法比傳統(tǒng)的元數(shù)據(jù)存儲方法減少了租戶T2、T3的定制數(shù)據(jù)存儲量,對于一個具有m個租戶的SaaS應用,其共同定制具有n個屬性的某相同對象,采用差異數(shù)據(jù)存儲方式需要存儲的定制數(shù)據(jù)量要小于傳統(tǒng)元數(shù)據(jù)方案的m×n的存儲量級。
表2 采用差異數(shù)據(jù)存儲方法的租戶定制表
前面針對元數(shù)據(jù)驅動的傳統(tǒng)存儲模型存儲利用率低的缺點進行了改進,提出了基于元數(shù)據(jù)分類的多租戶差異存儲解決方案。接下來需要討論的便是基于新存儲方案的數(shù)據(jù)訪問問題。在差異存儲模式下,查詢某個租戶的指定字段定制信息時,根據(jù)租戶有序排列這一前提,能夠快速得到該字段的上一個租戶定制信息,進而計算出該租戶的相關字段信息。對數(shù)據(jù)的訪問分為增刪改查,下面分別給出四種數(shù)據(jù)訪問方式的算法偽代碼描述。
首先需要進行一些形式化定義和基本約定:
diff_Table表示差異表;
beforeTID表示當前租戶Ti的上一個租戶Ti-1;
fieldValue表示查詢結果;
beforeValue表示上一個租戶Ti-1該字段的值。
算法2 SELECT
輸入:租戶標識tID,對象標識objID,字段標識fieldID
輸出:字段值fieldValue
S1: createConnection(diff_Table);
//連接數(shù)據(jù)庫
S2: tID,objID,fieldID→getValue()
//獲取查詢租戶的字段信息
S3: if getValue() is not null
getValue()→fieldValue;
return fieldValue;
S4: if fieldValue is null
beforeTID(beforeValue)→beforeValue;
S5: while beforeValue is null
//繼續(xù)前找
getBeforeTenant(beforeTID)→beforeTID;
getValue(before)→beforeValue;
S6: beforeValue→fieldValue;
S7: return fieldValue.
算法3 INSERT
輸入:租戶標識tID,對象標識objID,字段標識fieldID字段值fieldValue
輸出:更新表
S1: createConnection(diff_Table);
S2: 獲取上個租戶相同字段的信息:
getBeforeTenant(tID)→beforeTID
getValue(beforeTID,objID,fieldID)→beforeValue
S3: while beforeValue is null
getBeforeTenant(beforeTID)→beforeTID;
getValue(before)→beforeValue;
S4: if beforeValue=fieldValue
return;
S5: else
inserttID,objID,fieldID,fieldValue;
算法4 UPDATE
輸入:租戶標識tID,對象標識objID,字段標識fieldID字段值fieldValue
輸出:更新表
S1: createConnection(diff_Table);
S2: 獲取當前待修改租戶Ti的字段信息:
tID,objID,fieldID
S3:查詢下一個租戶Ti+1相同字段的信息:objID,fieldID
S4: if Ti+1(objID,fieldID) is exist
updateTi(tID,objID,fieldID);
S5: else
Ti(tID,objID,fieldID)→diff_table;
updateTi(tID,objID,fieldID);
算法5 DELETE
輸入:租戶標識tID,對象標識objID,字段標識fieldID字段值fieldValue
輸出:更新表
S1: createConnection(diff_Table)→con;
S2: 獲取當前待刪除租戶Ti的字段信息:
tID,objID,fieldID
S3: 查詢下一個租戶Ti+1相同字段的信息:objID,fieldID
S4: if Ti+1(objID,fieldID) is exist
deleteTi(tID,objID,fieldID);
S5: else
Ti(tID,objID,fieldID)→diff_table;
deleteTi(tID,objID,fieldID);
4.1 存儲空間利用效率實驗
在差異數(shù)據(jù)存儲模式中,由于定制租戶只存儲了定制對象的部分屬性數(shù)據(jù),故相比傳統(tǒng)元數(shù)據(jù)的完全存儲方式要具有更高效的存儲空間利用率。為進一步量化差異存儲方案的冗余減少量,本文將采用數(shù)學理論對該方案的冗余存儲空間減少概率進行分析,從而評估差異數(shù)據(jù)存儲方法的存儲空間利用效率。在差異存儲方法中,一條定制數(shù)據(jù)存儲與否只取決于差異是否存在這兩種狀態(tài),其符合0-1分布特性,如果將配置n個屬性字段看成n次貝努里試驗,則它們符合二項分布特性,故實驗采用二項分布來估算差異數(shù)據(jù)的存儲空間減少概率。
實驗參數(shù)為某SaaS應用中,一共有t個租戶要進行定制服務。該系統(tǒng)中由第三方運營商提供的定制模板具有m個定制對象,每個租戶在定制一個具體的對象時都要設置n個字段屬性,且每個屬性可供租戶進行配置的值有r個。計算兩個租戶定制時發(fā)生q次相同配置的概率為:
其中,ξ表示概率隨機試驗結果。當相鄰租戶存在冗余時,則不存儲該數(shù)據(jù)。則在該概率下減少的數(shù)據(jù)存儲量為:
t×m×q
為進一步量化對比結果,實驗將相關參數(shù)固定為10 000個租戶,50個對象,10個屬性,可配置屬性字段5個,分別測試傳統(tǒng)存儲和差異存儲在不同冗余發(fā)生概率下的存儲數(shù)據(jù)量。表3為實驗數(shù)據(jù)測試結果。
表3 存儲空間消耗對比數(shù)據(jù)
根據(jù)表3,對比兩種存儲方式分別在p(ε=1)=27.03%,p(ε=2)=30.21%,p(ε=3)=20.78%,p(ε=4)=9.98%概率下的存儲數(shù)據(jù)量,使用差異數(shù)據(jù)存儲方式對于定制數(shù)據(jù)的存儲消耗要明顯小于傳統(tǒng)的存儲方法。這是因為差異存儲免去了對于相同定制數(shù)據(jù)的存儲,提高了系統(tǒng)存儲空間的利用效率。
4.2 訪問性能的比較分析
在性能評估實驗中,本文主要考慮與SaaS應用相關的重要因素租戶的規(guī)模,測試比較差異存儲方案和傳統(tǒng)元數(shù)據(jù)完全存儲方案的數(shù)據(jù)訪問性能。首先,實驗設計了兩類SQL查詢語句:(1) 模擬通過客戶ID查詢一個客戶的特定屬性值;(2) 查詢客戶信息表中的所有客戶信息。我們將這兩類測試語句分別命名為select1、select2。其次,實驗測試了更新操作的響應時間,固定租戶規(guī)模為100個時分別設計某個特定屬性字段的插入、刪除、更改語句。
實驗系統(tǒng)的運行環(huán)境是一個配置為Intel(R) Core(TM) i5-2450M CPU, 2.50 GHz的處理器,4.00 GB內存,64位Windows 7操作系統(tǒng)的PC機。數(shù)據(jù)庫為MySQL 5.6.10,采用P6Spy和IronTrackSQL工具來統(tǒng)計不同實驗場景下的數(shù)據(jù)庫訪問時間。
實驗使用的數(shù)據(jù)情況為,設計三個不同的租戶規(guī)模分別為1個、50個以及1000個。定制模板中每個對象的字段屬性個數(shù)為8,假定任意兩個相鄰租戶間具有2個相同的屬性設置,分別測試執(zhí)行以上兩類SQL語句獲得的響應時間。
如圖2-圖4可以看出,差異存儲模式執(zhí)行效率要略低于傳統(tǒng)存儲模式??紤]到差異存儲計算步驟明顯多于完全存儲,訪問響應時間會有所增加也是意料之中。隨著租戶規(guī)模的擴大,傳統(tǒng)存儲的響應時間幾乎不變,差異存儲的響應時間增長幅度很小,漲幅完全在可接受范圍之內。并且由于定制中差異存儲的存儲數(shù)據(jù)量會小于傳統(tǒng)存儲,在一定程度上又提升了訪問執(zhí)行效率,所以本文提出的差異數(shù)據(jù)存儲模式在提高空間利用率的情況下,還是具有較好的數(shù)據(jù)訪問性能的。
圖2 select1的性能比較 圖3 select2的性能比較
圖4 更新操作的性能比較
本文提出了一種適用于SaaS模式下的多租戶差異數(shù)據(jù)存儲方法。該方案首先通過分類元數(shù)據(jù)來建立差異數(shù)據(jù)的語義,然后根據(jù)差異數(shù)據(jù)存儲策略判斷租戶定制信息是否需要存儲。最后還通過數(shù)學計算證實了該模型具有良好的空間存儲利用率。此外,文中還給出了差異存儲方案的數(shù)據(jù)訪問算法,實驗數(shù)據(jù)表明,該方案的數(shù)據(jù)訪問性能還是不錯的。
下一步的研究工作主要包括:
(1) 對于不相鄰租戶間存在的冗余,通過進一步分析和擴展差異存儲模型來減少冗余;
(2) 優(yōu)化多租戶存儲模式的數(shù)據(jù)訪問算法,降低計算時間;
(3) 研究并提高方案對于不同應用領域的可擴展性。
[1] 韓燕波,王桂玲,劉晨,等.互聯(lián)網(wǎng)計算機的原理與實踐[M].北京:科學出版社,2010.
[2] 林海略,韓燕波.多租戶應用的性能管理關鍵問題研究[J].計算機學報,2010,33(10):1881-1895.
[3] Vidyanand C.Software as a service:Implications for investment in software development[C]//Proceedings of the 40th Hawii International Conference on System Sciences(HICSS’07),2007:209-219.
[4] 葉偉,趙偉,葉軍.互聯(lián)網(wǎng)時代的軟件革命:SaaS架構設計[M].北京:電子工業(yè)出版社,2009.
[5] Lakshman A,Malik P.Cassandra:a decentralized structured storage system[J].SIGOPS Operating Systems Review,2010,44(2):35-40.
[6] Aulbach S,Grust T,Jacobs D,et al.Multi-Tenant databases for software as a service:schema mapping techniques[C]//Proceedings of the ACM SIGMOD Conference,2008:1195-1206.
[7] 唐圣潘,周肆清,丁長松.基于SASA模式的共享模型的數(shù)據(jù)擴展技術研究[J].計算機技術與發(fā)展,2011,21(8):63-65.
[8] Weissman C D,Bobrowski S.The design of the force.com multi-tenant internet application development platform[C]//Proceedings of the ACM SIGMOD International Conference on Management of Data,2009.Providence,Rhode Island,USA:Ugur Cetintemel,2009:889-896.
[9] 周文瓊,李慶忠,范路橋,等.SaaS模式多租戶數(shù)據(jù)存貯模型的研究與實現(xiàn)[J].計算機科學,2013,40(10):194-197.
[10] Salesforce.com.Inc.Database.com[EB/OL].[2011-06-08].http://www. data -base.com/.
[11] 李保棟,孔蘭菊,陸春生,等.SaaS交付平臺多租戶數(shù)據(jù)管理模型研[J].小型微型計算機系統(tǒng),2012,33(12):2658-2663.
[12] Agrawal D,Abbadiae E,Antony S,et al.Data management challenges in cloud computing infrastructures databases in Networked Information Systems the 6th International Workshop,DNIS 2010[C]//AizuWakamatsu,Japan,2010:1-10.
AN SAAS APPLICATION-ORIENTED DIFFERENCES DATA STORAGE METHOD
Cai Ting1Cai Yu1Ouyang kai2Zhou Jingli2
1(SchoolofMobileTelecom,ChongqingUniversityofPostsandTelecom,Chongqing401520,China)2(SchoolofComputer,HuazhongUniversityofScienceandTechnology,Wuhan430074,Hubei,China)
To cope with the problem of data redundancy storage caused by the repeated customisations of multi-tenant in SaaS application, we proposed a metadata-based differences data storage method. In the scheme we studied the traditional metadata-driven storage pattern, and addressed the formal semantics and data storage strategy for differences storage scheme by the definition of metadata classification. At last, we proposed the data access algorithms of the scheme for the operations of addition and deletion, query and modification respectively. It was indicated by the calculation that the differences storage method exhibited higher storage space utilisation under the probabilistic analysis of redundant reduction, which reduced tenants’ redundant storages effectively. Meanwhile, the performance test result also reflected a preferable data access performance of the scheme.
Software as a service(SaaS) Multi-tenant Metadata Differences storage Method
2014-10-29。重慶市教委科學技術研究項目(KJ1402 002);重慶市本科高?!叭匦袆佑媱潯碧厣珜I(yè)建設項目(渝教高(2013)49號)。蔡婷,講師,主研領域:網(wǎng)絡安全結構與控制技術,互聯(lián)網(wǎng)計算。蔡宇,講師。歐陽凱,博士。周敬利,教授。
TP391
A
10.3969/j.issn.1000-386x.2016.04.010