您所在的位置:e-works首页 > 管理信息化 >

面向SaaS应用基于键值对模式的多租户索引研究

发表时间:2011/4/3 孔兰菊 李庆忠 史玉良 王学 来源:万方数据
面向SaaS应用的多租户数据库为满足租户的数据隔离和按需定制的需求,需要提供支持隔离和易于定制的数据存储机制及索引机制.基于键值对存储方式,提出元数据驱动的映射表索引模型,该模型根据租户定制需求,为租户业务数据形成各自的索引元数据,通过元数据驱动实现了索引数据的离及定制效果;给出索引的维护策略,根据租户数据访问请求进行索引切片,以逐渐细化的索引切片作为数据访问的基本单位,快速返回租户结果集.实验结果表明,该方案在数据访问分布均衡的情况下,使索引维护及数据访问具有较好的总体性能.

1 引言

    在面向SaaS的应用中,多租户数据库需要提供租户之间的数据隔离及按需定制功能,同时,还要在性能上让用户有比较好的体验.这对数据的存储和索引机制提出了挑战.多租户数据库突破了传统的关系数据库、对象数据库的定义,也不同于Hbase这样面向非结构化数据搜索工作的分布式数据库系统.

    多租户数据库存储已经成为热点,但是索引方面的研究还比较少,目前只有salesforce给出了稀疏表模式下的数据透视表索引以及云数据管理基于HBase存储的多维索引等.稀疏表方式在支持租户定制方面受DBMS的限制,而HBase存储主要面向非结构化数据处理.本文的研究背景为CRM、HR等系统,以结构化数据为主.综合国内外研究成果,本文采取了键值对模式的存储方式,该存储方式能完美地支持租户定制及数据隔离,并且非常适合于描述结构化数据,面对成千上万的租户,如何实现索引的定制及索引数据的隔离存储都成了需要解决的问题.

    在现阶段,面向SaaS应用的多租户数据管理已经成为国内外研究的热点.文献[1—2]针对数据安全性、数据可扩展性等方面提出并分析了一些设计模式;文献[3]提出了SaaS应用的体系架构,然后提出了基于SaaS模式的企业公共服务平台的3个紧密相连的模型——多用户数据模型、元数据管理模型和安全服务模型;文献[4]探讨了数据仓库应用在云数据中改进索引模式以减少无效处理时间,提高命中率;文献[5]探讨了多租户数据层如何支持多租户服务计算;文献E6]提出了折叠表方式,并对各种数据管理方式得出了较详细的性能数据文献;文献[7]采用了预定义字段机制支持扩展,在查询方面提出了元数据驱动、外部搜索引擎、次优搜索机制等理念;文献[8]提出了如何使用XML来支持数据定制及驱动ECA模型;文献[9]更是在2009年的SIGMOD上讨论了目前主要的集中多租户数据管理方式,包括稀疏表、扩展表、XML、键值对等.该文献经过全面地论证和分析后认为,理想的多租户数据库尚未出现,还有很多的问题需要研究,本文主要探讨了索引方面的关键技术.

    传统的索引方式,在多租户数据库模式下,可以按照objectID、columnNAME及value建立复合索引,针对key_search这种模式,可以迅速定位到某些属性,并且重组成一个元组;对于key_search的范围查询,通过key定位到某个元组,它需要大量的连接才能反回结果集,存在性能问题;对于复合索引里边的次关键字的查询,如果想快速查询,就必须再次创建复合索引,但存储空间巨大,否则查询性能严重不足.

    Column_store是面向数据仓库的,基本上是以读为主的应用.数据仓库有着特殊的背景,它由维度和事实构成,维度通常数量有限,维度的组合虽然多,但是最终形成的方体为稀疏型的.在这种前提下,monetDB数据库中提出了cracking的策略,在查询的时候,建立查询列的副本,并按照avl树的思想基于每次查询动态调整元组顺序,这是查询驱动的思想.对于以事务处理为主的多租户应用,每次更新都要及时地反应出来,这种查询驱动的方式存在着明显的缺陷.本文更多地关注了数据库更新时的索引维护策略.

    Hbase是一个类似Bigtable的分布式数据库,大部分特性和Bigtable一样,是一个稀疏的、长期存储的、多维度的、排序的映射表.这张表的索引是行关键字、列关键字和时间戳.每个值是一个不解释的字符数组,数据都是字符串,不支持数据类型.同一个关系里面的每一行数据都可以有截然不同的属性,为动态定制属性提供了一种手段.Hbase存在的问题有两点,首先Hbase不是多租户的,没有提供隔离机制;其次,Hbase面向的是非结构化数据,每个值是一个不解释的字符数组,擅长于关键字搜索,它不可能提供基于某个属性组的索引,而结构化数据事务处理需要确切的解释每个属性的含义并对其进行维护.本文更多地讨论了结构化数据的索引机制.

    稀疏表方式建立了数据透视表作为索引,比较有代表性的Salesforce就采取了这种方式.这种索引方式解决了索引列数据对象同质的问题,但是他并没有深入探讨透视表与稀疏表的数据同步问题,也无法解决透视表数量暴涨的问题.

    本文基于键值对存储模式,分析了现有索引的局限性,结合稀疏表模式下数据透视表的思想,引入了数据映射表索引机制及切片策略,提出了一种用于多租户数据库的面向结构化数据的映射表索引结构及索引维护策略.该索引结构能有效地支持多租户定制及隔离特征,并能提供较好的访问性能.

    本文第2节给出键值对传统索引机制在SaaS应用的问题分析,介绍基于键值对模式的多租户映射表索引模型;第3节讨论索引更新策略;第4节给出上述算法的实验验证;第5节给出相关工作;第6节给出本文的结论与展望.

2 基于键值对模式的多租户索引模型

2.1键值对模式介绍

    在SaaS模式下,数据库不但要提供极高的性能,还要支持租户隔离而且富于扩展性.多租户数据库要根据环境的不同,比如不同的租户、不同的工作流程、不同的服务水平协议等提供易变性.结合国内外研究现状,本文选择了键值对存储方式来存储业务数据.

    键值对方式能提供较好的易变性,在键值对方式下,每个属性都存储在一个长而窄的关系里(如图1).租户根据自己业务的需要,自由定制所需数据项,租户的定制信息被保存在元数据(Metadata)里.租户定制的数据项经过逻辑层与存储层模式映射后,被统一保存在数据关系里(Data Table).对应于租户数据可以建立传统的索引(Index),如B+树,以方便数据存取.

基于键值对模式的多租户数据库

图1基于键值对模式的多租户数据库

    如表1所示,租户从逻辑层看到的仍然是传统关系模式的表格,但是在实际的键值对存储模式里,基于元数据信息,该关系通过模式映射机制被透明地转换到DataTable(表2)中.

表1租户001从逻辑层看到的关系R

租户001从逻辑层看到的关系R


表2存储层的关系DataTable

存储层的关系DataTable

责任编辑:廖家艳