您的位置: DOIT首页 > 软件频道 > 正文

知识介绍:SaaS系统如何设计数据模型

12年01月06日 16:15【转载】作者:机房360  责任编辑:王瑶

导读:本文尝试通过对国内外对于基于SaaS模式的数据模型的几种常见思路及其适用场景的研究,对这方面的若干关键问题进行初步的探讨和分析。

关键词: 数据模型 设计 SaaS

本文尝试通过对国内外对于基于SaaS模式的数据模型的几种常见思路及其适用场景的研究,对这方面的若干关键问题进行初步的探讨和分析。

一.SaaS系统常见数据模型

在设计SaaS系统的数据模型时出于服务客户及减低开发成本等考虑,在数据的共享和隔离之间求得一定的平衡是必须考虑的一个重要因素。

因此一般在设计对应数据模型时不仅要考虑到技术因素,例如怎样构建一个弹性架构以支持数目不定的客户、怎样消除大容量并发访问数据库对系统性能造成的压力以及怎样允许用户按需扩展自定义数据等;同时也必须将商业因素纳入考虑范围之中,例如架构在该SaaS系统上的业务应用主要面向哪些行业的客户、目标客户对于数据存储方式是否有基于一定法律法规的要求等等。一般而言,SaaS系统的数据模型有如下三种形式:

1.1独立数据库

将每个客户的数据单独存放在一个独立数据库是实现数据隔离的一种最为简便的解决方案。

在应用这种数据模型的SaaS系统中,大部分系统资源和应用代码还是由所有的客户所共享使用,但物理上每个客户有自己的一整套数据,而且单独存放。系统将借由元数据(Metadata)来记录哪一个数据库属于哪一个特定客户,与此同时也可以部署一定的数据库访问策略来确保即使系统处于异常状况下,客户数据也不会被其它客户意外访问到。

显而易见的是,一旦每个客户拥有其独立数据库,那他将可以轻易的对其做个性化的修改来符合其实际业务需求,而且如果系统出现异常情况需要将历史备份数据重新恢复的话,也将是一项轻而易举的工作。但是,这种数据模型的最大问题是对应的部署和维护成本非常高,硬件资源的消耗将明显高于其它两种方案,一台服务器将只能支持有限数量的客户。作为一种对应的解决技巧,系统可以定期使用例如SQLServer2003中提供的Auto-close功能将暂时没有活动连接使用的数据库实例从服务器的内存中移除,因此每台服务器可以更灵活的支持相对较多的客户访问,但这也只能在一定程度上缓解服务器的压力。

当客户由于所处行业因素或其它商业因素的限制,愿意支付额外的费用来做到数据隔离,确保数据安全,这种独立数据库的数据模型将是最为适合的解决方案。举例来说,处于银行业或医疗行业的客户们经常会有非常强的隔离数据的需求,这些客户甚至可能根本不会考虑去使用任何不提供客户独立数据库支持的SaaS系统。

1.2共享数据库单独模式(Schema)

第二种方式则是所有客户使用同一数据库,但各自拥有一套不同的数据表组合存在于其单独的模式之内。

在这种数据模型下,当客户尝试第一次使用该SaaS系统时,系统在创建用户环境时会创建一整套默认的表结构,同时将其关联到该客户的独立模式。此时一般使用SQLCREATE命令来创建模式,同时授权一个用户帐号来访问该模式。举例来说,在SQLServer2005中可以使用如下命令:

CREATESCHEMAContosoSchemaAUTHORIZATIONContoso

接下来,系统可以使用SchemaName.TableName来访问该客户的模式:

CREATE TABLE Contoso Schema.Resumes (EmployeeID intidentity primary key,Resume nvarchar (MAX))

一旦模式创建完毕,它将成为该客户所属用户帐号访问的的默认模式。

ALTERUSER ContosoW ITHDEFAULT_SCHEMA=ContosoSchema

一旦默认模式设置完毕,在使用该客户的用户帐号进行SQL语句操作时就不要再使用Schema Name.TableName来指定特定的数据表,而是只需要指明表名即可。因此在系统代码内一句简单的SQL语句就可以应用于所有客户,而且每个客户仅访问到自己的模式内的数据: