一种新型高效的多租户共享数据模型

2017-08-12 12:22何文哲范冰冰
计算机应用与软件 2017年8期
关键词:数据类型字段数据表

何文哲 范冰冰

(华南师范大学计算机学院 广东 广州 510631)



一种新型高效的多租户共享数据模型

何文哲 范冰冰

(华南师范大学计算机学院 广东 广州 510631)

构建SaaS多租户数据库时,针对为实现租户自定义数据高效存储而面临的多租户共享数据模型设计问题,提出一种适用于多租户数据存储的多级块折叠表数据模型。该模型使用多组结构各异的块表来存储租户的自定义数据。设计模型的基础数据表,并给出多级块数据表的一般性设置方法。实验结果表明,在一个SaaS应用实例中,该数据模型比传统块折叠表数据模型减少了28%的查询延时和22%的存储空间,比弹性扩展表数据模型减少了54.9%的查询延时和83.9%的存储空间,多级块折叠表数据模型具有更高的查询性能以及空间效率。

多租户 数据模型 块折叠表

0 引 言

SaaS模式通过互联网向用户提供软件服务,用户根据自己的需要租赁软件服务,并支付费用[1]。SaaS服务供应商希望通过高效复用软件的形式降低成本,多租户技术能够让多个需要使用相同或类似软件服务的租户共用同一个软件实例,实现最大程度的共享[2]。

多个租户逻辑应用需要共享一个多租户应用实例,不同逻辑应用支撑的业务产生不同结构的数据。本文把租户因不同业务需求而定义的数据称为租户自定义数据。若一个多租户数据库实例为每一个租户设置独立的数据表,存储其的自定义数据。当数据库的数据表数量达到一定程度时,数据库的性能会受到较大影响,难以满足租户的查询性能需求[3]。因此,需要设置有限的若干张共享数据表存储多个租户的自定义数据[4]。而能够共享存储租户数据的数据表的结构,则称为多租户共享数据表模型。如何设置一种高效的多租户共享数据模型,成为了构建多租户数据库的关键问题。

目前,国内外学术界与工业界针对多租户共享数据模型的设置做了大量的研究。

文献[5]介绍和对比了若干种多租户共享数据模型,评估了一个使用了拓展表数据模型的XML数据库性能,得出了XML数据库仍无法满足SaaS多租户应用的查询性能需求的结论。文献[6]提出了一种弹性扩展表数据模型。文献[7]使用了该模型搭建了一个多租户数据库架构,在该模型中,租户的异构数据会被完全垂直切分,在存储时,需要存储大量额外的元数据,影响数据存储效率,在重构查询结果时,需要大量的连接操作,影响数据查询性能。文献[8]提出了一种索引表数据模型,在该模型中,随着租户数量的增加和租户自定义数据行为的增加,数据库的数据表量会不断增加,造成性能瓶颈。文献[3]提出一种块折叠表数据模型。在这种模型中,用于存储租户自定义数据的块表需要在建立多租户数据库之初建立,适应性较差。文献[9]提出一种以XML为基础的共享数据模型的多租户数据扩展方法。该文献仅对提出的方法进行了性能分析,未通过实验对方法的性能进行验证。文献[10]提出基于XML的数据扩展模型。该文献未通过实验验证该模型查询性能以及空间效率。

除了学术界外,IT企业也对多租户数据库展开了研究。文献[11]提出了Force.com云平台使用宽度为500列的通用表存储租户的应用数据,使用透视表存储非规范化数据。由于通用表为稀疏表,且宽度较大,表中存储了大量的空值,使得数据库的空间使用率较低。

由此可知,在构建多租户数据库时,如何设计一个具有较高查询性能以及空间效率的多租户共享数据模型的问题依然亟待解决。

1 块表数据模型与多级块折叠表数据模型

为了方便描述块折叠表数据模型以及多级块折叠表数据模型,本文以一个多租户课程管理数据为场景,系统为租户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次连接操作。

2 多级块折叠表数据模型

针对块折叠数据模型在存储字段数据类型比例与块字段数据类型比例差异较大的用户数据时的缺点,本文提出了一种改进的块折叠表数据模型——多级块折叠表数据模型。该模型将单张块表改进为一组多张宽度相同,块内数据类型比例不同的块表,并使用该组块表对租户的自定义数据进行存储。

本节依然使用第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 多级块折叠表数据模型

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%。

4 结 语

本文对块折叠表数据模型进行了拓展,提出了一种适用于多租户数据存储的多级块折叠表数据模型。该数据模型通过设置基础数据表存储租户同构的基础数据,通过设置多组多张块内结构各异的块表存储租户的自定义数据,本文通过一个多级块折叠数据模型、块折叠表数据模型和弹性拓展表数据模型的对比实验,验证了多级块折叠表数据模型具有较高的查询性能与空间效率。本文实验分析部分对多级块折叠表数据模型所做的有效性分析为一般性分析,如何结合生产环境中更多的实际使用的数据库引擎的缓存、索引等技术,对数据模型的有效性进行进一步分析与验证,是本文未来研究的方向。

[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

猜你喜欢
数据类型字段数据表
带钩或不带钩选择方框批量自动换
如何理解数据结构中的抽象数据类型
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
湖北省新冠肺炎疫情数据表
浅谈台湾原版中文图书的编目经验
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用
无正题名文献著录方法评述