0引言
随着Internet技术的迅猛发展,将软件作为一种新的服务形式提供给客户的需求量逐年增加,而SAAS(SoftwareasService,软件即服务)作为一种新型软件服务形式的出现正是顺应了这个需求。它是一种颠覆传统的软件服务形式,将使软件供应商与客户之间的关系发生彻底转变,从简单的售卖关系转变为服务关系。
SAAS服务面向互联网上的所有租户,每个租户根据自身的实际情况,所要求的数据结构各不相同,SAAS软件开发商们在搭建基于共享模型的SAAS架构时就不得不考虑各租户之间数据结构的差异性问题。针对各租户所要求的数据结构的不同,在进行系统数据库设计时就要对各租户不同的数据结构实施相应的数据扩展策略。
1SAAS数据模型
在设计基于SAAS模式的系统数据模型时,出于降低开发成本和接受服务的客户量等考虑,在数据的隔离、共享之间取得一定的平衡是一个必须考虑的重要因素。就一般而言,SAAS系统的数据模型有如下三种形式:
(1)独立数据库。
将每个客户的数据单独存放在一个独立数据库中,使各客户间的数据完全隔离,最大限度地保证了客户数据的安全。
(2)共享数据库、单独模式。
所有客户共享数据库,但各自有一套独有的数据表来存放各个客户的数据。这在各客户数据的隔离和共享之间取得了一定的平衡。
(3)共享数据库、共享模式。
所有客户共享一个数据库和同一套数据表。该模式下的一个数据表里可以包含多个客户的数据,由客户ID来区分数据归属于哪个客户。该模型具有投入成本低等特点,而且每台数据库服务器可以支持最大的客户量;但是由于所有客户的数据库存放在同一个数据表中,因此可能需要花费更多额外的成本来保证客户之间的数据安全。
2共享模型的多租户数据扩展方案
在这种模式下,所有的客户共享数据库、共享表结构,所有客户的数据存放在同一个数据表中,通过客户ID来区分不同客户的数据。该模式的数据库服务器硬件和数据备份成本最低,它允许每个数据库服务器所支持的客户量达到最多。但是由于所有客户共同使用一个表,在可扩展性、可配置性上产生了瓶颈。
为了解决这个问题,通常有以下三种方法。
2.1定制列
即使用固定扩展集,指在表中除了各租户共有的一些字段外,还包括各租户各自独有的一些字段。如:可设计Table(TenantID,FixedColl,ExtendColu1,ExtendColu2...ExtendColun),其中TenantID,FixedColl是固定字段;ExtendColu1,ExtendColu2...ExtendColun是扩展字段。
这种方法不需要处理复杂的数据扩展跟踪,单随着租户的增加,每个租户要求添加的列就很多,但特定租户扩展的数据列对于其他租户是没有任何意义的,严重地破坏了表的结构,并且提供的扩展有限,有时扩展字段中的字段可能为空,给表空间带来了巨大浪费。
2.2预分配字段
该方法在表格中提供一定预设数量的预设字段,当客户需要扩展数据时,从表中选取适量的预设字段来扩展数据,但每个客户选取的预设字段的涵义可能不同。如表1中F1、F2、F3就是预分配的字段。
在表1中,TenantID字段将每条记录与租户相关联。除了一组标准字段外,还提供一些预设字段,预设字段的使用由租户决定,预设字段的数据类型可以不同,一般采用字符串数据类型,并使用元数据来跟踪其真实数据类型,
该方案虽然满足客户数据的可扩展、可配置型,但在给定的数据表中,预设字段的数量具有不确定性,有的客户需求多,有的客户需求少。如果预设字段的数量设得过大,就会浪费空间;设得过小,又不得满足所有客户的需求。
2.3名称值对
名称值对讲所有用户异构的数据(扩展的数据)放在一个扩展表中,并在主数据表中有一个字段与扩展表相关联,并且用元数据表中的元数据来跟踪相应扩展字段的标记和数据类型。该方法使客户自己能够对数据模型进行延伸。
该方法能最大限度地满足所有客户的无限扩展需求,客户能够自行决定数据的可扩展、可配置性,又保持了在该数据模型下的成本优势。虽然这种结构可以方便地扩展无数个字段,但增加诸如索引、查询以及更新记录等数据功能的复杂程度。
3基于XML的共享模型的多租户数据扩展方案
在共享模型的SAAS系统中,所有客户共享表结构,但租户间的数据结构是不同的,将异构的数据存入到固定的表,需要对异构的部分数据进行处理。而XML数据中数据结构是不尽相同的、是异构的,但可以通过XML技术灵活地管理XML数据中的节点。因此,可利用XML数据的特性并采用相应的技术来处理各租户间异构的数据。
该方案是指在表中采用一种基于XML的数据模型字段来处理各客户间异构的数据。现在主流大型关系数据库系统都支持对XML数据的存储和管理。Oracle从9.2开始就支持一种新的数据类型(XMLType),用于存储和管理XML数据,并提供了很多的函数,用来直接读取XML文档和管理节点。