何文哲 范冰冰
(華南師范大學計算機學院 廣東 廣州 510631)
?
一種新型高效的多租戶共享數據模型
何文哲 范冰冰
(華南師范大學計算機學院 廣東 廣州 510631)
構建SaaS多租戶數據庫時,針對為實現租戶自定義數據高效存儲而面臨的多租戶共享數據模型設計問題,提出一種適用于多租戶數據存儲的多級塊折疊表數據模型。該模型使用多組結構各異的塊表來存儲租戶的自定義數據。設計模型的基礎數據表,并給出多級塊數據表的一般性設置方法。實驗結果表明,在一個SaaS應用實例中,該數據模型比傳統塊折疊表數據模型減少了28%的查詢延時和22%的存儲空間,比彈性擴展表數據模型減少了54.9%的查詢延時和83.9%的存儲空間,多級塊折疊表數據模型具有更高的查詢性能以及空間效率。
多租戶 數據模型 塊折疊表
SaaS模式通過互聯網向用戶提供軟件服務,用戶根據自己的需要租賃軟件服務,并支付費用[1]。SaaS服務供應商希望通過高效復用軟件的形式降低成本,多租戶技術能夠讓多個需要使用相同或類似軟件服務的租戶共用同一個軟件實例,實現最大程度的共享[2]。
多個租戶邏輯應用需要共享一個多租戶應用實例,不同邏輯應用支撐的業務產生不同結構的數據。本文把租戶因不同業務需求而定義的數據稱為租戶自定義數據。若一個多租戶數據庫實例為每一個租戶設置獨立的數據表,存儲其的自定義數據。當數據庫的數據表數量達到一定程度時,數據庫的性能會受到較大影響,難以滿足租戶的查詢性能需求[3]。因此,需要設置有限的若干張共享數據表存儲多個租戶的自定義數據[4]。而能夠共享存儲租戶數據的數據表的結構,則稱為多租戶共享數據表模型。如何設置一種高效的多租戶共享數據模型,成為了構建多租戶數據庫的關鍵問題。
目前,國內外學術界與工業界針對多租戶共享數據模型的設置做了大量的研究。
文獻[5]介紹和對比了若干種多租戶共享數據模型,評估了一個使用了拓展表數據模型的XML數據庫性能,得出了XML數據庫仍無法滿足SaaS多租戶應用的查詢性能需求的結論。文獻[6]提出了一種彈性擴展表數據模型。文獻[7]使用了該模型搭建了一個多租戶數據庫架構,在該模型中,租戶的異構數據會被完全垂直切分,在存儲時,需要存儲大量額外的元數據,影響數據存儲效率,在重構查詢結果時,需要大量的連接操作,影響數據查詢性能。文獻[8]提出了一種索引表數據模型,在該模型中,隨著租戶數量的增加和租戶自定義數據行為的增加,數據庫的數據表量會不斷增加,造成性能瓶頸。文獻[3]提出一種塊折疊表數據模型。在這種模型中,用于存儲租戶自定義數據的塊表需要在建立多租戶數據庫之初建立,適應性較差。文獻[9]提出一種以XML為基礎的共享數據模型的多租戶數據擴展方法。該文獻僅對提出的方法進行了性能分析,未通過實驗對方法的性能進行驗證。文獻[10]提出基于XML的數據擴展模型。該文獻未通過實驗驗證該模型查詢性能以及空間效率。
除了學術界外,IT企業也對多租戶數據庫展開了研究。文獻[11]提出了Force.com云平臺使用寬度為500列的通用表存儲租戶的應用數據,使用透視表存儲非規范化數據。由于通用表為稀疏表,且寬度較大,表中存儲了大量的空值,使得數據庫的空間使用率較低。
由此可知,在構建多租戶數據庫時,如何設計一個具有較高查詢性能以及空間效率的多租戶共享數據模型的問題依然亟待解決。
為了方便描述塊折疊表數據模型以及多級塊折疊表數據模型,本文以一個多租戶課程管理數據為場景,系統為租戶A、租戶B以及租戶C提供服務。由于三個租戶的業務管理需求差異,導致租戶需要存儲不同的課程數據,分別如表1-表3所示。

表1 租戶A課程數據表

表2 租戶B課程數據表

表3 租戶C課程數據表
塊表數據模型通過設置一張塊表來存儲租戶按照一定規則垂直切分后的數據。在這種模型中,租戶的數據表被切分成塊,每一塊包含若干個字段,這些塊被存儲到同一張塊表中,塊表的一個元組用于存儲租戶一個元組被切分后的其中一塊。
塊折疊表數據模型是塊表數據模型的一種改進模型。在塊表中,由于租戶的所有數據都被拆分成較小的塊,構造查詢結果時依然需要較多的連接操作[12]。對于一個多租戶應用來說,其服務的多個租戶邏輯應用具有相同或類似的業務需求,用于支撐業務的數據具有部分相同的結構。在塊折疊模型中,租戶結構相同的數據被稱為基礎數據,這部分數據被“折疊”后使用基礎數據表存儲,而自定義數據使用塊表數據模型進行存儲。
本場景中租戶的數據存儲在多級塊折疊表數據模型的情況如表4和表5所示。

表4 塊折疊表數據模型Tenant_Table

表5 塊折疊表數據模型Chunk_Table
塊折疊表數據模型相對于塊表數據模型,其基礎數據部分被“折疊”存儲在基礎表中,需要切分成塊的數據量減少,在構造查詢結果時,需要完成的連接操作也因此減少。該模型為了減少連接操作,設置的塊需要包含多個數據字段。這樣的設置使得該模型在存儲字段數據類型比例與塊字段數據類型比例差異較大的用戶數據時,如表5所示,在存儲使用特定塊表存儲租戶C與租戶D的數據時,具有以下缺點:
(1) 需要存儲大量的空值,使得有效數據占所有數據的比例較低。如表5所示,租戶B與租戶C有效數據占塊內總數據的比例僅為50%。
(2) 構造查詢結果時需要進行大量的連接操作。如表5所示,租戶B與租戶C的自定義數據部分都被垂直切分為5個塊進行存儲,在構造其自定義數據結果時需要進行4次連接操作。
針對塊折疊數據模型在存儲字段數據類型比例與塊字段數據類型比例差異較大的用戶數據時的缺點,本文提出了一種改進的塊折疊表數據模型——多級塊折疊表數據模型。該模型將單張塊表改進為一組多張寬度相同,塊內數據類型比例不同的塊表,并使用該組塊表對租戶的自定義數據進行存儲。
本節依然使用第1節使用場景闡述多級塊表數據模型。在場景中,設置了1組3個級別的塊對租戶的自定義數據進行切分與存儲,設置的3個級別的塊分別為:
(1) 塊1:包含兩個varchar類型數據。
(2) 塊2:包含一個varchar類型數據,一個int類型數據。
(3) 塊3:包含兩個int類型數據。
根據塊構造設置3張塊表以及1張基礎表,將租戶的數據存儲到數據表中。基礎數據的設置以及其存儲的數據如表6所示,3張塊表的設置以及其存儲數據的情況如表7-表9所示。相對于塊表折疊表數據模型,租戶B與租戶C有效數據僅占塊內總數據的比例提升至83.3%,且租戶B和租戶C的自定義部分數據也由被切分成5塊減少至3塊,存儲數據所需空間減少的同時,重構查詢結果時,需要的連接操作也得到了減少。

表6 多級塊折疊表數據模型Tenant_Table

表7 多級塊折疊表數據模型Chunk_Table_1

表8 多級塊折疊表數據模型Chunk_Table_2

表9 多級塊折疊表數據模型Chunk_Table_3
2.1 數據模型的一般性描述
多級塊折疊模型通過設置一張基礎表存儲租戶的同構部分數據,設置基礎表的如表10所示。設置的一組多級塊表存儲租戶的自定義部分數據,設置的一組多級塊表如表11-表13所示。其中,基礎表設置的字段為:租戶id(Tenant_id),Row(行號),Com_field_1(租戶公共字段1),…,Com_field_m(租戶公共字段m)。塊表設置的字段為:租戶id(Tenant_id),Table(數據表號),Chunk(塊號),Row(行號),Cus_type_1_1(自定義數據類型1的第1字段),…,Cus_type_x_1(自定義數據類型x的第1字段),…,Com_field_o_1(自定義數據類型o的第1字段)。塊表寬度的設置、塊表級別數量的設置以及每一級別塊表自定義數據類型的組合需要根據實際SaaS多租戶應用所需要存儲的具體數據決定。

表10 多級塊折疊表數據模型Tenant_Table

表11 多級塊折疊表數據模型Chunk_Table_1

表12 多級塊折疊表數據模型Chunk_Table_x

表13 多級塊折疊表數據模型Chunk_Table_n
2.2 數據模型的設置方法
要實現使用多級塊折疊表數據模型存儲SaaS多租戶應用的數據,需要完成多級塊折疊模型數據表的設置。
方法涉及的部分符號含義如下:
SaaS多租戶應用中租戶的集合為Tenant,其大小為q,定義為Tenant={tenant1,tenant2,…,tenantq},其中tenanti為租戶。多租戶數據庫需要存儲的租戶的數據集為TenantData,其大小為q,定義為TenantData={tenantData1,tenantData2,…,tenantDataq},其中tenantDatai為租戶tenanti的數據。
方法的描述如下:
1) 對TenantData數據集中的租戶數據進行分析。根據tenant1,tenant2,…,tenantq,將每個租戶的基礎數據部分劃分到公共數據集合ComData中,ComData={comData1,comData2,…,comDataq},其中,comDatai為tenantDatai的基礎數據部分。將租戶的自定義數據部分劃分到自定義數據集合CusData中,CusData={cusData1,cusData2,…,cusDataq},其中,cusDatai為tenantDatai的自定義數據部分。
2) 根據ComData集合設置多級塊表數據模型的基礎表。ComData集合中每一個租comDatai是同構的,根據comDatai的結構設置基礎表BaseTable的結構。
3) 根據CusData集合設置多級塊表數據模型的塊表集。對CusData集合中的cusDatai進行分析,得到租戶自定義數據量集合CusDataSize={cusDataSize1,cusDataSize2,…,cusDataSizeq},其中cusDataSizei為tenanti的數據元組數量,得到租戶自定義數據字段結構集合CusDataStruc={CusDataStruc1,CusDataStruc2,…,CusDataStrucq},其中,CusDataStruci為tenanti的自定義部分數據結構,CusDataStruci={(DataTypex,n),…,(DataTypey,m)},其中(DataTypex,n)表示tenanti的自定義字段中,有n個數據類型為DataTypex的字段。根據CusDataSize和CusDataStruc設置多組多級塊折疊表的塊寬度,表數量以及每個塊的塊內結構。
3.1 實驗環境
為了驗證多級塊折疊表數據模型的查詢性能與空間效率,實驗以一個課程管理功能為背景,選取塊折疊表數據模型與彈性擴展表數據模型作為參照數據模型。實驗環境PC機的設置如圖1所示。

圖1 實驗環境PC機設置示意圖
其中,PC1模擬若干個租戶隨機發出選擇查詢請求,每次查詢一門課程的若干項課程信息。PC3存儲8~80個租戶的數據,每個租戶擁有一張字段數量為10~25個的邏輯課程數據表,每一張邏輯課程數據表擁有10 000條記錄,邏輯數據表的三個副本分別被存儲在多級塊折疊表模型、塊折疊表模型和彈性擴展表模型中。PC2存儲租戶的元數據。
3.2 實驗結果
實驗將租戶的數據存儲到MySQL數據庫中,在存儲不同租戶數據量的情況下,三種模型的空間效率對比如圖2所示。

圖2 三種數據模型空間效率對比圖
根據實驗結果可知,多級塊折疊表數據模型與參照模型在存儲同樣數量的邏輯數據時,該模型比塊折疊表模型節省約22%的存儲空間,比彈性擴展表模型節省約83.9%的存儲空間。彈性擴展表模型使用完全垂直切分數據的方式存儲租戶的自定義數據,需要存儲大量的元數據,導致租戶有效數據占比較低。對于傳統的塊折疊表模型,多級塊折疊表與其的空間效率分析如下:
對于租戶數據的基礎數據部分,多級塊折疊表數據模型與塊折疊表模型存儲數據的方式相同,存儲該部分數據的空間效率相同。對于租戶數據的自定義數據部分,由于兩種模型對于CusData的存儲方式存在差異,空間效率存儲差異,因此對兩種數據模型存儲自定義數據的空間效率進行分析。
對于租戶tenant,其自定義數據的結構可表示為:
(1)
其中(dataTypei,dci)表示tenant的自定義數據中,含有數據類型為dataTypei的字段dci個。
對于塊折疊表數據模型,其單個塊結構可表示為:
(2)
其中,(cfDataTypek,cfDck)表示一個塊含有數據類型為dataTypek的字段cdDck個。
對于多級塊折疊模型,其一組多級塊可表示為:
(3)
使用塊表的塊對cusDataStruc進行切分,切分后的塊數量為:
(4)
cfDataTypek=dataTypeidci≠0
使用多級塊表對cusDataStruc進行切分,切分后的塊數量為:
(5)
由于多級塊表模型的多個塊包含塊表的單個塊,因此可知:
mccc≤cc
(6)
對于塊表,其用于存儲租戶單個邏輯元組所需的數據空間cfs為:
(7)
其中,ms表示塊表單個元組的存儲塊描述信息所需的空間,nsdti表示塊表存儲數據類型為dataTypei的空值時的空間,dsi表示塊表存儲類型為dataTypei的數據所需的空間。
對于多級塊表,其用于存儲租戶單個邏輯元組所需的數據空間mccfs為:

(8)
由于mccc≤cc,因此可知:
mccfSize≤cfSize
(9)
由分析可知,多級塊折疊表數據模型在存儲同樣數量的邏輯元組時,只在多級塊折疊表模型使用與塊折疊表模型相同的塊切分所有租戶邏輯元組時,方與塊折疊表模型具有相同的空間效率,在更多的數據場景中,多級塊折疊表模型具有更高的空間效率。
在同樣的實驗數據設置下,對多級塊折疊表數據模型的查詢性能進行驗證實驗。PC1模擬2~20個隨機租戶同時發出查詢,每個租戶發起1 000個查詢若干個邏輯字段的選擇查詢,記錄并計算單個查詢的平均時間。三個模型的查詢平均延時對比如圖3所示,查詢吞吐率對比如圖4所示。

圖3 三種數據模型查詢延時對比圖

圖4 三種數據模型查詢延吞吐率對比圖
對于彈性擴展表模型,其在構造涉及多個數據列的查詢結果時,需要進行大量的連接操作,導致其查詢延時較高,查詢吞吐量較低。對于塊折疊表模型,由式(8)可知,多級塊折疊表數據模型能夠對不同結構的邏輯元組采取更加靈活的切分方式,在存儲同一邏輯元組時,多級塊折疊模型往往只需要更少的物理元組。在構造查詢結果時,所需要進行的連接操作也更少。在實驗場景中,與塊折疊表數據模型相比,多級塊折疊表數據模型的平均查詢延時減少了28.04%,吞吐率提高了69.68%。
本文對塊折疊表數據模型進行了拓展,提出了一種適用于多租戶數據存儲的多級塊折疊表數據模型。該數據模型通過設置基礎數據表存儲租戶同構的基礎數據,通過設置多組多張塊內結構各異的塊表存儲租戶的自定義數據,本文通過一個多級塊折疊數據模型、塊折疊表數據模型和彈性拓展表數據模型的對比實驗,驗證了多級塊折疊表數據模型具有較高的查詢性能與空間效率。本文實驗分析部分對多級塊折疊表數據模型所做的有效性分析為一般性分析,如何結合生產環境中更多的實際使用的數據庫引擎的緩存、索引等技術,對數據模型的有效性進行進一步分析與驗證,是本文未來研究的方向。
[1] Chong F, Carraro G. Architecture Strategies for Catching the Long Tail[EB/OL]. (2006-06)[2016-03-21].http://msdn.microsoft.com/enus/ library/aa479069.aspx.
[2] Chong F, Carraro G, Wolter R. Multi-Tenant Data Architecture[EB/OL]. (2006-06)[2016-03-21].https://msdn.microsoft.com/en-us/library/aa479086.aspx.
[3] Aulbach S, Grust T, Jacobs D, et al. Multi-tenant databases for software as a service: schema-mapping techniques[C]// ACM SIGMOD International Conference on Management of Data. ACM, 2008:1195-1206.
[4] Saraswathi M, Bhuvaneswari T. Multitenant SaaS model of cloud computing: Issues and solutions[C]// International Conference on Communication and Network Technologies. IEEE, 2014:27-32.
[5] Fang S, Tong Q. A comparison of multi-tenant data storage solutions for Software-as-a-Service[C]// International Conference on Computer Science & Education. IEEE, 2011:95-98.
[6] Yaish H, Goyal M, Feuerlicht G. An Elastic Multi-tenant Database Schema for Software as a Service[C]// IEEE Ninth International Conference on Dependable, Autonomic and Secure Computing. IEEE, 2011:737-743.
[7] Yaish H, Goyal M. A Multi-tenant Database Architecture Design for Software Applications[C]// IEEE, International Conference on Computational Science and Engineering. 2013:933-940.
[8] Gorti I, Shiri N, Radhakrishnan T. A Flexible Data Model for Multi-tenant Databases for Software as a Service[C]// IEEE, International Conference on Computational Science and Engineering. 2013:1059-1066.
[9] 唐圣潘, 周肆清, 丁長松. 基于SAAS模式的共享模型的數據擴展技術研究[J]. 計算機技術與發展, 2011, 21(8):63-66.
[10] 周文瓊, 李慶忠, 范路橋,等. SaaS模式多租戶數據存貯模型的研究與實現[J]. 計算機科學, 2013, 40(10):194-197.
[11] Weissman C D, Bobrowski S. The design of the force.com multitenant internet application development platform[C]// ACM SIGMOD International Conference on Management of Data, SIGMOD 2009, Providence, Rhode Island, Usa, June 29-July. 2009:889-896.
[12] Ni J, Li G, Wang L, et al. Adaptive Database Schema Design for Multi-Tenant Data Management[J]. IEEE Transactions on Knowledge & Data Engineering, 2014, 26(9):2079-2093.
ANEWEFFICIENTMULTI-TENANTSHAREDDATAMODEL
He Wenzhe Fan Bingbing
(SchoolofComputer,SouthChinaNormalUniversity,Guangzhou510631,Guangdong,China)
Aiming at the problem of designing multi-tenant shared data model for achieving efficient storage of tenant’s custom data when building an SaaS multi-tenant database. A multi-class chunk folding data model is proposed for multi-tenant data storage. Multiple groups of heterogeneous chunk tables are used to store tenant’s custom data. The base table’s structure of the data model is designed. A general method is proposed for setting the heterogeneous chunk tables. The experimental result shows that the multi-class chunk folding model reduces the query latency by 28% and reduces the storage space by 22% compared with the classical chunk folding model. It also shows that multi-class chunk folding model reduces query latency by 54.9% and reduces storage space by 83.9% compared with the elastic extension table model, which means the multi-class chunk folding data model has higher query performance and space efficiency.
Multi-tenant Data model Chunk folding table
2016-06-24。廣東省重大科技專項(2014B010115001,2014B010112002,2016B030305003)。何文哲,碩士,主研領域:云計算。范冰冰,教授。
TP3
A
10.3969/j.issn.1000-386x.2017.08.012