hushouqi

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进行各项应用存储了。

posted on 2010-06-11 16:16  freemao  阅读(4124)  评论(4编辑  收藏  举报

导航