SaaS数据存储解决方案
本文提出了一个SaaS数据存储解决方案。为方便理解请花几分钟时间浏览上一篇《SaaS平台概要设计》http://www.cnblogs.com/hushouqi/archive/2010/06/10/1755371.html 上一篇是对层次与对象的定义,很简单。
概要:
针对于不同的用户,建立独立的数据区域是比较理想的方式。独立的数据区域有几个好处:不影响检索速度;简化开发难度;易扩展;增强数据安全性。在这里,只提供数据库的方式,对不同的用户建立不同的数据库。数据库种类不限制,sqlserver,oracle,mysql等等。
数据存储分层:
图示很直观。简单概括一下数据分为两类,平台数据与用户数据。平台数据包括群组,用户,角色等信息。用户数据是应用系统的数据。每个企业拥有自己的数据库。
DataProvider组件:
接上篇介绍的类,详细设计DataProvider组件。
要实现用户各自存储数据,最关键的是要为各用户提供数据源(DataSource)配置。
数据源接口定义如下:
public interface IDataSource {
string OrganizationID { get;set;}
string ConnString {get;set;}
string DBType { get;set;}
}
此接口定义了数据库连接字符,数据库类型和组织ID.
为每个组织定义默认的DataSource.
组织对数据源的接口定义:
public class Organization {
public IDataSource GetDefaultDataSource{ get;}
}
组织拥有默认的IDataSource
DataProvider的定义:
public interface IDataProvider
{
public DbConnection DbConncetion { get;}
public DbCommand DbCommand { get;}
public DbDataAdapter DbDataAdaper { get;}
}
此类是对数据库执行类的封装。可以使用抽象工厂模式对其进行扩展,实现对不同种类数据库的封装。在这里不详细介绍了,因为这部分的内容类似文章很多,微软也做过对其封装。
public class DataProviderFactory
{
public static IDataProvider CreateDataProvider(IDataSource ds)
}
此类是个工具类,提供了一个静态方法,根据IDataSource创建IDataProvider实例。
到这里,接口大体上就清晰了。要对用户自身数据进行操作,只要获取到当前用户的IDataProvider即可。而创建一个IDataProvider需要依赖于一个IDataSource实例。IDataSource实例可以通过Organization对象获取到。
IDataSource对象构造顺序:
1. 用户成功登录,通过User查找Organization.
2. 通过Organization查找自身的IDataSource
3. 将IDataSource保存至Session
总结:
以上对象的数据都在公共数据层保存,在登录后,获取到用户自身的IDataProvider
应用层就使用IDataProvider进行各项应用存储了。