[转载]SaaS数据存储解决方案

[转载]SaaS数据存储解决方案 – hushouqi – 博客园.

引言:

本文提出了一个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进行各项应用存储了。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏